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