1
14
15 package com.liferay.portlet.communities.action;
16
17 import com.liferay.portal.LayoutFriendlyURLException;
18 import com.liferay.portal.LayoutHiddenException;
19 import com.liferay.portal.LayoutNameException;
20 import com.liferay.portal.LayoutParentLayoutIdException;
21 import com.liferay.portal.LayoutSetVirtualHostException;
22 import com.liferay.portal.LayoutTypeException;
23 import com.liferay.portal.NoSuchGroupException;
24 import com.liferay.portal.NoSuchLayoutException;
25 import com.liferay.portal.RemoteExportException;
26 import com.liferay.portal.RequiredLayoutException;
27 import com.liferay.portal.events.EventsProcessorUtil;
28 import com.liferay.portal.kernel.configuration.Filter;
29 import com.liferay.portal.kernel.servlet.SessionErrors;
30 import com.liferay.portal.kernel.upload.UploadPortletRequest;
31 import com.liferay.portal.kernel.util.Constants;
32 import com.liferay.portal.kernel.util.FileUtil;
33 import com.liferay.portal.kernel.util.GetterUtil;
34 import com.liferay.portal.kernel.util.HttpUtil;
35 import com.liferay.portal.kernel.util.ParamUtil;
36 import com.liferay.portal.kernel.util.PropsKeys;
37 import com.liferay.portal.kernel.util.StringBundler;
38 import com.liferay.portal.kernel.util.StringPool;
39 import com.liferay.portal.kernel.util.StringUtil;
40 import com.liferay.portal.kernel.util.UnicodeProperties;
41 import com.liferay.portal.kernel.util.Validator;
42 import com.liferay.portal.model.ColorScheme;
43 import com.liferay.portal.model.Group;
44 import com.liferay.portal.model.Layout;
45 import com.liferay.portal.model.LayoutConstants;
46 import com.liferay.portal.model.User;
47 import com.liferay.portal.security.auth.PrincipalException;
48 import com.liferay.portal.security.permission.ActionKeys;
49 import com.liferay.portal.security.permission.PermissionChecker;
50 import com.liferay.portal.service.GroupLocalServiceUtil;
51 import com.liferay.portal.service.GroupServiceUtil;
52 import com.liferay.portal.service.LayoutLocalServiceUtil;
53 import com.liferay.portal.service.LayoutServiceUtil;
54 import com.liferay.portal.service.LayoutSetServiceUtil;
55 import com.liferay.portal.service.ThemeLocalServiceUtil;
56 import com.liferay.portal.service.UserLocalServiceUtil;
57 import com.liferay.portal.service.permission.GroupPermissionUtil;
58 import com.liferay.portal.service.permission.LayoutPermissionUtil;
59 import com.liferay.portal.service.permission.OrganizationPermissionUtil;
60 import com.liferay.portal.service.permission.UserPermissionUtil;
61 import com.liferay.portal.struts.PortletAction;
62 import com.liferay.portal.theme.ThemeDisplay;
63 import com.liferay.portal.util.PortalUtil;
64 import com.liferay.portal.util.PropsUtil;
65 import com.liferay.portal.util.PropsValues;
66 import com.liferay.portal.util.WebKeys;
67 import com.liferay.portlet.communities.util.CommunitiesUtil;
68 import com.liferay.portlet.communities.util.StagingUtil;
69 import com.liferay.portlet.tasks.NoSuchProposalException;
70 import com.liferay.util.LocalizationUtil;
71 import com.liferay.util.servlet.UploadException;
72
73 import java.io.File;
74
75 import java.util.Locale;
76 import java.util.Map;
77
78 import javax.portlet.ActionRequest;
79 import javax.portlet.ActionResponse;
80 import javax.portlet.PortletConfig;
81 import javax.portlet.PortletRequest;
82 import javax.portlet.PortletRequestDispatcher;
83 import javax.portlet.RenderRequest;
84 import javax.portlet.RenderResponse;
85 import javax.portlet.ResourceRequest;
86 import javax.portlet.ResourceResponse;
87
88 import javax.servlet.http.HttpServletResponse;
89
90 import org.apache.struts.action.ActionForm;
91 import org.apache.struts.action.ActionForward;
92 import org.apache.struts.action.ActionMapping;
93
94
99 public class EditPagesAction extends PortletAction {
100
101 public void processAction(
102 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
103 ActionRequest actionRequest, ActionResponse actionResponse)
104 throws Exception {
105
106 try {
107 checkPermissions(actionRequest);
108 }
109 catch (PrincipalException pe) {
110 return;
111 }
112
113 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
114
115 try {
116 Layout layout = null;
117 String oldFriendlyURL = StringPool.BLANK;
118
119 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
120 Object[] returnValue = updateLayout(
121 actionRequest, actionResponse);
122
123 layout = (Layout)returnValue[0];
124 oldFriendlyURL = (String)returnValue[1];
125 }
126 else if (cmd.equals(Constants.DELETE)) {
127 CommunitiesUtil.deleteLayout(actionRequest, actionResponse);
128 }
129 else if (cmd.equals("copy_from_live")) {
130 StagingUtil.copyFromLive(actionRequest);
131 }
132 else if (cmd.equals("display_order")) {
133 updateDisplayOrder(actionRequest);
134 }
135 else if (cmd.equals("logo")) {
136 updateLogo(actionRequest);
137 }
138 else if (cmd.equals("look_and_feel")) {
139 updateLookAndFeel(actionRequest);
140 }
141 else if (cmd.equals("merge_pages")) {
142 updateMergePages(actionRequest);
143 }
144 else if (cmd.equals("monitoring")) {
145 updateMonitoring(actionRequest);
146 }
147 else if (cmd.equals("publish_to_live")) {
148 StagingUtil.publishToLive(actionRequest);
149 }
150 else if (cmd.equals("publish_to_remote")) {
151 StagingUtil.publishToRemote(actionRequest);
152 }
153 else if (cmd.equals("schedule_copy_from_live")) {
154 StagingUtil.scheduleCopyFromLive(actionRequest);
155 }
156 else if (cmd.equals("schedule_publish_to_live")) {
157 StagingUtil.schedulePublishToLive(actionRequest);
158 }
159 else if (cmd.equals("schedule_publish_to_remote")) {
160 StagingUtil.schedulePublishToRemote(actionRequest);
161 }
162 else if (cmd.equals("staging")) {
163 StagingUtil.updateStaging(actionRequest);
164 }
165 else if (cmd.equals("unschedule_copy_from_live")) {
166 StagingUtil.unscheduleCopyFromLive(actionRequest);
167 }
168 else if (cmd.equals("unschedule_publish_to_live")) {
169 StagingUtil.unschedulePublishToLive(actionRequest);
170 }
171 else if (cmd.equals("unschedule_publish_to_remote")) {
172 StagingUtil.unschedulePublishToRemote(actionRequest);
173 }
174 else if (cmd.equals("virtual_host")) {
175 updateVirtualHost(actionRequest);
176 }
177 else if (cmd.equals("workflow")) {
178 updateWorkflow(actionRequest);
179 }
180
181 String redirect = ParamUtil.getString(
182 actionRequest, "pagesRedirect");
183
184 if ((layout != null) && Validator.isNotNull(oldFriendlyURL)) {
185 ThemeDisplay themeDisplay =
186 (ThemeDisplay)actionRequest.getAttribute(
187 WebKeys.THEME_DISPLAY);
188
189 if (layout.getPlid() == themeDisplay.getPlid()) {
190 Group group = layout.getGroup();
191
192 String oldPath = group.getFriendlyURL() + oldFriendlyURL;
193 String newPath =
194 group.getFriendlyURL() + layout.getFriendlyURL();
195
196 redirect = StringUtil.replace(redirect, oldPath, newPath);
197
198 redirect = StringUtil.replace(
199 redirect, HttpUtil.encodeURL(oldPath),
200 HttpUtil.encodeURL(newPath));
201 }
202 }
203
204 sendRedirect(actionRequest, actionResponse, redirect);
205 }
206 catch (Exception e) {
207 if (e instanceof NoSuchLayoutException ||
208 e instanceof NoSuchProposalException ||
209 e instanceof PrincipalException) {
210
211 SessionErrors.add(actionRequest, e.getClass().getName());
212
213 setForward(actionRequest, "portlet.communities.error");
214 }
215 else if (e instanceof RemoteExportException) {
216 SessionErrors.add(actionRequest, e.getClass().getName(), e);
217
218 String redirect = ParamUtil.getString(
219 actionRequest, "pagesRedirect");
220
221 sendRedirect(actionRequest, actionResponse, redirect);
222 }
223 else if (e instanceof LayoutFriendlyURLException ||
224 e instanceof LayoutHiddenException ||
225 e instanceof LayoutNameException ||
226 e instanceof LayoutParentLayoutIdException ||
227 e instanceof LayoutSetVirtualHostException ||
228 e instanceof LayoutTypeException ||
229 e instanceof RequiredLayoutException ||
230 e instanceof UploadException) {
231
232 if (e instanceof LayoutFriendlyURLException) {
233 SessionErrors.add(
234 actionRequest,
235 LayoutFriendlyURLException.class.getName(), e);
236 }
237 else {
238 SessionErrors.add(actionRequest, e.getClass().getName(), e);
239 }
240 }
241 else {
242 throw e;
243 }
244 }
245 }
246
247 public ActionForward render(
248 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
249 RenderRequest renderRequest, RenderResponse renderResponse)
250 throws Exception {
251
252 try {
253 checkPermissions(renderRequest);
254 }
255 catch (PrincipalException pe) {
256 SessionErrors.add(
257 renderRequest, PrincipalException.class.getName());
258
259 return mapping.findForward("portlet.communities.error");
260 }
261
262 try {
263 ActionUtil.getGroup(renderRequest);
264 }
265 catch (Exception e) {
266 if (e instanceof NoSuchGroupException ||
267 e instanceof PrincipalException) {
268
269 SessionErrors.add(renderRequest, e.getClass().getName());
270
271 return mapping.findForward("portlet.communities.error");
272 }
273 else {
274 throw e;
275 }
276 }
277
278 return mapping.findForward(
279 getForward(renderRequest, "portlet.communities.edit_pages"));
280 }
281
282 public void serveResource(
283 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
284 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
285 throws Exception {
286
287 String resourceId = GetterUtil.getString(
288 resourceRequest.getResourceID());
289
290 if (resourceId.equals("/html/portlet/communities/tree_js_node.jsp")) {
291 long groupId = ParamUtil.getLong(resourceRequest, "groupId");
292 boolean privateLayout = ParamUtil.getBoolean(
293 resourceRequest, "privateLayout");
294 long parentLayoutId = ParamUtil.getLong(
295 resourceRequest, "parentLayoutId");
296 long nodeId = ParamUtil.getLong(resourceRequest, "nodeId");
297 long[] openNodes = StringUtil.split(
298 ParamUtil.getString(resourceRequest, "openNodes"), 0L);
299 boolean selectableTree = ParamUtil.getBoolean(
300 resourceRequest, "selectableTree");
301 long[] selectedNodes = StringUtil.split(
302 ParamUtil.getString(resourceRequest, "selectedNodes"), 0L);
303 String portletURL = ParamUtil.getString(
304 resourceRequest, "portletURL");
305
306 resourceRequest.setAttribute(WebKeys.TREE_GROUP_ID, groupId);
307 resourceRequest.setAttribute(
308 WebKeys.TREE_PRIVATE_LAYOUT, privateLayout);
309 resourceRequest.setAttribute(
310 WebKeys.TREE_PARENT_LAYOUT_ID, parentLayoutId);
311 resourceRequest.setAttribute(WebKeys.TREE_NODE_ID, nodeId);
312 resourceRequest.setAttribute(WebKeys.TREE_OPEN_NODES, openNodes);
313 resourceRequest.setAttribute(
314 WebKeys.TREE_SELECTABLE_TREE, selectableTree);
315 resourceRequest.setAttribute(
316 WebKeys.TREE_SELECTED_NODES, selectedNodes);
317 resourceRequest.setAttribute(WebKeys.TREE_PORTLET_URL, portletURL);
318 resourceRequest.setAttribute(
319 WebKeys.TREE_RENDER_CHILDREN_ONLY, true);
320 }
321 else {
322 resourceId =
323 "/html/portlet/communities/scheduled_publishing_events.jsp";
324 }
325
326 PortletRequestDispatcher portletRequestDispatcher =
327 portletConfig.getPortletContext().getRequestDispatcher(resourceId);
328
329 portletRequestDispatcher.include(resourceRequest, resourceResponse);
330 }
331
332 protected void checkPermissions(PortletRequest portletRequest)
333 throws Exception {
334
335
337 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
338 WebKeys.THEME_DISPLAY);
339
340 PermissionChecker permissionChecker =
341 themeDisplay.getPermissionChecker();
342
343 long groupId = ParamUtil.getLong(portletRequest, "groupId");
344
345 Group group = GroupLocalServiceUtil.getGroup(groupId);
346
347 Layout layout = themeDisplay.getLayout();
348
349 boolean hasUpdateLayoutPermission = false;
350
351 if (layout != null) {
352 hasUpdateLayoutPermission = LayoutPermissionUtil.contains(
353 permissionChecker, layout.getGroupId(),
354 layout.isPrivateLayout(), layout.getLayoutId(),
355 ActionKeys.UPDATE);
356 }
357
358 if (group.isCommunity()) {
359 String cmd = ParamUtil.getString(portletRequest, Constants.CMD);
360
361 boolean publishToLive =
362 GroupPermissionUtil.contains(
363 permissionChecker, group.getGroupId(),
364 ActionKeys.PUBLISH_STAGING) &&
365 cmd.equals("publish_to_live");
366
367 if (!GroupPermissionUtil.contains(
368 permissionChecker, group.getGroupId(),
369 ActionKeys.APPROVE_PROPOSAL) &&
370 !GroupPermissionUtil.contains(
371 permissionChecker, group.getGroupId(),
372 ActionKeys.MANAGE_LAYOUTS) &&
373 !hasUpdateLayoutPermission && !publishToLive) {
374
375 throw new PrincipalException();
376 }
377 }
378 else if (group.isOrganization()) {
379 long organizationId = group.getClassPK();
380
381 String cmd = ParamUtil.getString(portletRequest, Constants.CMD);
382
383 boolean publishToLive =
384 OrganizationPermissionUtil.contains(
385 permissionChecker, organizationId,
386 ActionKeys.PUBLISH_STAGING) &&
387 cmd.equals("publish_to_live");
388
389 if (!OrganizationPermissionUtil.contains(
390 permissionChecker, organizationId,
391 ActionKeys.APPROVE_PROPOSAL) &&
392 !OrganizationPermissionUtil.contains(
393 permissionChecker, organizationId,
394 ActionKeys.MANAGE_LAYOUTS) &&
395 !hasUpdateLayoutPermission && !publishToLive) {
396
397 throw new PrincipalException();
398 }
399 }
400 else if (group.isUser()) {
401 long groupUserId = group.getClassPK();
402
403 User groupUser = UserLocalServiceUtil.getUserById(groupUserId);
404
405 long[] organizationIds = groupUser.getOrganizationIds();
406
407 UserPermissionUtil.check(
408 permissionChecker, groupUserId, organizationIds,
409 ActionKeys.UPDATE);
410
411 if (!PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_MODIFIABLE &&
412 !PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_MODIFIABLE) {
413
414 throw new PrincipalException();
415 }
416 }
417 }
418
419 protected UnicodeProperties getTypeSettingsProperties(
420 ActionRequest actionRequest) {
421
422 UnicodeProperties typeSettingsProperties = new UnicodeProperties(true);
423
424 String prefix = "TypeSettingsProperties(";
425
426 for (String paramName: actionRequest.getParameterMap().keySet()) {
427 if (paramName.startsWith(prefix)) {
428 String key = paramName.substring(
429 prefix.length(), paramName.length() - 1);
430
431 typeSettingsProperties.setProperty(
432 key, actionRequest.getParameter(paramName));
433 }
434 }
435
436 return typeSettingsProperties;
437 }
438
439 protected void updateDisplayOrder(ActionRequest actionRequest)
440 throws Exception {
441
442 long groupId = ParamUtil.getLong(actionRequest, "groupId");
443 boolean privateLayout = ParamUtil.getBoolean(
444 actionRequest, "privateLayout");
445 long parentLayoutId = ParamUtil.getLong(
446 actionRequest, "parentLayoutId");
447 long[] layoutIds = StringUtil.split(
448 ParamUtil.getString(actionRequest, "layoutIds"), 0L);
449
450 LayoutServiceUtil.setLayouts(
451 groupId, privateLayout, parentLayoutId, layoutIds);
452 }
453
454 protected Object[] updateLayout(
455 ActionRequest actionRequest, ActionResponse actionResponse)
456 throws Exception {
457
458 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
459 actionRequest);
460
461 String cmd = ParamUtil.getString(uploadRequest, Constants.CMD);
462
463 long groupId = ParamUtil.getLong(actionRequest, "groupId");
464 boolean privateLayout = ParamUtil.getBoolean(
465 actionRequest, "privateLayout");
466 long layoutId = ParamUtil.getLong(actionRequest, "layoutId");
467 long parentLayoutId = ParamUtil.getLong(
468 uploadRequest, "parentLayoutId");
469 String description = ParamUtil.getString(uploadRequest, "description");
470 String type = ParamUtil.getString(uploadRequest, "type");
471 boolean hidden = ParamUtil.getBoolean(uploadRequest, "hidden");
472 String friendlyURL = ParamUtil.getString(uploadRequest, "friendlyURL");
473 boolean iconImage = ParamUtil.getBoolean(uploadRequest, "iconImage");
474 byte[] iconBytes = FileUtil.getBytes(
475 uploadRequest.getFile("iconFileName"));
476
477 boolean inheritFromParentLayoutId = ParamUtil.getBoolean(
478 uploadRequest, "inheritFromParentLayoutId");
479
480 long copyLayoutId = ParamUtil.getLong(uploadRequest, "copyLayoutId");
481
482 Map<Locale, String> localeNamesMap =
483 LocalizationUtil.getLocalizationMap(actionRequest, "name");
484 Map<Locale, String> localeTitlesMap =
485 LocalizationUtil.getLocalizationMap(actionRequest, "title");
486
487 Layout layout = null;
488 String oldFriendlyURL = StringPool.BLANK;
489
490 if (cmd.equals(Constants.ADD)) {
491
492
494 if (inheritFromParentLayoutId && (parentLayoutId > 0)) {
495 Layout parentLayout = LayoutLocalServiceUtil.getLayout(
496 groupId, privateLayout, parentLayoutId);
497
498 layout = LayoutServiceUtil.addLayout(
499 groupId, privateLayout, parentLayoutId, localeNamesMap,
500 localeTitlesMap, description, parentLayout.getType(),
501 parentLayout.isHidden(), friendlyURL);
502
503 LayoutServiceUtil.updateLayout(
504 layout.getGroupId(), layout.isPrivateLayout(),
505 layout.getLayoutId(), parentLayout.getTypeSettings());
506
507 if (parentLayout.getType().equals(
508 LayoutConstants.TYPE_PORTLET)) {
509
510 ActionUtil.copyPreferences(
511 actionRequest, layout, parentLayout);
512 }
513 }
514 else {
515 LayoutServiceUtil.addLayout(
516 groupId, privateLayout, parentLayoutId, localeNamesMap,
517 localeTitlesMap, description, type, hidden, friendlyURL);
518 }
519 }
520 else {
521
522
524 layout = LayoutLocalServiceUtil.getLayout(
525 groupId, privateLayout, layoutId);
526
527 oldFriendlyURL = layout.getFriendlyURL();
528
529 layout = LayoutServiceUtil.updateLayout(
530 groupId, privateLayout, layoutId, layout.getParentLayoutId(),
531 localeNamesMap, localeTitlesMap, description, type, hidden,
532 friendlyURL, Boolean.valueOf(iconImage), iconBytes);
533
534 if (oldFriendlyURL.equals(layout.getFriendlyURL())) {
535 oldFriendlyURL = StringPool.BLANK;
536 }
537
538 UnicodeProperties formTypeSettingsProperties =
539 getTypeSettingsProperties(actionRequest);
540
541 if (type.equals(LayoutConstants.TYPE_PORTLET)) {
542 if ((copyLayoutId > 0) &&
543 (copyLayoutId != layout.getLayoutId())) {
544
545 try {
546 Layout copyLayout = LayoutLocalServiceUtil.getLayout(
547 groupId, privateLayout, copyLayoutId);
548
549 if (copyLayout.getType().equals(
550 LayoutConstants.TYPE_PORTLET)) {
551
552 LayoutServiceUtil.updateLayout(
553 groupId, privateLayout, layoutId,
554 copyLayout.getTypeSettings());
555
556 ActionUtil.copyPreferences(
557 actionRequest, layout, copyLayout);
558 }
559 }
560 catch (NoSuchLayoutException nsle) {
561 }
562 }
563 else {
564 UnicodeProperties layoutTypeSettingsProperties =
565 layout.getTypeSettingsProperties();
566
567 for (String property: formTypeSettingsProperties.keySet()) {
568 layoutTypeSettingsProperties.setProperty(
569 property,
570 formTypeSettingsProperties.getProperty(property));
571 }
572
573 LayoutServiceUtil.updateLayout(
574 groupId, privateLayout, layoutId,
575 layout.getTypeSettings());
576 }
577 }
578 else {
579 layout.setTypeSettingsProperties(formTypeSettingsProperties);
580
581 LayoutServiceUtil.updateLayout(
582 groupId, privateLayout, layoutId, layout.getTypeSettings());
583 }
584
585 HttpServletResponse response = PortalUtil.getHttpServletResponse(
586 actionResponse);
587
588 String[] eventClasses = StringUtil.split(
589 PropsUtil.get(
590 PropsKeys.LAYOUT_CONFIGURATION_ACTION_UPDATE,
591 new Filter(type)));
592
593 EventsProcessorUtil.process(
594 PropsKeys.LAYOUT_CONFIGURATION_ACTION_UPDATE, eventClasses,
595 uploadRequest, response);
596 }
597
598 return new Object[] {layout, oldFriendlyURL};
599 }
600
601 protected void updateLogo(ActionRequest actionRequest) throws Exception {
602 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
603 actionRequest);
604
605 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
606 long stagingGroupId = ParamUtil.getLong(
607 actionRequest, "stagingGroupId");
608
609 boolean privateLayout = ParamUtil.getBoolean(
610 actionRequest, "privateLayout");
611 boolean logo = ParamUtil.getBoolean(actionRequest, "logo");
612
613 File file = uploadRequest.getFile("logoFileName");
614 byte[] bytes = FileUtil.getBytes(file);
615
616 if (logo && ((bytes == null) || (bytes.length == 0))) {
617 throw new UploadException();
618 }
619
620 LayoutSetServiceUtil.updateLogo(liveGroupId, privateLayout, logo, file);
621
622 if (stagingGroupId > 0) {
623 LayoutSetServiceUtil.updateLogo(
624 stagingGroupId, privateLayout, logo, file);
625 }
626 }
627
628 protected void updateLookAndFeel(ActionRequest actionRequest)
629 throws Exception {
630
631 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
632 WebKeys.THEME_DISPLAY);
633
634 long companyId = themeDisplay.getCompanyId();
635
636 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
637 long stagingGroupId = ParamUtil.getLong(
638 actionRequest, "stagingGroupId");
639
640 boolean privateLayout = ParamUtil.getBoolean(
641 actionRequest, "privateLayout");
642 long layoutId = ParamUtil.getLong(actionRequest, "layoutId");
643 String themeId = ParamUtil.getString(actionRequest, "themeId");
644 String colorSchemeId = ParamUtil.getString(
645 actionRequest, "colorSchemeId");
646 String css = ParamUtil.getString(actionRequest, "css");
647 boolean wapTheme = ParamUtil.getBoolean(actionRequest, "wapTheme");
648
649 if (stagingGroupId > 0) {
650 updateLookAndFeel(
651 companyId, stagingGroupId, privateLayout, layoutId, themeId,
652 colorSchemeId, css, wapTheme);
653 }
654 else {
655 updateLookAndFeel(
656 companyId, liveGroupId, privateLayout, layoutId, themeId,
657 colorSchemeId, css, wapTheme);
658 }
659 }
660
661 protected void updateLookAndFeel(
662 long companyId, long groupId, boolean privateLayout, long layoutId,
663 String themeId, String colorSchemeId, String css, boolean wapTheme)
664 throws Exception {
665
666 if (Validator.isNotNull(themeId) && Validator.isNull(colorSchemeId)) {
667 ColorScheme colorScheme = ThemeLocalServiceUtil.getColorScheme(
668 companyId, themeId, colorSchemeId, wapTheme);
669
670 colorSchemeId = colorScheme.getColorSchemeId();
671 }
672
673 if (layoutId <= 0) {
674 LayoutSetServiceUtil.updateLookAndFeel(
675 groupId, privateLayout, themeId, colorSchemeId, css, wapTheme);
676 }
677 else {
678 LayoutServiceUtil.updateLookAndFeel(
679 groupId, privateLayout, layoutId, themeId, colorSchemeId, css,
680 wapTheme);
681 }
682 }
683
684 protected void updateMergePages(ActionRequest actionRequest)
685 throws Exception {
686
687 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
688
689 boolean mergeGuestPublicPages = ParamUtil.getBoolean(
690 actionRequest, "mergeGuestPublicPages");
691
692 Group liveGroup = GroupLocalServiceUtil.getGroup(liveGroupId);
693
694 UnicodeProperties props = liveGroup.getTypeSettingsProperties();
695
696 props.setProperty(
697 "mergeGuestPublicPages", String.valueOf(mergeGuestPublicPages));
698
699 GroupServiceUtil.updateGroup(liveGroupId, liveGroup.getTypeSettings());
700 }
701
702 protected void updateMonitoring(ActionRequest actionRequest)
703 throws Exception {
704
705 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
706
707 String googleAnalyticsId = ParamUtil.getString(
708 actionRequest, "googleAnalyticsId");
709
710 Group liveGroup = GroupLocalServiceUtil.getGroup(liveGroupId);
711
712 UnicodeProperties props = liveGroup.getTypeSettingsProperties();
713
714 props.setProperty("googleAnalyticsId", googleAnalyticsId);
715
716 GroupServiceUtil.updateGroup(liveGroupId, liveGroup.getTypeSettings());
717 }
718
719 protected void updateVirtualHost(ActionRequest actionRequest)
720 throws Exception {
721
722 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
723
724 String publicVirtualHost = ParamUtil.getString(
725 actionRequest, "publicVirtualHost");
726 String privateVirtualHost = ParamUtil.getString(
727 actionRequest, "privateVirtualHost");
728 String friendlyURL = ParamUtil.getString(actionRequest, "friendlyURL");
729
730 LayoutSetServiceUtil.updateVirtualHost(
731 liveGroupId, false, publicVirtualHost);
732
733 LayoutSetServiceUtil.updateVirtualHost(
734 liveGroupId, true, privateVirtualHost);
735
736 GroupServiceUtil.updateFriendlyURL(liveGroupId, friendlyURL);
737 }
738
739 protected void updateWorkflow(ActionRequest actionRequest)
740 throws Exception {
741
742 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
743
744 boolean workflowEnabled = ParamUtil.getBoolean(
745 actionRequest, "workflowEnabled");
746 int workflowStages = ParamUtil.getInteger(
747 actionRequest, "workflowStages");
748
749 String workflowRoleNames;
750
751 if (workflowStages == 0) {
752 workflowRoleNames = StringPool.BLANK;
753 }
754 else {
755 StringBundler sb = new StringBundler(workflowStages * 2 - 1);
756
757 for (int i = 1; i <= workflowStages; i++) {
758 String workflowRoleName = ParamUtil.getString(
759 actionRequest, "workflowRoleName_" + i);
760
761 sb.append(workflowRoleName);
762
763 if ((i + 1) <= workflowStages) {
764 sb.append(",");
765 }
766 }
767
768 workflowRoleNames = sb.toString();
769 }
770
771 GroupServiceUtil.updateWorkflow(
772 liveGroupId, workflowEnabled, workflowStages, workflowRoleNames);
773 }
774
775 }