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.servlet.SessionErrors;
29 import com.liferay.portal.kernel.upload.UploadPortletRequest;
30 import com.liferay.portal.kernel.util.Constants;
31 import com.liferay.portal.kernel.util.FileUtil;
32 import com.liferay.portal.kernel.util.GetterUtil;
33 import com.liferay.portal.kernel.util.HttpUtil;
34 import com.liferay.portal.kernel.util.LocalizationUtil;
35 import com.liferay.portal.kernel.util.ParamUtil;
36 import com.liferay.portal.kernel.util.PropertiesParamUtil;
37 import com.liferay.portal.kernel.util.PropsKeys;
38 import com.liferay.portal.kernel.util.StringBundler;
39 import com.liferay.portal.kernel.util.StringPool;
40 import com.liferay.portal.kernel.util.StringUtil;
41 import com.liferay.portal.kernel.util.UnicodeProperties;
42 import com.liferay.portal.kernel.util.Validator;
43 import com.liferay.portal.model.ColorScheme;
44 import com.liferay.portal.model.Group;
45 import com.liferay.portal.model.Layout;
46 import com.liferay.portal.model.LayoutConstants;
47 import com.liferay.portal.model.User;
48 import com.liferay.portal.security.auth.PrincipalException;
49 import com.liferay.portal.security.permission.ActionKeys;
50 import com.liferay.portal.security.permission.PermissionChecker;
51 import com.liferay.portal.service.GroupLocalServiceUtil;
52 import com.liferay.portal.service.GroupServiceUtil;
53 import com.liferay.portal.service.LayoutLocalServiceUtil;
54 import com.liferay.portal.service.LayoutServiceUtil;
55 import com.liferay.portal.service.LayoutSetServiceUtil;
56 import com.liferay.portal.service.ThemeLocalServiceUtil;
57 import com.liferay.portal.service.UserLocalServiceUtil;
58 import com.liferay.portal.service.permission.GroupPermissionUtil;
59 import com.liferay.portal.service.permission.LayoutPermissionUtil;
60 import com.liferay.portal.service.permission.OrganizationPermissionUtil;
61 import com.liferay.portal.service.permission.UserPermissionUtil;
62 import com.liferay.portal.struts.PortletAction;
63 import com.liferay.portal.theme.ThemeDisplay;
64 import com.liferay.portal.util.LayoutSettings;
65 import com.liferay.portal.util.PortalUtil;
66 import com.liferay.portal.util.PropsValues;
67 import com.liferay.portal.util.WebKeys;
68 import com.liferay.portlet.communities.util.CommunitiesUtil;
69 import com.liferay.portlet.communities.util.StagingUtil;
70 import com.liferay.portlet.tasks.NoSuchProposalException;
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 return PropertiesParamUtil.getProperties(
423 actionRequest, "TypeSettingsProperties(");
424 }
425
426 protected void updateDisplayOrder(ActionRequest actionRequest)
427 throws Exception {
428
429 long groupId = ParamUtil.getLong(actionRequest, "groupId");
430 boolean privateLayout = ParamUtil.getBoolean(
431 actionRequest, "privateLayout");
432 long parentLayoutId = ParamUtil.getLong(
433 actionRequest, "parentLayoutId");
434 long[] layoutIds = StringUtil.split(
435 ParamUtil.getString(actionRequest, "layoutIds"), 0L);
436
437 LayoutServiceUtil.setLayouts(
438 groupId, privateLayout, parentLayoutId, layoutIds);
439 }
440
441 protected Object[] updateLayout(
442 ActionRequest actionRequest, ActionResponse actionResponse)
443 throws Exception {
444
445 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
446 actionRequest);
447
448 String cmd = ParamUtil.getString(uploadRequest, Constants.CMD);
449
450 long groupId = ParamUtil.getLong(actionRequest, "groupId");
451 boolean privateLayout = ParamUtil.getBoolean(
452 actionRequest, "privateLayout");
453 long layoutId = ParamUtil.getLong(actionRequest, "layoutId");
454 long parentLayoutId = ParamUtil.getLong(
455 uploadRequest, "parentLayoutId");
456 String description = ParamUtil.getString(uploadRequest, "description");
457 String type = ParamUtil.getString(uploadRequest, "type");
458 boolean hidden = ParamUtil.getBoolean(uploadRequest, "hidden");
459 String friendlyURL = ParamUtil.getString(uploadRequest, "friendlyURL");
460 boolean iconImage = ParamUtil.getBoolean(uploadRequest, "iconImage");
461 byte[] iconBytes = FileUtil.getBytes(
462 uploadRequest.getFile("iconFileName"));
463
464 boolean inheritFromParentLayoutId = ParamUtil.getBoolean(
465 uploadRequest, "inheritFromParentLayoutId");
466
467 long copyLayoutId = ParamUtil.getLong(uploadRequest, "copyLayoutId");
468
469 Map<Locale, String> localeNamesMap =
470 LocalizationUtil.getLocalizationMap(actionRequest, "name");
471 Map<Locale, String> localeTitlesMap =
472 LocalizationUtil.getLocalizationMap(actionRequest, "title");
473
474 Layout layout = null;
475 String oldFriendlyURL = StringPool.BLANK;
476
477 if (cmd.equals(Constants.ADD)) {
478
479
481 if (inheritFromParentLayoutId && (parentLayoutId > 0)) {
482 Layout parentLayout = LayoutLocalServiceUtil.getLayout(
483 groupId, privateLayout, parentLayoutId);
484
485 layout = LayoutServiceUtil.addLayout(
486 groupId, privateLayout, parentLayoutId, localeNamesMap,
487 localeTitlesMap, description, parentLayout.getType(),
488 hidden, friendlyURL);
489
490 LayoutServiceUtil.updateLayout(
491 layout.getGroupId(), layout.isPrivateLayout(),
492 layout.getLayoutId(), parentLayout.getTypeSettings());
493
494 if (parentLayout.isTypePortlet()) {
495 ActionUtil.copyPreferences(
496 actionRequest, layout, parentLayout);
497 }
498 }
499 else {
500 LayoutServiceUtil.addLayout(
501 groupId, privateLayout, parentLayoutId, localeNamesMap,
502 localeTitlesMap, description, type, hidden, friendlyURL);
503 }
504 }
505 else {
506
507
509 layout = LayoutLocalServiceUtil.getLayout(
510 groupId, privateLayout, layoutId);
511
512 oldFriendlyURL = layout.getFriendlyURL();
513
514 layout = LayoutServiceUtil.updateLayout(
515 groupId, privateLayout, layoutId, layout.getParentLayoutId(),
516 localeNamesMap, localeTitlesMap, description, type, hidden,
517 friendlyURL, Boolean.valueOf(iconImage), iconBytes);
518
519 if (oldFriendlyURL.equals(layout.getFriendlyURL())) {
520 oldFriendlyURL = StringPool.BLANK;
521 }
522
523 UnicodeProperties formTypeSettingsProperties =
524 getTypeSettingsProperties(actionRequest);
525
526 if (type.equals(LayoutConstants.TYPE_PORTLET)) {
527 if ((copyLayoutId > 0) &&
528 (copyLayoutId != layout.getLayoutId())) {
529
530 try {
531 Layout copyLayout = LayoutLocalServiceUtil.getLayout(
532 groupId, privateLayout, copyLayoutId);
533
534 if (copyLayout.isTypePortlet()) {
535 LayoutServiceUtil.updateLayout(
536 groupId, privateLayout, layoutId,
537 copyLayout.getTypeSettings());
538
539 ActionUtil.copyPreferences(
540 actionRequest, layout, copyLayout);
541 }
542 }
543 catch (NoSuchLayoutException nsle) {
544 }
545 }
546 else {
547 UnicodeProperties layoutTypeSettingsProperties =
548 layout.getTypeSettingsProperties();
549
550 for (String property: formTypeSettingsProperties.keySet()) {
551 layoutTypeSettingsProperties.setProperty(
552 property,
553 formTypeSettingsProperties.getProperty(property));
554 }
555
556 LayoutServiceUtil.updateLayout(
557 groupId, privateLayout, layoutId,
558 layout.getTypeSettings());
559 }
560 }
561 else {
562 layout.setTypeSettingsProperties(formTypeSettingsProperties);
563
564 LayoutServiceUtil.updateLayout(
565 groupId, privateLayout, layoutId, layout.getTypeSettings());
566 }
567
568 HttpServletResponse response = PortalUtil.getHttpServletResponse(
569 actionResponse);
570
571 LayoutSettings layoutSettings = LayoutSettings.getInstance(layout);
572
573 EventsProcessorUtil.process(
574 PropsKeys.LAYOUT_CONFIGURATION_ACTION_UPDATE,
575 layoutSettings.getConfigurationActionUpdate(), uploadRequest,
576 response);
577 }
578
579 return new Object[] {layout, oldFriendlyURL};
580 }
581
582 protected void updateLogo(ActionRequest actionRequest) throws Exception {
583 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
584 actionRequest);
585
586 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
587 long stagingGroupId = ParamUtil.getLong(
588 actionRequest, "stagingGroupId");
589
590 boolean privateLayout = ParamUtil.getBoolean(
591 actionRequest, "privateLayout");
592 boolean logo = ParamUtil.getBoolean(actionRequest, "logo");
593
594 File file = uploadRequest.getFile("logoFileName");
595 byte[] bytes = FileUtil.getBytes(file);
596
597 if (logo && ((bytes == null) || (bytes.length == 0))) {
598 throw new UploadException();
599 }
600
601 LayoutSetServiceUtil.updateLogo(liveGroupId, privateLayout, logo, file);
602
603 if (stagingGroupId > 0) {
604 LayoutSetServiceUtil.updateLogo(
605 stagingGroupId, privateLayout, logo, file);
606 }
607 }
608
609 protected void updateLookAndFeel(ActionRequest actionRequest)
610 throws Exception {
611
612 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
613 WebKeys.THEME_DISPLAY);
614
615 long companyId = themeDisplay.getCompanyId();
616
617 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
618 long stagingGroupId = ParamUtil.getLong(
619 actionRequest, "stagingGroupId");
620
621 boolean privateLayout = ParamUtil.getBoolean(
622 actionRequest, "privateLayout");
623 long layoutId = ParamUtil.getLong(actionRequest, "layoutId");
624 String themeId = ParamUtil.getString(actionRequest, "themeId");
625 String colorSchemeId = ParamUtil.getString(
626 actionRequest, "colorSchemeId");
627 String css = ParamUtil.getString(actionRequest, "css");
628 boolean wapTheme = ParamUtil.getBoolean(actionRequest, "wapTheme");
629
630 if (stagingGroupId > 0) {
631 updateLookAndFeel(
632 companyId, stagingGroupId, privateLayout, layoutId, themeId,
633 colorSchemeId, css, wapTheme);
634 }
635 else {
636 updateLookAndFeel(
637 companyId, liveGroupId, privateLayout, layoutId, themeId,
638 colorSchemeId, css, wapTheme);
639 }
640 }
641
642 protected void updateLookAndFeel(
643 long companyId, long groupId, boolean privateLayout, long layoutId,
644 String themeId, String colorSchemeId, String css, boolean wapTheme)
645 throws Exception {
646
647 if (Validator.isNotNull(themeId) && Validator.isNull(colorSchemeId)) {
648 ColorScheme colorScheme = ThemeLocalServiceUtil.getColorScheme(
649 companyId, themeId, colorSchemeId, wapTheme);
650
651 colorSchemeId = colorScheme.getColorSchemeId();
652 }
653
654 if (layoutId <= 0) {
655 LayoutSetServiceUtil.updateLookAndFeel(
656 groupId, privateLayout, themeId, colorSchemeId, css, wapTheme);
657 }
658 else {
659 LayoutServiceUtil.updateLookAndFeel(
660 groupId, privateLayout, layoutId, themeId, colorSchemeId, css,
661 wapTheme);
662 }
663 }
664
665 protected void updateMergePages(ActionRequest actionRequest)
666 throws Exception {
667
668 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
669
670 boolean mergeGuestPublicPages = ParamUtil.getBoolean(
671 actionRequest, "mergeGuestPublicPages");
672
673 Group liveGroup = GroupLocalServiceUtil.getGroup(liveGroupId);
674
675 UnicodeProperties typeSettingsProperties =
676 liveGroup.getTypeSettingsProperties();
677
678 typeSettingsProperties.setProperty(
679 "mergeGuestPublicPages", String.valueOf(mergeGuestPublicPages));
680
681 GroupServiceUtil.updateGroup(liveGroupId, liveGroup.getTypeSettings());
682 }
683
684 protected void updateMonitoring(ActionRequest actionRequest)
685 throws Exception {
686
687 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
688
689 String googleAnalyticsId = ParamUtil.getString(
690 actionRequest, "googleAnalyticsId");
691
692 Group liveGroup = GroupLocalServiceUtil.getGroup(liveGroupId);
693
694 UnicodeProperties typeSettingsProperties =
695 liveGroup.getTypeSettingsProperties();
696
697 typeSettingsProperties.setProperty(
698 "googleAnalyticsId", googleAnalyticsId);
699
700 GroupServiceUtil.updateGroup(liveGroupId, liveGroup.getTypeSettings());
701 }
702
703 protected void updateVirtualHost(ActionRequest actionRequest)
704 throws Exception {
705
706 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
707
708 String publicVirtualHost = ParamUtil.getString(
709 actionRequest, "publicVirtualHost");
710 String privateVirtualHost = ParamUtil.getString(
711 actionRequest, "privateVirtualHost");
712 String friendlyURL = ParamUtil.getString(actionRequest, "friendlyURL");
713
714 LayoutSetServiceUtil.updateVirtualHost(
715 liveGroupId, false, publicVirtualHost);
716
717 LayoutSetServiceUtil.updateVirtualHost(
718 liveGroupId, true, privateVirtualHost);
719
720 GroupServiceUtil.updateFriendlyURL(liveGroupId, friendlyURL);
721
722 Group liveGroup = GroupServiceUtil.getGroup(liveGroupId);
723
724 if (liveGroup.hasStagingGroup()) {
725 Group stagingGroup = liveGroup.getStagingGroup();
726
727 publicVirtualHost = ParamUtil.getString(
728 actionRequest, "stagingPublicVirtualHost");
729 privateVirtualHost = ParamUtil.getString(
730 actionRequest, "stagingPrivateVirtualHost");
731 friendlyURL = ParamUtil.getString(
732 actionRequest, "stagingFriendlyURL");
733
734 LayoutSetServiceUtil.updateVirtualHost(
735 stagingGroup.getGroupId(), false, publicVirtualHost);
736
737 LayoutSetServiceUtil.updateVirtualHost(
738 stagingGroup.getGroupId(), true, privateVirtualHost);
739
740 GroupServiceUtil.updateFriendlyURL(
741 stagingGroup.getGroupId(), friendlyURL);
742 }
743 }
744
745 protected void updateWorkflow(ActionRequest actionRequest)
746 throws Exception {
747
748 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
749
750 boolean workflowEnabled = ParamUtil.getBoolean(
751 actionRequest, "workflowEnabled");
752 int workflowStages = ParamUtil.getInteger(
753 actionRequest, "workflowStages");
754
755 String workflowRoleNames;
756
757 if (workflowStages == 0) {
758 workflowRoleNames = StringPool.BLANK;
759 }
760 else {
761 StringBundler sb = new StringBundler(workflowStages * 2 - 1);
762
763 for (int i = 1; i <= workflowStages; i++) {
764 String workflowRoleName = ParamUtil.getString(
765 actionRequest, "workflowRoleName_" + i);
766
767 sb.append(workflowRoleName);
768
769 if ((i + 1) <= workflowStages) {
770 sb.append(",");
771 }
772 }
773
774 workflowRoleNames = sb.toString();
775 }
776
777 GroupServiceUtil.updateWorkflow(
778 liveGroupId, workflowEnabled, workflowStages, workflowRoleNames);
779 }
780
781 }