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 = (String)actionRequest.getAttribute(
184 WebKeys.REDIRECT);
185
186 if (Validator.isNull(redirect)) {
187 redirect = ParamUtil.getString(actionRequest, "pagesRedirect");
188 }
189
190 if ((layout != null) && Validator.isNotNull(oldFriendlyURL)) {
191 ThemeDisplay themeDisplay =
192 (ThemeDisplay)actionRequest.getAttribute(
193 WebKeys.THEME_DISPLAY);
194
195 if (layout.getPlid() == themeDisplay.getPlid()) {
196 Group group = layout.getGroup();
197
198 String oldPath = group.getFriendlyURL() + oldFriendlyURL;
199 String newPath =
200 group.getFriendlyURL() + layout.getFriendlyURL();
201
202 redirect = StringUtil.replace(redirect, oldPath, newPath);
203
204 redirect = StringUtil.replace(
205 redirect, HttpUtil.encodeURL(oldPath),
206 HttpUtil.encodeURL(newPath));
207 }
208 }
209
210 sendRedirect(actionRequest, actionResponse, redirect);
211 }
212 catch (Exception e) {
213 if (e instanceof NoSuchLayoutException ||
214 e instanceof NoSuchProposalException ||
215 e instanceof PrincipalException) {
216
217 SessionErrors.add(actionRequest, e.getClass().getName());
218
219 setForward(actionRequest, "portlet.communities.error");
220 }
221 else if (e instanceof ImageTypeException ||
222 e instanceof LayoutFriendlyURLException ||
223 e instanceof LayoutHiddenException ||
224 e instanceof LayoutNameException ||
225 e instanceof LayoutParentLayoutIdException ||
226 e instanceof LayoutSetVirtualHostException ||
227 e instanceof LayoutTypeException ||
228 e instanceof RequiredLayoutException ||
229 e instanceof UploadException) {
230
231 if (e instanceof LayoutFriendlyURLException) {
232 SessionErrors.add(
233 actionRequest,
234 LayoutFriendlyURLException.class.getName(), e);
235 }
236 else {
237 SessionErrors.add(actionRequest, e.getClass().getName(), e);
238 }
239 }
240 else if (e instanceof RemoteExportException ||
241 e instanceof RemoteOptionsException ||
242 e instanceof SystemException) {
243
244 SessionErrors.add(actionRequest, e.getClass().getName(), e);
245
246 String redirect = ParamUtil.getString(
247 actionRequest, "pagesRedirect");
248
249 sendRedirect(actionRequest, actionResponse, redirect);
250 }
251 else {
252 throw e;
253 }
254 }
255 }
256
257 public ActionForward render(
258 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
259 RenderRequest renderRequest, RenderResponse renderResponse)
260 throws Exception {
261
262 try {
263 checkPermissions(renderRequest);
264 }
265 catch (PrincipalException pe) {
266 SessionErrors.add(
267 renderRequest, PrincipalException.class.getName());
268
269 return mapping.findForward("portlet.communities.error");
270 }
271
272 try {
273 getGroup(renderRequest);
274 }
275 catch (Exception e) {
276 if (e instanceof NoSuchGroupException ||
277 e instanceof PrincipalException) {
278
279 SessionErrors.add(renderRequest, e.getClass().getName());
280
281 return mapping.findForward("portlet.communities.error");
282 }
283 else {
284 throw e;
285 }
286 }
287
288 return mapping.findForward(
289 getForward(renderRequest, "portlet.communities.edit_pages"));
290 }
291
292 public void serveResource(
293 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
294 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
295 throws Exception {
296
297 PortletRequestDispatcher portletRequestDispatcher =
298 portletConfig.getPortletContext().getRequestDispatcher(
299 "/html/portlet/communities/scheduled_publishing_events.jsp");
300
301 portletRequestDispatcher.include(resourceRequest, resourceResponse);
302 }
303
304 protected void checkPermissions(PortletRequest portletRequest)
305 throws Exception {
306
307
308
309 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
310 WebKeys.THEME_DISPLAY);
311
312 PermissionChecker permissionChecker =
313 themeDisplay.getPermissionChecker();
314
315 Group group = getGroup(portletRequest);
316
317 if (group == null) {
318 throw new PrincipalException();
319 }
320
321 Layout layout = themeDisplay.getLayout();
322
323 boolean hasUpdateLayoutPermission = false;
324
325 if (layout != null) {
326 hasUpdateLayoutPermission = LayoutPermissionUtil.contains(
327 permissionChecker, layout.getGroupId(),
328 layout.isPrivateLayout(), layout.getLayoutId(),
329 ActionKeys.UPDATE);
330 }
331
332 if (group.isCommunity()) {
333 String cmd = ParamUtil.getString(portletRequest, Constants.CMD);
334
335 boolean publishToLive =
336 GroupPermissionUtil.contains(
337 permissionChecker, group.getGroupId(),
338 ActionKeys.PUBLISH_STAGING) &&
339 cmd.equals("publish_to_live");
340
341 if (!GroupPermissionUtil.contains(
342 permissionChecker, group.getGroupId(),
343 ActionKeys.APPROVE_PROPOSAL) &&
344 !GroupPermissionUtil.contains(
345 permissionChecker, group.getGroupId(),
346 ActionKeys.MANAGE_LAYOUTS) &&
347 !hasUpdateLayoutPermission && !publishToLive) {
348
349 throw new PrincipalException();
350 }
351 }
352 else if (group.isCompany()) {
353 if (!permissionChecker.isCompanyAdmin()) {
354 throw new PrincipalException();
355 }
356 }
357 else if (group.isLayoutPrototype()) {
358 LayoutPrototypePermissionUtil.check(
359 permissionChecker, group.getClassPK(), ActionKeys.UPDATE);
360 }
361 else if (group.isLayoutSetPrototype()) {
362 LayoutSetPrototypePermissionUtil.check(
363 permissionChecker, group.getClassPK(), ActionKeys.UPDATE);
364 }
365 else if (group.isOrganization()) {
366 long organizationId = group.getOrganizationId();
367
368 String cmd = ParamUtil.getString(portletRequest, Constants.CMD);
369
370 boolean publishToLive =
371 OrganizationPermissionUtil.contains(
372 permissionChecker, organizationId,
373 ActionKeys.PUBLISH_STAGING) &&
374 cmd.equals("publish_to_live");
375
376 if (!OrganizationPermissionUtil.contains(
377 permissionChecker, organizationId,
378 ActionKeys.APPROVE_PROPOSAL) &&
379 !OrganizationPermissionUtil.contains(
380 permissionChecker, organizationId,
381 ActionKeys.MANAGE_LAYOUTS) &&
382 !hasUpdateLayoutPermission && !publishToLive) {
383
384 throw new PrincipalException();
385 }
386 }
387 else if (group.isUser()) {
388 long groupUserId = group.getClassPK();
389
390 User groupUser = UserLocalServiceUtil.getUserById(groupUserId);
391
392 long[] organizationIds = groupUser.getOrganizationIds();
393
394 UserPermissionUtil.check(
395 permissionChecker, groupUserId, organizationIds,
396 ActionKeys.UPDATE);
397
398 if (!PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_MODIFIABLE &&
399 !PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_MODIFIABLE) {
400
401 throw new PrincipalException();
402 }
403 }
404 }
405
406 protected Group getGroup(PortletRequest portletRequest) throws Exception {
407 return ActionUtil.getGroup(portletRequest);
408 }
409
410 protected UnicodeProperties getTypeSettingsProperties(
411 ActionRequest actionRequest) {
412
413 return PropertiesParamUtil.getProperties(
414 actionRequest, "TypeSettingsProperties--");
415 }
416
417 protected void updateDisplayOrder(ActionRequest actionRequest)
418 throws Exception {
419
420 long groupId = ParamUtil.getLong(actionRequest, "groupId");
421 boolean privateLayout = ParamUtil.getBoolean(
422 actionRequest, "privateLayout");
423 long parentLayoutId = ParamUtil.getLong(
424 actionRequest, "parentLayoutId");
425 long[] layoutIds = StringUtil.split(
426 ParamUtil.getString(actionRequest, "layoutIds"), 0L);
427
428 LayoutServiceUtil.setLayouts(
429 groupId, privateLayout, parentLayoutId, layoutIds);
430 }
431
432 protected Object[] updateLayout(
433 ActionRequest actionRequest, ActionResponse actionResponse)
434 throws Exception {
435
436 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
437 actionRequest);
438
439 String cmd = ParamUtil.getString(uploadRequest, Constants.CMD);
440
441 long groupId = ParamUtil.getLong(actionRequest, "groupId");
442 boolean privateLayout = ParamUtil.getBoolean(
443 actionRequest, "privateLayout");
444 long layoutId = ParamUtil.getLong(actionRequest, "layoutId");
445 long parentLayoutId = ParamUtil.getLong(
446 uploadRequest, "parentLayoutId");
447 String description = ParamUtil.getString(uploadRequest, "description");
448 String type = ParamUtil.getString(uploadRequest, "type");
449 boolean hidden = ParamUtil.getBoolean(uploadRequest, "hidden");
450 String friendlyURL = ParamUtil.getString(uploadRequest, "friendlyURL");
451 boolean iconImage = ParamUtil.getBoolean(uploadRequest, "iconImage");
452 byte[] iconBytes = FileUtil.getBytes(
453 uploadRequest.getFile("iconFileName"));
454 long layoutPrototypeId = ParamUtil.getLong(
455 uploadRequest, "layoutPrototypeId");
456
457 boolean inheritFromParentLayoutId = ParamUtil.getBoolean(
458 uploadRequest, "inheritFromParentLayoutId");
459
460 long copyLayoutId = ParamUtil.getLong(uploadRequest, "copyLayoutId");
461
462 Map<Locale, String> localeNamesMap =
463 LocalizationUtil.getLocalizationMap(actionRequest, "name");
464 Map<Locale, String> localeTitlesMap =
465 LocalizationUtil.getLocalizationMap(actionRequest, "title");
466
467 ServiceContext serviceContext = ServiceContextFactory.getInstance(
468 Layout.class.getName(), actionRequest);
469
470 Layout layout = null;
471 String oldFriendlyURL = StringPool.BLANK;
472
473 if (cmd.equals(Constants.ADD)) {
474
475
476
477 if (inheritFromParentLayoutId && (parentLayoutId > 0)) {
478 Layout parentLayout = LayoutLocalServiceUtil.getLayout(
479 groupId, privateLayout, parentLayoutId);
480
481 layout = LayoutServiceUtil.addLayout(
482 groupId, privateLayout, parentLayoutId, localeNamesMap,
483 localeTitlesMap, description, parentLayout.getType(),
484 hidden, friendlyURL, serviceContext);
485
486 LayoutServiceUtil.updateLayout(
487 layout.getGroupId(), layout.isPrivateLayout(),
488 layout.getLayoutId(), parentLayout.getTypeSettings());
489
490 if (parentLayout.isTypePortlet()) {
491 ActionUtil.copyPreferences(
492 actionRequest, layout, parentLayout);
493
494 ActionUtil.copyLookAndFeel(layout, parentLayout);
495 }
496 }
497 else if (layoutPrototypeId > 0) {
498 LayoutPrototype layoutPrototype =
499 LayoutPrototypeServiceUtil.getLayoutPrototype(
500 layoutPrototypeId);
501
502 Layout layoutPrototypeLayout = layoutPrototype.getLayout();
503
504 layout = LayoutServiceUtil.addLayout(
505 groupId, privateLayout, parentLayoutId, localeNamesMap,
506 localeTitlesMap, description, LayoutConstants.TYPE_PORTLET,
507 false, friendlyURL, serviceContext);
508
509 LayoutServiceUtil.updateLayout(
510 layout.getGroupId(), layout.isPrivateLayout(),
511 layout.getLayoutId(),
512 layoutPrototypeLayout.getTypeSettings());
513
514 ActionUtil.copyPreferences(
515 actionRequest, layout, layoutPrototypeLayout);
516
517 ActionUtil.copyLookAndFeel(layout, layoutPrototypeLayout);
518 }
519 else {
520 LayoutServiceUtil.addLayout(
521 groupId, privateLayout, parentLayoutId, localeNamesMap,
522 localeTitlesMap, description, type, hidden, friendlyURL,
523 serviceContext);
524 }
525 }
526 else {
527
528
529
530 layout = LayoutLocalServiceUtil.getLayout(
531 groupId, privateLayout, layoutId);
532
533 oldFriendlyURL = layout.getFriendlyURL();
534
535 layout = LayoutServiceUtil.updateLayout(
536 groupId, privateLayout, layoutId, layout.getParentLayoutId(),
537 localeNamesMap, localeTitlesMap, description, type, hidden,
538 friendlyURL, Boolean.valueOf(iconImage), iconBytes,
539 serviceContext);
540
541 if (oldFriendlyURL.equals(layout.getFriendlyURL())) {
542 oldFriendlyURL = StringPool.BLANK;
543 }
544
545 UnicodeProperties formTypeSettingsProperties =
546 getTypeSettingsProperties(actionRequest);
547
548 if (type.equals(LayoutConstants.TYPE_PORTLET)) {
549 if ((copyLayoutId > 0) &&
550 (copyLayoutId != layout.getLayoutId())) {
551
552 try {
553 Layout copyLayout = LayoutLocalServiceUtil.getLayout(
554 groupId, privateLayout, copyLayoutId);
555
556 if (copyLayout.isTypePortlet()) {
557 LayoutServiceUtil.updateLayout(
558 groupId, privateLayout, layoutId,
559 copyLayout.getTypeSettings());
560
561 ActionUtil.copyPreferences(
562 actionRequest, layout, copyLayout);
563
564 ActionUtil.copyLookAndFeel(layout, copyLayout);
565 }
566 }
567 catch (NoSuchLayoutException nsle) {
568 }
569 }
570 else {
571 UnicodeProperties layoutTypeSettingsProperties =
572 layout.getTypeSettingsProperties();
573
574 layoutTypeSettingsProperties.putAll(
575 formTypeSettingsProperties);
576
577 LayoutServiceUtil.updateLayout(
578 groupId, privateLayout, layoutId,
579 layout.getTypeSettings());
580 }
581 }
582 else {
583 layout.setTypeSettingsProperties(formTypeSettingsProperties);
584
585 LayoutServiceUtil.updateLayout(
586 groupId, privateLayout, layoutId, layout.getTypeSettings());
587 }
588
589 HttpServletResponse response = PortalUtil.getHttpServletResponse(
590 actionResponse);
591
592 LayoutSettings layoutSettings = LayoutSettings.getInstance(layout);
593
594 EventsProcessorUtil.process(
595 PropsKeys.LAYOUT_CONFIGURATION_ACTION_UPDATE,
596 layoutSettings.getConfigurationActionUpdate(), uploadRequest,
597 response);
598 }
599
600 return new Object[] {layout, oldFriendlyURL};
601 }
602
603 protected void updateLogo(ActionRequest actionRequest) throws Exception {
604 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
605 actionRequest);
606
607 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
608 long stagingGroupId = ParamUtil.getLong(
609 actionRequest, "stagingGroupId");
610
611 boolean privateLayout = ParamUtil.getBoolean(
612 actionRequest, "privateLayout");
613 boolean logo = ParamUtil.getBoolean(actionRequest, "logo");
614
615 File file = uploadRequest.getFile("logoFileName");
616 byte[] bytes = FileUtil.getBytes(file);
617
618 if (logo && ((bytes == null) || (bytes.length == 0))) {
619 throw new UploadException();
620 }
621
622 LayoutSetServiceUtil.updateLogo(liveGroupId, privateLayout, logo, file);
623
624 if (stagingGroupId > 0) {
625 LayoutSetServiceUtil.updateLogo(
626 stagingGroupId, privateLayout, logo, file);
627 }
628 }
629
630 protected void updateLookAndFeel(ActionRequest actionRequest)
631 throws Exception {
632
633 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
634 WebKeys.THEME_DISPLAY);
635
636 long companyId = themeDisplay.getCompanyId();
637
638 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
639 long stagingGroupId = ParamUtil.getLong(
640 actionRequest, "stagingGroupId");
641
642 boolean privateLayout = ParamUtil.getBoolean(
643 actionRequest, "privateLayout");
644 long layoutId = ParamUtil.getLong(actionRequest, "layoutId");
645 String themeId = ParamUtil.getString(actionRequest, "themeId");
646 String colorSchemeId = ParamUtil.getString(
647 actionRequest, "colorSchemeId");
648 String css = ParamUtil.getString(actionRequest, "css");
649 boolean wapTheme = ParamUtil.getBoolean(actionRequest, "wapTheme");
650
651 if (stagingGroupId > 0) {
652 updateLookAndFeel(
653 companyId, stagingGroupId, privateLayout, layoutId, themeId,
654 colorSchemeId, css, wapTheme);
655 }
656 else {
657 updateLookAndFeel(
658 companyId, liveGroupId, privateLayout, layoutId, themeId,
659 colorSchemeId, css, wapTheme);
660 }
661 }
662
663 protected void updateLookAndFeel(
664 long companyId, long groupId, boolean privateLayout, long layoutId,
665 String themeId, String colorSchemeId, String css, boolean wapTheme)
666 throws Exception {
667
668 if (Validator.isNotNull(themeId) && Validator.isNull(colorSchemeId)) {
669 ColorScheme colorScheme = ThemeLocalServiceUtil.getColorScheme(
670 companyId, themeId, colorSchemeId, wapTheme);
671
672 colorSchemeId = colorScheme.getColorSchemeId();
673 }
674
675 if (layoutId <= 0) {
676 LayoutSetServiceUtil.updateLookAndFeel(
677 groupId, privateLayout, themeId, colorSchemeId, css, wapTheme);
678 }
679 else {
680 LayoutServiceUtil.updateLookAndFeel(
681 groupId, privateLayout, layoutId, themeId, colorSchemeId, css,
682 wapTheme);
683 }
684 }
685
686 protected void updateMergePages(ActionRequest actionRequest)
687 throws Exception {
688
689 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
690
691 boolean mergeGuestPublicPages = ParamUtil.getBoolean(
692 actionRequest, "mergeGuestPublicPages");
693
694 Group liveGroup = GroupLocalServiceUtil.getGroup(liveGroupId);
695
696 UnicodeProperties props = liveGroup.getTypeSettingsProperties();
697
698 props.setProperty(
699 "mergeGuestPublicPages", String.valueOf(mergeGuestPublicPages));
700
701 GroupServiceUtil.updateGroup(liveGroupId, liveGroup.getTypeSettings());
702 }
703
704 protected void updateMonitoring(ActionRequest actionRequest)
705 throws Exception {
706
707 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
708
709 String googleAnalyticsId = ParamUtil.getString(
710 actionRequest, "googleAnalyticsId");
711
712 Group liveGroup = GroupLocalServiceUtil.getGroup(liveGroupId);
713
714 UnicodeProperties props = liveGroup.getTypeSettingsProperties();
715
716 props.setProperty("googleAnalyticsId", googleAnalyticsId);
717
718 GroupServiceUtil.updateGroup(liveGroupId, liveGroup.getTypeSettings());
719 }
720
721 protected void updateVirtualHost(ActionRequest actionRequest)
722 throws Exception {
723
724 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
725
726 String publicVirtualHost = ParamUtil.getString(
727 actionRequest, "publicVirtualHost");
728 String privateVirtualHost = ParamUtil.getString(
729 actionRequest, "privateVirtualHost");
730 String friendlyURL = ParamUtil.getString(actionRequest, "friendlyURL");
731
732 LayoutSetServiceUtil.updateVirtualHost(
733 liveGroupId, false, publicVirtualHost);
734
735 LayoutSetServiceUtil.updateVirtualHost(
736 liveGroupId, true, privateVirtualHost);
737
738 GroupServiceUtil.updateFriendlyURL(liveGroupId, friendlyURL);
739
740 Group liveGroup = GroupServiceUtil.getGroup(liveGroupId);
741
742 if (liveGroup.hasStagingGroup()) {
743 Group stagingGroup = liveGroup.getStagingGroup();
744
745 publicVirtualHost = ParamUtil.getString(
746 actionRequest, "stagingPublicVirtualHost");
747 privateVirtualHost = ParamUtil.getString(
748 actionRequest, "stagingPrivateVirtualHost");
749 friendlyURL = ParamUtil.getString(
750 actionRequest, "stagingFriendlyURL");
751
752 LayoutSetServiceUtil.updateVirtualHost(
753 stagingGroup.getGroupId(), false, publicVirtualHost);
754
755 LayoutSetServiceUtil.updateVirtualHost(
756 stagingGroup.getGroupId(), true, privateVirtualHost);
757
758 GroupServiceUtil.updateFriendlyURL(
759 stagingGroup.getGroupId(), friendlyURL);
760 }
761 }
762
763 }