001
014
015 package com.liferay.portlet.communities.action;
016
017 import com.liferay.portal.ImageTypeException;
018 import com.liferay.portal.LayoutFriendlyURLException;
019 import com.liferay.portal.LayoutHiddenException;
020 import com.liferay.portal.LayoutNameException;
021 import com.liferay.portal.LayoutParentLayoutIdException;
022 import com.liferay.portal.LayoutSetVirtualHostException;
023 import com.liferay.portal.LayoutTypeException;
024 import com.liferay.portal.NoSuchGroupException;
025 import com.liferay.portal.NoSuchLayoutException;
026 import com.liferay.portal.RemoteExportException;
027 import com.liferay.portal.RemoteOptionsException;
028 import com.liferay.portal.RequiredLayoutException;
029 import com.liferay.portal.events.EventsProcessorUtil;
030 import com.liferay.portal.kernel.exception.SystemException;
031 import com.liferay.portal.kernel.servlet.SessionErrors;
032 import com.liferay.portal.kernel.staging.StagingUtil;
033 import com.liferay.portal.kernel.upload.UploadPortletRequest;
034 import com.liferay.portal.kernel.util.Constants;
035 import com.liferay.portal.kernel.util.FileUtil;
036 import com.liferay.portal.kernel.util.HttpUtil;
037 import com.liferay.portal.kernel.util.LocalizationUtil;
038 import com.liferay.portal.kernel.util.ParamUtil;
039 import com.liferay.portal.kernel.util.PropertiesParamUtil;
040 import com.liferay.portal.kernel.util.PropsKeys;
041 import com.liferay.portal.kernel.util.StringPool;
042 import com.liferay.portal.kernel.util.StringUtil;
043 import com.liferay.portal.kernel.util.UnicodeProperties;
044 import com.liferay.portal.kernel.util.Validator;
045 import com.liferay.portal.model.ColorScheme;
046 import com.liferay.portal.model.Group;
047 import com.liferay.portal.model.Layout;
048 import com.liferay.portal.model.LayoutConstants;
049 import com.liferay.portal.model.LayoutPrototype;
050 import com.liferay.portal.model.User;
051 import com.liferay.portal.security.auth.PrincipalException;
052 import com.liferay.portal.security.permission.ActionKeys;
053 import com.liferay.portal.security.permission.PermissionChecker;
054 import com.liferay.portal.service.GroupLocalServiceUtil;
055 import com.liferay.portal.service.GroupServiceUtil;
056 import com.liferay.portal.service.LayoutLocalServiceUtil;
057 import com.liferay.portal.service.LayoutPrototypeServiceUtil;
058 import com.liferay.portal.service.LayoutServiceUtil;
059 import com.liferay.portal.service.LayoutSetServiceUtil;
060 import com.liferay.portal.service.ServiceContext;
061 import com.liferay.portal.service.ServiceContextFactory;
062 import com.liferay.portal.service.ThemeLocalServiceUtil;
063 import com.liferay.portal.service.UserLocalServiceUtil;
064 import com.liferay.portal.service.permission.GroupPermissionUtil;
065 import com.liferay.portal.service.permission.LayoutPermissionUtil;
066 import com.liferay.portal.service.permission.LayoutPrototypePermissionUtil;
067 import com.liferay.portal.service.permission.LayoutSetPrototypePermissionUtil;
068 import com.liferay.portal.service.permission.OrganizationPermissionUtil;
069 import com.liferay.portal.service.permission.UserPermissionUtil;
070 import com.liferay.portal.struts.PortletAction;
071 import com.liferay.portal.theme.ThemeDisplay;
072 import com.liferay.portal.util.LayoutSettings;
073 import com.liferay.portal.util.PortalUtil;
074 import com.liferay.portal.util.PropsValues;
075 import com.liferay.portal.util.WebKeys;
076 import com.liferay.portlet.communities.util.CommunitiesUtil;
077 import com.liferay.portlet.tasks.NoSuchProposalException;
078 import com.liferay.util.servlet.UploadException;
079
080 import java.io.File;
081
082 import java.util.Locale;
083 import java.util.Map;
084
085 import javax.portlet.ActionRequest;
086 import javax.portlet.ActionResponse;
087 import javax.portlet.PortletConfig;
088 import javax.portlet.PortletRequest;
089 import javax.portlet.PortletRequestDispatcher;
090 import javax.portlet.RenderRequest;
091 import javax.portlet.RenderResponse;
092 import javax.portlet.ResourceRequest;
093 import javax.portlet.ResourceResponse;
094
095 import javax.servlet.http.HttpServletResponse;
096
097 import org.apache.struts.action.ActionForm;
098 import org.apache.struts.action.ActionForward;
099 import org.apache.struts.action.ActionMapping;
100
101
104 public class EditPagesAction extends PortletAction {
105
106 public void processAction(
107 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
108 ActionRequest actionRequest, ActionResponse actionResponse)
109 throws Exception {
110
111 try {
112 checkPermissions(actionRequest);
113 }
114 catch (PrincipalException pe) {
115 return;
116 }
117
118 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
119
120 try {
121 Layout layout = null;
122 String oldFriendlyURL = StringPool.BLANK;
123
124 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
125 Object[] returnValue = updateLayout(
126 actionRequest, actionResponse);
127
128 layout = (Layout)returnValue[0];
129 oldFriendlyURL = (String)returnValue[1];
130 }
131 else if (cmd.equals(Constants.DELETE)) {
132 CommunitiesUtil.deleteLayout(actionRequest, actionResponse);
133 }
134 else if (cmd.equals("copy_from_live")) {
135 StagingUtil.copyFromLive(actionRequest);
136 }
137 else if (cmd.equals("display_order")) {
138 updateDisplayOrder(actionRequest);
139 }
140 else if (cmd.equals("logo")) {
141 updateLogo(actionRequest);
142 }
143 else if (cmd.equals("look_and_feel")) {
144 updateLookAndFeel(actionRequest);
145 }
146 else if (cmd.equals("merge_pages")) {
147 updateMergePages(actionRequest);
148 }
149 else if (cmd.equals("monitoring")) {
150 updateMonitoring(actionRequest);
151 }
152 else if (cmd.equals("publish_to_live")) {
153 StagingUtil.publishToLive(actionRequest);
154 }
155 else if (cmd.equals("publish_to_remote")) {
156 StagingUtil.publishToRemote(actionRequest);
157 }
158 else if (cmd.equals("schedule_copy_from_live")) {
159 StagingUtil.scheduleCopyFromLive(actionRequest);
160 }
161 else if (cmd.equals("schedule_publish_to_live")) {
162 StagingUtil.schedulePublishToLive(actionRequest);
163 }
164 else if (cmd.equals("schedule_publish_to_remote")) {
165 StagingUtil.schedulePublishToRemote(actionRequest);
166 }
167 else if (cmd.equals("staging")) {
168 StagingUtil.updateStaging(actionRequest);
169 }
170 else if (cmd.equals("unschedule_copy_from_live")) {
171 StagingUtil.unscheduleCopyFromLive(actionRequest);
172 }
173 else if (cmd.equals("unschedule_publish_to_live")) {
174 StagingUtil.unschedulePublishToLive(actionRequest);
175 }
176 else if (cmd.equals("unschedule_publish_to_remote")) {
177 StagingUtil.unschedulePublishToRemote(actionRequest);
178 }
179 else if (cmd.equals("virtual_host")) {
180 updateVirtualHost(actionRequest);
181 }
182
183 String redirect = ParamUtil.getString(
184 actionRequest, "pagesRedirect");
185
186 if ((layout != null) && Validator.isNotNull(oldFriendlyURL)) {
187 ThemeDisplay themeDisplay =
188 (ThemeDisplay)actionRequest.getAttribute(
189 WebKeys.THEME_DISPLAY);
190
191 if (layout.getPlid() == themeDisplay.getPlid()) {
192 Group group = layout.getGroup();
193
194 String oldPath = group.getFriendlyURL() + oldFriendlyURL;
195 String newPath =
196 group.getFriendlyURL() + layout.getFriendlyURL();
197
198 redirect = StringUtil.replace(redirect, oldPath, newPath);
199
200 redirect = StringUtil.replace(
201 redirect, HttpUtil.encodeURL(oldPath),
202 HttpUtil.encodeURL(newPath));
203 }
204 }
205
206 sendRedirect(actionRequest, actionResponse, redirect);
207 }
208 catch (Exception e) {
209 if (e instanceof NoSuchLayoutException ||
210 e instanceof NoSuchProposalException ||
211 e instanceof PrincipalException) {
212
213 SessionErrors.add(actionRequest, e.getClass().getName());
214
215 setForward(actionRequest, "portlet.communities.error");
216 }
217 else if (e instanceof ImageTypeException ||
218 e instanceof LayoutFriendlyURLException ||
219 e instanceof LayoutHiddenException ||
220 e instanceof LayoutNameException ||
221 e instanceof LayoutParentLayoutIdException ||
222 e instanceof LayoutSetVirtualHostException ||
223 e instanceof LayoutTypeException ||
224 e instanceof RequiredLayoutException ||
225 e instanceof UploadException) {
226
227 if (e instanceof LayoutFriendlyURLException) {
228 SessionErrors.add(
229 actionRequest,
230 LayoutFriendlyURLException.class.getName(), e);
231 }
232 else {
233 SessionErrors.add(actionRequest, e.getClass().getName(), e);
234 }
235 }
236 else if (e instanceof RemoteExportException ||
237 e instanceof RemoteOptionsException ||
238 e instanceof SystemException) {
239
240 SessionErrors.add(actionRequest, e.getClass().getName(), e);
241
242 String redirect = ParamUtil.getString(
243 actionRequest, "pagesRedirect");
244
245 sendRedirect(actionRequest, actionResponse, redirect);
246 }
247 else {
248 throw e;
249 }
250 }
251 }
252
253 public ActionForward render(
254 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
255 RenderRequest renderRequest, RenderResponse renderResponse)
256 throws Exception {
257
258 try {
259 checkPermissions(renderRequest);
260 }
261 catch (PrincipalException pe) {
262 SessionErrors.add(
263 renderRequest, PrincipalException.class.getName());
264
265 return mapping.findForward("portlet.communities.error");
266 }
267
268 try {
269 getGroup(renderRequest);
270 }
271 catch (Exception e) {
272 if (e instanceof NoSuchGroupException ||
273 e instanceof PrincipalException) {
274
275 SessionErrors.add(renderRequest, e.getClass().getName());
276
277 return mapping.findForward("portlet.communities.error");
278 }
279 else {
280 throw e;
281 }
282 }
283
284 return mapping.findForward(
285 getForward(renderRequest, "portlet.communities.edit_pages"));
286 }
287
288 public void serveResource(
289 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
290 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
291 throws Exception {
292
293 PortletRequestDispatcher portletRequestDispatcher =
294 portletConfig.getPortletContext().getRequestDispatcher(
295 "/html/portlet/communities/scheduled_publishing_events.jsp");
296
297 portletRequestDispatcher.include(resourceRequest, resourceResponse);
298 }
299
300 protected void checkPermissions(PortletRequest portletRequest)
301 throws Exception {
302
303
304
305 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
306 WebKeys.THEME_DISPLAY);
307
308 PermissionChecker permissionChecker =
309 themeDisplay.getPermissionChecker();
310
311 Group group = getGroup(portletRequest);
312
313 if (group == null) {
314 throw new PrincipalException();
315 }
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 Group getGroup(PortletRequest portletRequest) throws Exception {
403 return ActionUtil.getGroup(portletRequest);
404 }
405
406 protected UnicodeProperties getTypeSettingsProperties(
407 ActionRequest actionRequest) {
408
409 return PropertiesParamUtil.getProperties(
410 actionRequest, "TypeSettingsProperties--");
411 }
412
413 protected void updateDisplayOrder(ActionRequest actionRequest)
414 throws Exception {
415
416 long groupId = ParamUtil.getLong(actionRequest, "groupId");
417 boolean privateLayout = ParamUtil.getBoolean(
418 actionRequest, "privateLayout");
419 long parentLayoutId = ParamUtil.getLong(
420 actionRequest, "parentLayoutId");
421 long[] layoutIds = StringUtil.split(
422 ParamUtil.getString(actionRequest, "layoutIds"), 0L);
423
424 LayoutServiceUtil.setLayouts(
425 groupId, privateLayout, parentLayoutId, layoutIds);
426 }
427
428 protected Object[] updateLayout(
429 ActionRequest actionRequest, ActionResponse actionResponse)
430 throws Exception {
431
432 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
433 actionRequest);
434
435 String cmd = ParamUtil.getString(uploadRequest, Constants.CMD);
436
437 long groupId = ParamUtil.getLong(actionRequest, "groupId");
438 boolean privateLayout = ParamUtil.getBoolean(
439 actionRequest, "privateLayout");
440 long layoutId = ParamUtil.getLong(actionRequest, "layoutId");
441 long parentLayoutId = ParamUtil.getLong(
442 uploadRequest, "parentLayoutId");
443 String description = ParamUtil.getString(uploadRequest, "description");
444 String type = ParamUtil.getString(uploadRequest, "type");
445 boolean hidden = ParamUtil.getBoolean(uploadRequest, "hidden");
446 String friendlyURL = ParamUtil.getString(uploadRequest, "friendlyURL");
447 boolean iconImage = ParamUtil.getBoolean(uploadRequest, "iconImage");
448 byte[] iconBytes = FileUtil.getBytes(
449 uploadRequest.getFile("iconFileName"));
450 long layoutPrototypeId = ParamUtil.getLong(
451 uploadRequest, "layoutPrototypeId");
452
453 boolean inheritFromParentLayoutId = ParamUtil.getBoolean(
454 uploadRequest, "inheritFromParentLayoutId");
455
456 long copyLayoutId = ParamUtil.getLong(uploadRequest, "copyLayoutId");
457
458 Map<Locale, String> localeNamesMap =
459 LocalizationUtil.getLocalizationMap(actionRequest, "name");
460 Map<Locale, String> localeTitlesMap =
461 LocalizationUtil.getLocalizationMap(actionRequest, "title");
462
463 ServiceContext serviceContext = ServiceContextFactory.getInstance(
464 Layout.class.getName(), actionRequest);
465
466 Layout layout = null;
467 String oldFriendlyURL = StringPool.BLANK;
468
469 if (cmd.equals(Constants.ADD)) {
470
471
472
473 if (inheritFromParentLayoutId && (parentLayoutId > 0)) {
474 Layout parentLayout = LayoutLocalServiceUtil.getLayout(
475 groupId, privateLayout, parentLayoutId);
476
477 layout = LayoutServiceUtil.addLayout(
478 groupId, privateLayout, parentLayoutId, localeNamesMap,
479 localeTitlesMap, description, parentLayout.getType(),
480 parentLayout.isHidden(), friendlyURL,
481 serviceContext);
482
483 LayoutServiceUtil.updateLayout(
484 layout.getGroupId(), layout.isPrivateLayout(),
485 layout.getLayoutId(), parentLayout.getTypeSettings());
486
487 if (parentLayout.isTypePortlet()) {
488 ActionUtil.copyPreferences(
489 actionRequest, layout, parentLayout);
490 }
491 }
492 else if (layoutPrototypeId > 0) {
493 LayoutPrototype layoutPrototype =
494 LayoutPrototypeServiceUtil.getLayoutPrototype(
495 layoutPrototypeId);
496
497 Layout layoutPrototypeLayout = layoutPrototype.getLayout();
498
499 layout = LayoutServiceUtil.addLayout(
500 groupId, privateLayout, parentLayoutId, localeNamesMap,
501 localeTitlesMap, description, LayoutConstants.TYPE_PORTLET,
502 false, friendlyURL, serviceContext);
503
504 LayoutServiceUtil.updateLayout(
505 layout.getGroupId(), layout.isPrivateLayout(),
506 layout.getLayoutId(),
507 layoutPrototypeLayout.getTypeSettings());
508
509 ActionUtil.copyPreferences(
510 actionRequest, layout, layoutPrototypeLayout);
511
512 if (Validator.isNotNull(layoutPrototypeLayout.getThemeId())) {
513 LayoutServiceUtil.updateLookAndFeel(
514 layout.getGroupId(), layout.isPrivateLayout(),
515 layout.getLayoutId(),
516 layoutPrototypeLayout.getThemeId(),
517 layoutPrototypeLayout.getColorSchemeId(),
518 layoutPrototypeLayout.getCss(), false);
519 }
520
521 if (Validator.isNotNull(
522 layoutPrototypeLayout.getWapThemeId())) {
523
524 LayoutServiceUtil.updateLookAndFeel(
525 layout.getGroupId(), layout.isPrivateLayout(),
526 layout.getLayoutId(),
527 layoutPrototypeLayout.getWapThemeId(),
528 layoutPrototypeLayout.getWapColorSchemeId(),
529 layoutPrototypeLayout.getCss(), true);
530 }
531 }
532 else {
533 LayoutServiceUtil.addLayout(
534 groupId, privateLayout, parentLayoutId, localeNamesMap,
535 localeTitlesMap, description, type, hidden, friendlyURL,
536 serviceContext);
537 }
538 }
539 else {
540
541
542
543 layout = LayoutLocalServiceUtil.getLayout(
544 groupId, privateLayout, layoutId);
545
546 oldFriendlyURL = layout.getFriendlyURL();
547
548 layout = LayoutServiceUtil.updateLayout(
549 groupId, privateLayout, layoutId, layout.getParentLayoutId(),
550 localeNamesMap, localeTitlesMap, description, type, hidden,
551 friendlyURL, Boolean.valueOf(iconImage), iconBytes,
552 serviceContext);
553
554 if (oldFriendlyURL.equals(layout.getFriendlyURL())) {
555 oldFriendlyURL = StringPool.BLANK;
556 }
557
558 UnicodeProperties formTypeSettingsProperties =
559 getTypeSettingsProperties(actionRequest);
560
561 if (type.equals(LayoutConstants.TYPE_PORTLET)) {
562 if ((copyLayoutId > 0) &&
563 (copyLayoutId != layout.getLayoutId())) {
564
565 try {
566 Layout copyLayout = LayoutLocalServiceUtil.getLayout(
567 groupId, privateLayout, copyLayoutId);
568
569 if (copyLayout.isTypePortlet()) {
570 LayoutServiceUtil.updateLayout(
571 groupId, privateLayout, layoutId,
572 copyLayout.getTypeSettings());
573
574 ActionUtil.copyPreferences(
575 actionRequest, layout, copyLayout);
576 }
577 }
578 catch (NoSuchLayoutException nsle) {
579 }
580 }
581 else {
582 UnicodeProperties layoutTypeSettingsProperties =
583 layout.getTypeSettingsProperties();
584
585 for (String property: formTypeSettingsProperties.keySet()) {
586 layoutTypeSettingsProperties.setProperty(
587 property,
588 formTypeSettingsProperties.getProperty(property));
589 }
590
591 LayoutServiceUtil.updateLayout(
592 groupId, privateLayout, layoutId,
593 layout.getTypeSettings());
594 }
595 }
596 else {
597 layout.setTypeSettingsProperties(formTypeSettingsProperties);
598
599 LayoutServiceUtil.updateLayout(
600 groupId, privateLayout, layoutId, layout.getTypeSettings());
601 }
602
603 HttpServletResponse response = PortalUtil.getHttpServletResponse(
604 actionResponse);
605
606 LayoutSettings layoutSettings = LayoutSettings.getInstance(layout);
607
608 EventsProcessorUtil.process(
609 PropsKeys.LAYOUT_CONFIGURATION_ACTION_UPDATE,
610 layoutSettings.getConfigurationActionUpdate(), uploadRequest,
611 response);
612 }
613
614 return new Object[] {layout, oldFriendlyURL};
615 }
616
617 protected void updateLogo(ActionRequest actionRequest) throws Exception {
618 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
619 actionRequest);
620
621 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
622 long stagingGroupId = ParamUtil.getLong(
623 actionRequest, "stagingGroupId");
624
625 boolean privateLayout = ParamUtil.getBoolean(
626 actionRequest, "privateLayout");
627 boolean logo = ParamUtil.getBoolean(actionRequest, "logo");
628
629 File file = uploadRequest.getFile("logoFileName");
630 byte[] bytes = FileUtil.getBytes(file);
631
632 if (logo && ((bytes == null) || (bytes.length == 0))) {
633 throw new UploadException();
634 }
635
636 LayoutSetServiceUtil.updateLogo(liveGroupId, privateLayout, logo, file);
637
638 if (stagingGroupId > 0) {
639 LayoutSetServiceUtil.updateLogo(
640 stagingGroupId, privateLayout, logo, file);
641 }
642 }
643
644 protected void updateLookAndFeel(ActionRequest actionRequest)
645 throws Exception {
646
647 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
648 WebKeys.THEME_DISPLAY);
649
650 long companyId = themeDisplay.getCompanyId();
651
652 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
653 long stagingGroupId = ParamUtil.getLong(
654 actionRequest, "stagingGroupId");
655
656 boolean privateLayout = ParamUtil.getBoolean(
657 actionRequest, "privateLayout");
658 long layoutId = ParamUtil.getLong(actionRequest, "layoutId");
659 String themeId = ParamUtil.getString(actionRequest, "themeId");
660 String colorSchemeId = ParamUtil.getString(
661 actionRequest, "colorSchemeId");
662 String css = ParamUtil.getString(actionRequest, "css");
663 boolean wapTheme = ParamUtil.getBoolean(actionRequest, "wapTheme");
664
665 if (stagingGroupId > 0) {
666 updateLookAndFeel(
667 companyId, stagingGroupId, privateLayout, layoutId, themeId,
668 colorSchemeId, css, wapTheme);
669 }
670 else {
671 updateLookAndFeel(
672 companyId, liveGroupId, privateLayout, layoutId, themeId,
673 colorSchemeId, css, wapTheme);
674 }
675 }
676
677 protected void updateLookAndFeel(
678 long companyId, long groupId, boolean privateLayout, long layoutId,
679 String themeId, String colorSchemeId, String css, boolean wapTheme)
680 throws Exception {
681
682 if (Validator.isNotNull(themeId) && Validator.isNull(colorSchemeId)) {
683 ColorScheme colorScheme = ThemeLocalServiceUtil.getColorScheme(
684 companyId, themeId, colorSchemeId, wapTheme);
685
686 colorSchemeId = colorScheme.getColorSchemeId();
687 }
688
689 if (layoutId <= 0) {
690 LayoutSetServiceUtil.updateLookAndFeel(
691 groupId, privateLayout, themeId, colorSchemeId, css, wapTheme);
692 }
693 else {
694 LayoutServiceUtil.updateLookAndFeel(
695 groupId, privateLayout, layoutId, themeId, colorSchemeId, css,
696 wapTheme);
697 }
698 }
699
700 protected void updateMergePages(ActionRequest actionRequest)
701 throws Exception {
702
703 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
704
705 boolean mergeGuestPublicPages = ParamUtil.getBoolean(
706 actionRequest, "mergeGuestPublicPages");
707
708 Group liveGroup = GroupLocalServiceUtil.getGroup(liveGroupId);
709
710 UnicodeProperties props = liveGroup.getTypeSettingsProperties();
711
712 props.setProperty(
713 "mergeGuestPublicPages", String.valueOf(mergeGuestPublicPages));
714
715 GroupServiceUtil.updateGroup(liveGroupId, liveGroup.getTypeSettings());
716 }
717
718 protected void updateMonitoring(ActionRequest actionRequest)
719 throws Exception {
720
721 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
722
723 String googleAnalyticsId = ParamUtil.getString(
724 actionRequest, "googleAnalyticsId");
725
726 Group liveGroup = GroupLocalServiceUtil.getGroup(liveGroupId);
727
728 UnicodeProperties props = liveGroup.getTypeSettingsProperties();
729
730 props.setProperty("googleAnalyticsId", googleAnalyticsId);
731
732 GroupServiceUtil.updateGroup(liveGroupId, liveGroup.getTypeSettings());
733 }
734
735 protected void updateVirtualHost(ActionRequest actionRequest)
736 throws Exception {
737
738 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
739
740 String publicVirtualHost = ParamUtil.getString(
741 actionRequest, "publicVirtualHost");
742 String privateVirtualHost = ParamUtil.getString(
743 actionRequest, "privateVirtualHost");
744 String friendlyURL = ParamUtil.getString(actionRequest, "friendlyURL");
745
746 LayoutSetServiceUtil.updateVirtualHost(
747 liveGroupId, false, publicVirtualHost);
748
749 LayoutSetServiceUtil.updateVirtualHost(
750 liveGroupId, true, privateVirtualHost);
751
752 GroupServiceUtil.updateFriendlyURL(liveGroupId, friendlyURL);
753
754 Group liveGroup = GroupServiceUtil.getGroup(liveGroupId);
755
756 if (liveGroup.hasStagingGroup()) {
757 Group stagingGroup = liveGroup.getStagingGroup();
758
759 publicVirtualHost = ParamUtil.getString(
760 actionRequest, "stagingPublicVirtualHost");
761 privateVirtualHost = ParamUtil.getString(
762 actionRequest, "stagingPrivateVirtualHost");
763 friendlyURL = ParamUtil.getString(
764 actionRequest, "stagingFriendlyURL");
765
766 LayoutSetServiceUtil.updateVirtualHost(
767 stagingGroup.getGroupId(), false, publicVirtualHost);
768
769 LayoutSetServiceUtil.updateVirtualHost(
770 stagingGroup.getGroupId(), true, privateVirtualHost);
771
772 GroupServiceUtil.updateFriendlyURL(
773 stagingGroup.getGroupId(), friendlyURL);
774 }
775 }
776
777 }