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.getClassPK();
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 parentLayout.isHidden(), friendlyURL,
485 serviceContext);
486
487 LayoutServiceUtil.updateLayout(
488 layout.getGroupId(), layout.isPrivateLayout(),
489 layout.getLayoutId(), parentLayout.getTypeSettings());
490
491 if (parentLayout.isTypePortlet()) {
492 ActionUtil.copyPreferences(
493 actionRequest, layout, parentLayout);
494 }
495 }
496 else if (layoutPrototypeId > 0) {
497 LayoutPrototype layoutPrototype =
498 LayoutPrototypeServiceUtil.getLayoutPrototype(
499 layoutPrototypeId);
500
501 Layout layoutPrototypeLayout = layoutPrototype.getLayout();
502
503 layout = LayoutServiceUtil.addLayout(
504 groupId, privateLayout, parentLayoutId, localeNamesMap,
505 localeTitlesMap, description, LayoutConstants.TYPE_PORTLET,
506 false, friendlyURL, serviceContext);
507
508 LayoutServiceUtil.updateLayout(
509 layout.getGroupId(), layout.isPrivateLayout(),
510 layout.getLayoutId(),
511 layoutPrototypeLayout.getTypeSettings());
512
513 ActionUtil.copyPreferences(
514 actionRequest, layout, layoutPrototypeLayout);
515
516 if (Validator.isNotNull(layoutPrototypeLayout.getThemeId())) {
517 LayoutServiceUtil.updateLookAndFeel(
518 layout.getGroupId(), layout.isPrivateLayout(),
519 layout.getLayoutId(),
520 layoutPrototypeLayout.getThemeId(),
521 layoutPrototypeLayout.getColorSchemeId(),
522 layoutPrototypeLayout.getCss(), false);
523 }
524
525 if (Validator.isNotNull(
526 layoutPrototypeLayout.getWapThemeId())) {
527
528 LayoutServiceUtil.updateLookAndFeel(
529 layout.getGroupId(), layout.isPrivateLayout(),
530 layout.getLayoutId(),
531 layoutPrototypeLayout.getWapThemeId(),
532 layoutPrototypeLayout.getWapColorSchemeId(),
533 layoutPrototypeLayout.getCss(), true);
534 }
535 }
536 else {
537 LayoutServiceUtil.addLayout(
538 groupId, privateLayout, parentLayoutId, localeNamesMap,
539 localeTitlesMap, description, type, hidden, friendlyURL,
540 serviceContext);
541 }
542 }
543 else {
544
545
546
547 layout = LayoutLocalServiceUtil.getLayout(
548 groupId, privateLayout, layoutId);
549
550 oldFriendlyURL = layout.getFriendlyURL();
551
552 layout = LayoutServiceUtil.updateLayout(
553 groupId, privateLayout, layoutId, layout.getParentLayoutId(),
554 localeNamesMap, localeTitlesMap, description, type, hidden,
555 friendlyURL, Boolean.valueOf(iconImage), iconBytes,
556 serviceContext);
557
558 if (oldFriendlyURL.equals(layout.getFriendlyURL())) {
559 oldFriendlyURL = StringPool.BLANK;
560 }
561
562 UnicodeProperties formTypeSettingsProperties =
563 getTypeSettingsProperties(actionRequest);
564
565 if (type.equals(LayoutConstants.TYPE_PORTLET)) {
566 if ((copyLayoutId > 0) &&
567 (copyLayoutId != layout.getLayoutId())) {
568
569 try {
570 Layout copyLayout = LayoutLocalServiceUtil.getLayout(
571 groupId, privateLayout, copyLayoutId);
572
573 if (copyLayout.isTypePortlet()) {
574 LayoutServiceUtil.updateLayout(
575 groupId, privateLayout, layoutId,
576 copyLayout.getTypeSettings());
577
578 ActionUtil.copyPreferences(
579 actionRequest, layout, copyLayout);
580 }
581 }
582 catch (NoSuchLayoutException nsle) {
583 }
584 }
585 else {
586 UnicodeProperties layoutTypeSettingsProperties =
587 layout.getTypeSettingsProperties();
588
589 layoutTypeSettingsProperties.putAll(
590 formTypeSettingsProperties);
591
592 LayoutServiceUtil.updateLayout(
593 groupId, privateLayout, layoutId,
594 layout.getTypeSettings());
595 }
596 }
597 else {
598 layout.setTypeSettingsProperties(formTypeSettingsProperties);
599
600 LayoutServiceUtil.updateLayout(
601 groupId, privateLayout, layoutId, layout.getTypeSettings());
602 }
603
604 HttpServletResponse response = PortalUtil.getHttpServletResponse(
605 actionResponse);
606
607 LayoutSettings layoutSettings = LayoutSettings.getInstance(layout);
608
609 EventsProcessorUtil.process(
610 PropsKeys.LAYOUT_CONFIGURATION_ACTION_UPDATE,
611 layoutSettings.getConfigurationActionUpdate(), uploadRequest,
612 response);
613 }
614
615 return new Object[] {layout, oldFriendlyURL};
616 }
617
618 protected void updateLogo(ActionRequest actionRequest) throws Exception {
619 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
620 actionRequest);
621
622 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
623 long stagingGroupId = ParamUtil.getLong(
624 actionRequest, "stagingGroupId");
625
626 boolean privateLayout = ParamUtil.getBoolean(
627 actionRequest, "privateLayout");
628 boolean logo = ParamUtil.getBoolean(actionRequest, "logo");
629
630 File file = uploadRequest.getFile("logoFileName");
631 byte[] bytes = FileUtil.getBytes(file);
632
633 if (logo && ((bytes == null) || (bytes.length == 0))) {
634 throw new UploadException();
635 }
636
637 LayoutSetServiceUtil.updateLogo(liveGroupId, privateLayout, logo, file);
638
639 if (stagingGroupId > 0) {
640 LayoutSetServiceUtil.updateLogo(
641 stagingGroupId, privateLayout, logo, file);
642 }
643 }
644
645 protected void updateLookAndFeel(ActionRequest actionRequest)
646 throws Exception {
647
648 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
649 WebKeys.THEME_DISPLAY);
650
651 long companyId = themeDisplay.getCompanyId();
652
653 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
654 long stagingGroupId = ParamUtil.getLong(
655 actionRequest, "stagingGroupId");
656
657 boolean privateLayout = ParamUtil.getBoolean(
658 actionRequest, "privateLayout");
659 long layoutId = ParamUtil.getLong(actionRequest, "layoutId");
660 String themeId = ParamUtil.getString(actionRequest, "themeId");
661 String colorSchemeId = ParamUtil.getString(
662 actionRequest, "colorSchemeId");
663 String css = ParamUtil.getString(actionRequest, "css");
664 boolean wapTheme = ParamUtil.getBoolean(actionRequest, "wapTheme");
665
666 if (stagingGroupId > 0) {
667 updateLookAndFeel(
668 companyId, stagingGroupId, privateLayout, layoutId, themeId,
669 colorSchemeId, css, wapTheme);
670 }
671 else {
672 updateLookAndFeel(
673 companyId, liveGroupId, privateLayout, layoutId, themeId,
674 colorSchemeId, css, wapTheme);
675 }
676 }
677
678 protected void updateLookAndFeel(
679 long companyId, long groupId, boolean privateLayout, long layoutId,
680 String themeId, String colorSchemeId, String css, boolean wapTheme)
681 throws Exception {
682
683 if (Validator.isNotNull(themeId) && Validator.isNull(colorSchemeId)) {
684 ColorScheme colorScheme = ThemeLocalServiceUtil.getColorScheme(
685 companyId, themeId, colorSchemeId, wapTheme);
686
687 colorSchemeId = colorScheme.getColorSchemeId();
688 }
689
690 if (layoutId <= 0) {
691 LayoutSetServiceUtil.updateLookAndFeel(
692 groupId, privateLayout, themeId, colorSchemeId, css, wapTheme);
693 }
694 else {
695 LayoutServiceUtil.updateLookAndFeel(
696 groupId, privateLayout, layoutId, themeId, colorSchemeId, css,
697 wapTheme);
698 }
699 }
700
701 protected void updateMergePages(ActionRequest actionRequest)
702 throws Exception {
703
704 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
705
706 boolean mergeGuestPublicPages = ParamUtil.getBoolean(
707 actionRequest, "mergeGuestPublicPages");
708
709 Group liveGroup = GroupLocalServiceUtil.getGroup(liveGroupId);
710
711 UnicodeProperties props = liveGroup.getTypeSettingsProperties();
712
713 props.setProperty(
714 "mergeGuestPublicPages", String.valueOf(mergeGuestPublicPages));
715
716 GroupServiceUtil.updateGroup(liveGroupId, liveGroup.getTypeSettings());
717 }
718
719 protected void updateMonitoring(ActionRequest actionRequest)
720 throws Exception {
721
722 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
723
724 String googleAnalyticsId = ParamUtil.getString(
725 actionRequest, "googleAnalyticsId");
726
727 Group liveGroup = GroupLocalServiceUtil.getGroup(liveGroupId);
728
729 UnicodeProperties props = liveGroup.getTypeSettingsProperties();
730
731 props.setProperty("googleAnalyticsId", googleAnalyticsId);
732
733 GroupServiceUtil.updateGroup(liveGroupId, liveGroup.getTypeSettings());
734 }
735
736 protected void updateVirtualHost(ActionRequest actionRequest)
737 throws Exception {
738
739 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
740
741 String publicVirtualHost = ParamUtil.getString(
742 actionRequest, "publicVirtualHost");
743 String privateVirtualHost = ParamUtil.getString(
744 actionRequest, "privateVirtualHost");
745 String friendlyURL = ParamUtil.getString(actionRequest, "friendlyURL");
746
747 LayoutSetServiceUtil.updateVirtualHost(
748 liveGroupId, false, publicVirtualHost);
749
750 LayoutSetServiceUtil.updateVirtualHost(
751 liveGroupId, true, privateVirtualHost);
752
753 GroupServiceUtil.updateFriendlyURL(liveGroupId, friendlyURL);
754
755 Group liveGroup = GroupServiceUtil.getGroup(liveGroupId);
756
757 if (liveGroup.hasStagingGroup()) {
758 Group stagingGroup = liveGroup.getStagingGroup();
759
760 publicVirtualHost = ParamUtil.getString(
761 actionRequest, "stagingPublicVirtualHost");
762 privateVirtualHost = ParamUtil.getString(
763 actionRequest, "stagingPrivateVirtualHost");
764 friendlyURL = ParamUtil.getString(
765 actionRequest, "stagingFriendlyURL");
766
767 LayoutSetServiceUtil.updateVirtualHost(
768 stagingGroup.getGroupId(), false, publicVirtualHost);
769
770 LayoutSetServiceUtil.updateVirtualHost(
771 stagingGroup.getGroupId(), true, privateVirtualHost);
772
773 GroupServiceUtil.updateFriendlyURL(
774 stagingGroup.getGroupId(), friendlyURL);
775 }
776 }
777
778 }