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.StringUtil;
44 import com.liferay.portal.kernel.util.UnicodeProperties;
45 import com.liferay.portal.kernel.util.Validator;
46 import com.liferay.portal.model.ColorScheme;
47 import com.liferay.portal.model.Group;
48 import com.liferay.portal.model.Layout;
49 import com.liferay.portal.model.LayoutConstants;
50 import com.liferay.portal.model.User;
51 import com.liferay.portal.security.auth.PrincipalException;
52 import com.liferay.portal.security.permission.ActionKeys;
53 import com.liferay.portal.security.permission.PermissionChecker;
54 import com.liferay.portal.service.GroupLocalServiceUtil;
55 import com.liferay.portal.service.GroupServiceUtil;
56 import com.liferay.portal.service.LayoutLocalServiceUtil;
57 import com.liferay.portal.service.LayoutServiceUtil;
58 import com.liferay.portal.service.LayoutSetServiceUtil;
59 import com.liferay.portal.service.ThemeLocalServiceUtil;
60 import com.liferay.portal.service.UserLocalServiceUtil;
61 import com.liferay.portal.service.permission.GroupPermissionUtil;
62 import com.liferay.portal.service.permission.LayoutPermissionUtil;
63 import com.liferay.portal.service.permission.OrganizationPermissionUtil;
64 import com.liferay.portal.service.permission.UserPermissionUtil;
65 import com.liferay.portal.struts.PortletAction;
66 import com.liferay.portal.theme.ThemeDisplay;
67 import com.liferay.portal.util.PortalUtil;
68 import com.liferay.portal.util.PropsKeys;
69 import com.liferay.portal.util.PropsUtil;
70 import com.liferay.portal.util.PropsValues;
71 import com.liferay.portal.util.WebKeys;
72 import com.liferay.portlet.communities.util.CommunitiesUtil;
73 import com.liferay.portlet.communities.util.StagingUtil;
74 import com.liferay.portlet.tasks.NoSuchProposalException;
75 import com.liferay.util.LocalizationUtil;
76 import com.liferay.util.servlet.UploadException;
77
78 import java.io.File;
79
80 import java.util.Locale;
81 import java.util.Map;
82
83 import javax.portlet.ActionRequest;
84 import javax.portlet.ActionResponse;
85 import javax.portlet.PortletConfig;
86 import javax.portlet.PortletRequest;
87 import javax.portlet.PortletRequestDispatcher;
88 import javax.portlet.RenderRequest;
89 import javax.portlet.RenderResponse;
90 import javax.portlet.ResourceRequest;
91 import javax.portlet.ResourceResponse;
92
93 import javax.servlet.http.HttpServletResponse;
94
95 import org.apache.struts.action.ActionForm;
96 import org.apache.struts.action.ActionForward;
97 import org.apache.struts.action.ActionMapping;
98
99
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 String tabs1 = ParamUtil.getString(portletRequest, "tabs1");
323
324 long groupId = ParamUtil.getLong(portletRequest, "groupId");
325 boolean privateLayout = tabs1.equals("private-pages");
326
327 Group group = GroupLocalServiceUtil.getGroup(groupId);
328
329 Layout layout = themeDisplay.getLayout();
330
331 boolean hasUpdateLayoutPermission = false;
332
333 if (layout != null) {
334 hasUpdateLayoutPermission = LayoutPermissionUtil.contains(
335 permissionChecker, layout.getGroupId(),
336 layout.isPrivateLayout(), layout.getLayoutId(),
337 ActionKeys.UPDATE);
338 }
339
340 if (group.isCommunity()) {
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) {
348
349 throw new PrincipalException();
350 }
351 }
352 else if (group.isOrganization()) {
353 long organizationId = group.getClassPK();
354
355 if (!OrganizationPermissionUtil.contains(
356 permissionChecker, organizationId,
357 ActionKeys.APPROVE_PROPOSAL) &&
358 !OrganizationPermissionUtil.contains(
359 permissionChecker, organizationId,
360 ActionKeys.MANAGE_LAYOUTS) &&
361 !hasUpdateLayoutPermission) {
362
363 throw new PrincipalException();
364 }
365 }
366 else if (group.isUser()) {
367 long groupUserId = group.getClassPK();
368
369 User groupUser = UserLocalServiceUtil.getUserById(groupUserId);
370
371 long[] organizationIds = groupUser.getOrganizationIds();
372
373 UserPermissionUtil.check(
374 permissionChecker, groupUserId, organizationIds,
375 ActionKeys.UPDATE);
376
377 if ((privateLayout &&
378 !PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_MODIFIABLE) ||
379 (!privateLayout &&
380 !PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_MODIFIABLE)) {
381
382 throw new PrincipalException();
383 }
384 }
385 }
386
387 protected UnicodeProperties getTypeSettingsProperties(
388 ActionRequest actionRequest) {
389
390 UnicodeProperties typeSettingsProperties = new UnicodeProperties(true);
391
392 String prefix = "TypeSettingsProperties(";
393
394 for (String paramName: actionRequest.getParameterMap().keySet()) {
395 if (paramName.startsWith(prefix)) {
396 String key = paramName.substring(
397 prefix.length(), paramName.length() - 1);
398
399 typeSettingsProperties.setProperty(
400 key, actionRequest.getParameter(paramName));
401 }
402 }
403
404 return typeSettingsProperties;
405 }
406
407 protected void updateDisplayOrder(ActionRequest actionRequest)
408 throws Exception {
409
410 long groupId = ParamUtil.getLong(actionRequest, "groupId");
411 boolean privateLayout = ParamUtil.getBoolean(
412 actionRequest, "privateLayout");
413 long parentLayoutId = ParamUtil.getLong(
414 actionRequest, "parentLayoutId");
415 long[] layoutIds = StringUtil.split(
416 ParamUtil.getString(actionRequest, "layoutIds"), 0L);
417
418 LayoutServiceUtil.setLayouts(
419 groupId, privateLayout, parentLayoutId, layoutIds);
420 }
421
422 protected void updateLayout(
423 ActionRequest actionRequest, ActionResponse actionResponse)
424 throws Exception {
425
426 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
427 actionRequest);
428
429 String cmd = ParamUtil.getString(uploadRequest, Constants.CMD);
430
431 long groupId = ParamUtil.getLong(actionRequest, "groupId");
432 boolean privateLayout = ParamUtil.getBoolean(
433 actionRequest, "privateLayout");
434 long layoutId = ParamUtil.getLong(actionRequest, "layoutId");
435 long parentLayoutId = ParamUtil.getLong(
436 uploadRequest, "parentLayoutId");
437 String description = ParamUtil.getString(uploadRequest, "description");
438 String type = ParamUtil.getString(uploadRequest, "type");
439 boolean hidden = ParamUtil.getBoolean(uploadRequest, "hidden");
440 String friendlyURL = ParamUtil.getString(uploadRequest, "friendlyURL");
441 boolean iconImage = ParamUtil.getBoolean(uploadRequest, "iconImage");
442 byte[] iconBytes = FileUtil.getBytes(
443 uploadRequest.getFile("iconFileName"));
444
445 boolean inheritFromParentLayoutId = ParamUtil.getBoolean(
446 uploadRequest, "inheritFromParentLayoutId");
447
448 long copyLayoutId = ParamUtil.getLong(uploadRequest, "copyLayoutId");
449
450 Map<Locale, String> localeNamesMap =
451 LocalizationUtil.getLocalizationMap(actionRequest, "name");
452 Map<Locale, String> localeTitlesMap =
453 LocalizationUtil.getLocalizationMap(actionRequest, "title");
454
455 if (cmd.equals(Constants.ADD)) {
456
457
459 if (inheritFromParentLayoutId && (parentLayoutId > 0)) {
460 Layout parentLayout = LayoutLocalServiceUtil.getLayout(
461 groupId, privateLayout, parentLayoutId);
462
463 Layout layout = LayoutServiceUtil.addLayout(
464 groupId, privateLayout, parentLayoutId, localeNamesMap,
465 localeTitlesMap, description, parentLayout.getType(),
466 parentLayout.isHidden(), friendlyURL);
467
468 LayoutServiceUtil.updateLayout(
469 layout.getGroupId(), layout.isPrivateLayout(),
470 layout.getLayoutId(), parentLayout.getTypeSettings());
471
472 if (parentLayout.getType().equals(
473 LayoutConstants.TYPE_PORTLET)) {
474
475 ActionUtil.copyPreferences(
476 actionRequest, layout, parentLayout);
477 }
478 }
479 else {
480 LayoutServiceUtil.addLayout(
481 groupId, privateLayout, parentLayoutId, localeNamesMap,
482 localeTitlesMap, description, type, hidden, friendlyURL);
483 }
484 }
485 else {
486
487
489 Layout layout = LayoutLocalServiceUtil.getLayout(
490 groupId, privateLayout, layoutId);
491
492 layout = LayoutServiceUtil.updateLayout(
493 groupId, privateLayout, layoutId, layout.getParentLayoutId(),
494 localeNamesMap, localeTitlesMap, description, type, hidden,
495 friendlyURL, Boolean.valueOf(iconImage), iconBytes);
496
497 UnicodeProperties formTypeSettingsProperties =
498 getTypeSettingsProperties(actionRequest);
499
500 if (type.equals(LayoutConstants.TYPE_PORTLET)) {
501 if ((copyLayoutId > 0) &&
502 (copyLayoutId != layout.getLayoutId())) {
503
504 try {
505 Layout copyLayout = LayoutLocalServiceUtil.getLayout(
506 groupId, privateLayout, copyLayoutId);
507
508 if (copyLayout.getType().equals(
509 LayoutConstants.TYPE_PORTLET)) {
510
511 LayoutServiceUtil.updateLayout(
512 groupId, privateLayout, layoutId,
513 copyLayout.getTypeSettings());
514
515 ActionUtil.copyPreferences(
516 actionRequest, layout, copyLayout);
517 }
518 }
519 catch (NoSuchLayoutException nsle) {
520 }
521 }
522 else {
523 UnicodeProperties layoutTypeSettingsProperties =
524 layout.getTypeSettingsProperties();
525
526 for (String property: formTypeSettingsProperties.keySet()) {
527 layoutTypeSettingsProperties.setProperty(
528 property,
529 formTypeSettingsProperties.getProperty(property));
530 }
531
532 LayoutServiceUtil.updateLayout(
533 groupId, privateLayout, layoutId,
534 layout.getTypeSettings());
535 }
536 }
537 else {
538 layout.setTypeSettingsProperties(formTypeSettingsProperties);
539
540 LayoutServiceUtil.updateLayout(
541 groupId, privateLayout, layoutId, layout.getTypeSettings());
542 }
543
544 HttpServletResponse response = PortalUtil.getHttpServletResponse(
545 actionResponse);
546
547 String[] eventClasses = StringUtil.split(
548 PropsUtil.get(
549 PropsKeys.LAYOUT_CONFIGURATION_ACTION_UPDATE,
550 new Filter(type)));
551
552 EventsProcessorUtil.process(
553 PropsKeys.LAYOUT_CONFIGURATION_ACTION_UPDATE, eventClasses,
554 uploadRequest, response);
555 }
556 }
557
558 protected void updateLogo(ActionRequest actionRequest) throws Exception {
559 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(
560 actionRequest);
561
562 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
563 long stagingGroupId = ParamUtil.getLong(
564 actionRequest, "stagingGroupId");
565
566 boolean privateLayout = ParamUtil.getBoolean(
567 actionRequest, "privateLayout");
568 boolean logo = ParamUtil.getBoolean(actionRequest, "logo");
569
570 File file = uploadRequest.getFile("logoFileName");
571 byte[] bytes = FileUtil.getBytes(file);
572
573 if (logo && ((bytes == null) || (bytes.length == 0))) {
574 throw new UploadException();
575 }
576
577 LayoutSetServiceUtil.updateLogo(liveGroupId, privateLayout, logo, file);
578
579 if (stagingGroupId > 0) {
580 LayoutSetServiceUtil.updateLogo(
581 stagingGroupId, privateLayout, logo, file);
582 }
583 }
584
585 protected void updateLookAndFeel(ActionRequest actionRequest)
586 throws Exception {
587
588 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
589 WebKeys.THEME_DISPLAY);
590
591 long companyId = themeDisplay.getCompanyId();
592
593 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
594 long stagingGroupId = ParamUtil.getLong(
595 actionRequest, "stagingGroupId");
596
597 boolean privateLayout = ParamUtil.getBoolean(
598 actionRequest, "privateLayout");
599 long layoutId = ParamUtil.getLong(actionRequest, "layoutId");
600 String themeId = ParamUtil.getString(actionRequest, "themeId");
601 String colorSchemeId = ParamUtil.getString(
602 actionRequest, "colorSchemeId");
603 String css = ParamUtil.getString(actionRequest, "css");
604 boolean wapTheme = ParamUtil.getBoolean(actionRequest, "wapTheme");
605
606 if (stagingGroupId > 0) {
607 updateLookAndFeel(
608 companyId, stagingGroupId, privateLayout, layoutId, themeId,
609 colorSchemeId, css, wapTheme);
610 }
611 else {
612 updateLookAndFeel(
613 companyId, liveGroupId, privateLayout, layoutId, themeId,
614 colorSchemeId, css, wapTheme);
615 }
616 }
617
618 protected void updateLookAndFeel(
619 long companyId, long groupId, boolean privateLayout, long layoutId,
620 String themeId, String colorSchemeId, String css, boolean wapTheme)
621 throws Exception {
622
623 if (Validator.isNotNull(themeId) && Validator.isNull(colorSchemeId)) {
624 ColorScheme colorScheme = ThemeLocalServiceUtil.getColorScheme(
625 companyId, themeId, colorSchemeId, wapTheme);
626
627 colorSchemeId = colorScheme.getColorSchemeId();
628 }
629
630 if (layoutId <= 0) {
631 LayoutSetServiceUtil.updateLookAndFeel(
632 groupId, privateLayout, themeId, colorSchemeId, css, wapTheme);
633 }
634 else {
635 LayoutServiceUtil.updateLookAndFeel(
636 groupId, privateLayout, layoutId, themeId, colorSchemeId, css,
637 wapTheme);
638 }
639 }
640
641 protected void updateMergePages(ActionRequest actionRequest)
642 throws Exception {
643
644 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
645
646 boolean mergeGuestPublicPages = ParamUtil.getBoolean(
647 actionRequest, "mergeGuestPublicPages");
648
649 Group liveGroup = GroupLocalServiceUtil.getGroup(liveGroupId);
650
651 UnicodeProperties props = liveGroup.getTypeSettingsProperties();
652
653 props.setProperty(
654 "mergeGuestPublicPages", String.valueOf(mergeGuestPublicPages));
655
656 GroupServiceUtil.updateGroup(liveGroupId, liveGroup.getTypeSettings());
657 }
658
659 protected void updateMonitoring(ActionRequest actionRequest)
660 throws Exception {
661
662 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
663
664 String googleAnalyticsId = ParamUtil.getString(
665 actionRequest, "googleAnalyticsId");
666
667 Group liveGroup = GroupLocalServiceUtil.getGroup(liveGroupId);
668
669 UnicodeProperties props = liveGroup.getTypeSettingsProperties();
670
671 props.setProperty("googleAnalyticsId", googleAnalyticsId);
672
673 GroupServiceUtil.updateGroup(liveGroupId, liveGroup.getTypeSettings());
674 }
675
676 protected void updateVirtualHost(ActionRequest actionRequest)
677 throws Exception {
678
679 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
680
681 String publicVirtualHost = ParamUtil.getString(
682 actionRequest, "publicVirtualHost");
683 String privateVirtualHost = ParamUtil.getString(
684 actionRequest, "privateVirtualHost");
685 String friendlyURL = ParamUtil.getString(actionRequest, "friendlyURL");
686
687 LayoutSetServiceUtil.updateVirtualHost(
688 liveGroupId, false, publicVirtualHost);
689
690 LayoutSetServiceUtil.updateVirtualHost(
691 liveGroupId, true, privateVirtualHost);
692
693 GroupServiceUtil.updateFriendlyURL(liveGroupId, friendlyURL);
694 }
695
696 protected void updateWorkflow(ActionRequest actionRequest)
697 throws Exception {
698
699 long liveGroupId = ParamUtil.getLong(actionRequest, "liveGroupId");
700
701 boolean workflowEnabled = ParamUtil.getBoolean(
702 actionRequest, "workflowEnabled");
703 int workflowStages = ParamUtil.getInteger(
704 actionRequest, "workflowStages");
705
706 StringBuilder sb = new StringBuilder();
707
708 for (int i = 1; i <= workflowStages; i++) {
709 String workflowRoleName = ParamUtil.getString(
710 actionRequest, "workflowRoleName_" + i);
711
712 sb.append(workflowRoleName);
713
714 if ((i + 1) <= workflowStages) {
715 sb.append(",");
716 }
717 }
718
719 String workflowRoleNames = sb.toString();
720
721 GroupServiceUtil.updateWorkflow(
722 liveGroupId, workflowEnabled, workflowStages, workflowRoleNames);
723 }
724
725 }