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