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