Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2ddf5e1

Browse files
committed
Introduction of staging for sites, merged fixed portlet permission setup bug from 6.2 version
1 parent a097352 commit 2ddf5e1

File tree

4 files changed

+278
-55
lines changed

4 files changed

+278
-55
lines changed

db-setup-core/src/main/java/com/mimacom/liferay/portal/setup/core/SetupPermissions.java

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,7 @@
4040
import com.liferay.portal.kernel.util.PortalUtil;
4141
import com.mimacom.liferay.portal.setup.domain.*;
4242

43-
import java.util.ArrayList;
44-
import java.util.HashMap;
45-
import java.util.List;
46-
import java.util.Set;
43+
import java.util.*;
4744

4845

4946
public final class SetupPermissions {
@@ -60,28 +57,51 @@ private SetupPermissions() {
6057
public static void setupPortletPermissions(final PortletPermissions portletPermissions) {
6158

6259
for (PortletPermissions.Portlet portlet : portletPermissions.getPortlet()) {
60+
6361
deleteAllPortletPermissions(portlet);
64-
for (PortletPermissions.Portlet.ActionId actionId : portlet.getActionId()) {
65-
for (Role role : actionId.getRole()) {
66-
try {
67-
String name = role.getName();
68-
long roleId = RoleLocalServiceUtil.getRole(COMPANY_ID, name).getRoleId();
69-
ResourcePermissionLocalServiceUtil.setResourcePermissions(COMPANY_ID,
70-
portlet.getPortletId(), ResourceConstants.SCOPE_COMPANY,
71-
String.valueOf(COMPANY_ID), roleId,
72-
new String[]{actionId.getName()});
73-
LOG.info("Set permission for action id " + actionId.getName() + " and role "
74-
+ role.getName());
75-
76-
} catch (NestableException e) {
77-
LOG.error("could not set permission to portlet :" + portlet.getPortletId(),
78-
e);
79-
}
62+
63+
Map<String, Set<String>> actionsPerRole = getActionsPerRole(portlet);
64+
for (String roleName : actionsPerRole.keySet()) {
65+
try {
66+
long roleId = RoleLocalServiceUtil.getRole(COMPANY_ID, roleName).getRoleId();
67+
final Set<String> actionStrings = actionsPerRole.get(roleName);
68+
final String[] actionIds = actionStrings.toArray(new String[actionStrings.size()]);
69+
70+
ResourcePermissionLocalServiceUtil.setResourcePermissions(COMPANY_ID,
71+
portlet.getPortletId(), ResourceConstants.SCOPE_COMPANY,
72+
String.valueOf(COMPANY_ID), roleId, actionIds);
73+
LOG.info("Set permission for role: " + roleName + " for action ids: " + actionIds);
74+
} catch (NestableException e) {
75+
LOG.error("Could not set permission to portlet :" + portlet.getPortletId(),
76+
e);
77+
}
78+
}
79+
}
80+
}
81+
82+
/**
83+
* @param portlet
84+
* @return mapping of role name to action ids for the portlet
85+
*/
86+
private static Map<String, Set<String>> getActionsPerRole(PortletPermissions.Portlet portlet) {
87+
Map<String, Set<String>> result = new HashMap<>();
88+
89+
for (PortletPermissions.Portlet.ActionId actionId : portlet.getActionId()) {
90+
for (Role role : actionId.getRole()) {
91+
final String roleName = role.getName();
92+
Set<String> actions = result.get(roleName);
93+
if (actions == null) {
94+
actions = new HashSet<>();
95+
result.put(roleName, actions);
8096
}
97+
actions.add(actionId.getName());
8198
}
8299
}
100+
101+
return result;
83102
}
84103

104+
85105
public static void addReadRight(final String roleName, final String className,
86106
final String primaryKey) throws SystemException, PortalException {
87107

db-setup-core/src/main/java/com/mimacom/liferay/portal/setup/core/SetupSites.java

Lines changed: 83 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -26,26 +26,32 @@
2626
* #L%
2727
*/
2828

29-
import com.liferay.counter.kernel.service.CounterLocalServiceUtil;
29+
import com.liferay.exportimport.kernel.service.StagingLocalServiceUtil;
30+
import com.liferay.portal.kernel.dao.orm.QueryUtil;
3031
import com.liferay.portal.kernel.exception.PortalException;
3132
import com.liferay.portal.kernel.exception.SystemException;
3233
import com.liferay.portal.kernel.log.Log;
3334
import com.liferay.portal.kernel.log.LogFactoryUtil;
34-
import com.liferay.portal.kernel.model.*;
35+
import com.liferay.portal.kernel.model.Group;
36+
import com.liferay.portal.kernel.model.GroupConstants;
37+
import com.liferay.portal.kernel.model.User;
38+
import com.liferay.portal.kernel.security.auth.CompanyThreadLocal;
3539
import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
36-
import com.liferay.portal.kernel.service.OrganizationLocalServiceUtil;
3740
import com.liferay.portal.kernel.service.ServiceContext;
3841
import com.liferay.portal.kernel.service.UserLocalServiceUtil;
3942
import com.liferay.portal.kernel.util.PortalUtil;
4043
import com.mimacom.liferay.portal.setup.LiferaySetup;
4144
import com.mimacom.liferay.portal.setup.core.util.CustomFieldSettingUtil;
45+
import com.mimacom.liferay.portal.setup.core.util.PortletConstants;
4246
import com.mimacom.liferay.portal.setup.core.util.TitleMapUtil;
4347
import com.mimacom.liferay.portal.setup.domain.CustomFieldSetting;
4448
import com.mimacom.liferay.portal.setup.domain.Site;
49+
import com.mimacom.liferay.portal.setup.domain.Staging;
4550

4651
import java.util.HashMap;
4752
import java.util.List;
4853
import java.util.Map;
54+
import java.util.Objects;
4955

5056
/**
5157
* Created by gustavnovotny on 28.08.17.
@@ -62,6 +68,8 @@ private SetupSites() {
6268

6369
public static void setupSites(final List<com.mimacom.liferay.portal.setup.domain.Site> groups, final Group parentGroup) {
6470

71+
72+
CompanyThreadLocal.setCompanyId(COMPANY_ID);
6573
for (com.mimacom.liferay.portal.setup.domain.Site site : groups) {
6674
try {
6775
Group liferayGroup = null;
@@ -92,7 +100,6 @@ public static void setupSites(final List<com.mimacom.liferay.portal.setup.domain
92100

93101
long defaultUserId = UserLocalServiceUtil.getDefaultUserId(COMPANY_ID);
94102

95-
long newGroupId = CounterLocalServiceUtil.increment();
96103
ServiceContext serviceContext = new ServiceContext();
97104

98105
com.liferay.portal.kernel.model.Group newGroup = GroupLocalServiceUtil.addGroup(
@@ -103,20 +110,6 @@ public static void setupSites(final List<com.mimacom.liferay.portal.setup.domain
103110
LOG.info("New Organization created. Group ID: " + groupId);
104111
}
105112

106-
// if (liferayGroup != null && site.getSiteName() != null
107-
// && !site.getSiteName().equals("")) {
108-
// liferayGroup.setName(site.getSiteName());
109-
// liferayGroup = GroupLocalServiceUtil.updateGroup(liferayGroup);
110-
// }
111-
//
112-
// if (liferayGroup != null && site.getSiteFriendlyUrl() != null
113-
// && !site.getSiteFriendlyUrl().equals("")) {
114-
// liferayGroup.setFriendlyURL(site.getSiteFriendlyUrl());
115-
// GroupLocalServiceUtil.updateGroup(liferayGroup);
116-
// liferayGroup = liferayOrg.getGroup();
117-
// }
118-
119-
120113
if (parentGroup != null && liferayGroup != null
121114
&& site.isMaintainSiteHierarchy()) {
122115
liferayGroup.setParentGroupId(parentGroup.getGroupId());
@@ -128,14 +121,15 @@ public static void setupSites(final List<com.mimacom.liferay.portal.setup.domain
128121

129122
LOG.info("Setting site content...");
130123

124+
long userId = LiferaySetup.getRunAsUserId();
125+
131126
SetupDocumentFolders.setupDocumentFolders(site, groupId, COMPANY_ID);
132127
LOG.info("Document Folders setting finished.");
133128

134129
SetupDocuments.setupSiteDocuments(site, groupId, COMPANY_ID);
135130
LOG.info("Documents setting finished.");
136131

137-
SetupPages.setupSitePages(site, groupId, COMPANY_ID,
138-
LiferaySetup.getRunAsUserId());
132+
SetupPages.setupSitePages(site, groupId, COMPANY_ID, userId);
139133
LOG.info("Organization Pages setting finished.");
140134

141135
SetupWebFolders.setupWebFolders(site, groupId, COMPANY_ID);
@@ -147,9 +141,11 @@ public static void setupSites(final List<com.mimacom.liferay.portal.setup.domain
147141
SetupArticles.setupSiteArticles(site, groupId, COMPANY_ID);
148142
LOG.info("Organization Articles setting finished.");
149143

150-
setCustomFields(LiferaySetup.getRunAsUserId(), groupId, COMPANY_ID, site);
144+
setCustomFields(userId, groupId, COMPANY_ID, site);
151145
LOG.info("Organization custom fields set up.");
152146

147+
setStaging(userId, liferayGroup, site.getStaging());
148+
153149
List<com.mimacom.liferay.portal.setup.domain.Site> sites = site
154150
.getSite();
155151
setupSites(sites, liferayGroup);
@@ -160,9 +156,58 @@ public static void setupSites(final List<com.mimacom.liferay.portal.setup.domain
160156
}
161157
}
162158

159+
static void setStaging(long userId, Group liveGroup, Staging staging) {
160+
if (Objects.isNull(staging)) {
161+
LOG.info("No staging configuration present for site.");
162+
return;
163+
}
164+
165+
// only local staging supported, yet
166+
LOG.info("Setting up staging for site: " + liveGroup.getName());
167+
try {
168+
if (staging.getType().equals("local")) {
169+
ServiceContext serviceContext = new ServiceContext();
170+
serviceContext.setAttribute(PortletConstants.STAGING_PARAM_TEMPLATE.replace("#", "com_liferay_dynamic_data_mapping_web_portlet_PortletDisplayTemplatePortlet"), staging.isStageAdt());
171+
172+
setStagingParam(staging.isStageAdt(), PortletConstants.STAGING_PORTLET_ID_ADT, serviceContext);
173+
setStagingParam(staging.isStageBlogs(), PortletConstants.STAGING_PORTLET_ID_BLOGS, serviceContext);
174+
setStagingParam(staging.isStageBookmarks(), PortletConstants.STAGING_PORTLET_ID_BOOKMARKS, serviceContext);
175+
setStagingParam(staging.isStageCalendar(), PortletConstants.STAGING_PORTLET_ID_CALENDAR, serviceContext);
176+
setStagingParam(staging.isStageDdl(), PortletConstants.STAGING_PORTLET_ID_DDL, serviceContext);
177+
setStagingParam(staging.isStageDocumentLibrary(), PortletConstants.STAGING_PORTLET_ID_DL, serviceContext);
178+
setStagingParam(staging.isStageForms(), PortletConstants.STAGING_PORTLET_ID_FORMS, serviceContext);
179+
setStagingParam(staging.isStageMessageBoards(), PortletConstants.STAGING_PORTLET_ID_MB, serviceContext);
180+
setStagingParam(staging.isStageMobileRules(), PortletConstants.STAGING_PORTLET_ID_MDR, serviceContext);
181+
setStagingParam(staging.isStagePolls(), PortletConstants.STAGING_PORTLET_ID_POLLS, serviceContext);
182+
setStagingParam(staging.isStageWebContent(), PortletConstants.STAGING_PORTLET_ID_WEB_CONTENT, serviceContext);
183+
setStagingParam(staging.isStageWiki(), PortletConstants.STAGING_PORTLET_ID_WIKI, serviceContext);
184+
185+
StagingLocalServiceUtil.enableLocalStaging(userId, liveGroup, staging.isBranchingPublic(), staging.isBranchingPrivate(), serviceContext);
186+
LOG.info("Local staging switched on.");
187+
}
188+
if (staging.getType().equals("remote")) {
189+
LOG.error("Remote staging setup is not supported, yet. Staging not set up.");
190+
}
191+
if (staging.getType().equals("none") && liveGroup.hasLocalOrRemoteStagingGroup()) {
192+
ServiceContext serviceContext = new ServiceContext();
193+
serviceContext.setUserId(userId);
194+
serviceContext.setAttribute("forceDisable", true);
195+
StagingLocalServiceUtil.disableStaging(liveGroup, serviceContext);
196+
LOG.info("Staging switched off.");
197+
}
198+
199+
} catch (PortalException e) {
200+
LOG.error("Error while setting up staging.", e);
201+
}
202+
}
203+
204+
private static void setStagingParam(boolean isParamOn, String portletId, ServiceContext serviceContext) {
205+
serviceContext.setAttribute(PortletConstants.STAGING_PARAM_TEMPLATE.replace("#", portletId), String.valueOf(isParamOn));
206+
}
207+
163208
static void setCustomFields(final long runAsUserId, final long groupId,
164209
final long company, final Site site) {
165-
if (site.getCustomFieldSetting() == null || site.getCustomFieldSetting().size() == 0) {
210+
if (site.getCustomFieldSetting() == null || site.getCustomFieldSetting().isEmpty()) {
166211
LOG.error("Site does has no Expando field settings.");
167212
} else {
168213
Class clazz = com.liferay.portal.kernel.model.Group.class;
@@ -187,20 +232,14 @@ public static void deleteSite(
187232
Map<String, Site> toBeDeletedOrganisations = convertSiteListToHashMap(
188233
sites);
189234
try {
190-
for (com.liferay.portal.kernel.model.Organization organisation : OrganizationLocalServiceUtil
191-
.getOrganizations(-1, -1)) {
192-
if (!toBeDeletedOrganisations.containsKey(organisation.getName())) {
193-
try {
194-
OrganizationLocalServiceUtil
195-
.deleteOrganization(organisation.getOrganizationId());
196-
LOG.info("Deleting Organisation" + organisation.getName());
197-
} catch (Exception e) {
198-
LOG.error("Error by deleting Organisation !", e);
199-
}
235+
for (com.liferay.portal.kernel.model.Group siteGroup : GroupLocalServiceUtil
236+
.getGroups(QueryUtil.ALL_POS, QueryUtil.ALL_POS)) {
237+
if (!toBeDeletedOrganisations.containsKey(siteGroup.getName())) {
238+
deleteLiferayGroup(siteGroup);
200239
}
201240
}
202241
} catch (SystemException e) {
203-
LOG.error("Error by retrieving organisations!", e);
242+
LOG.error("Error by retrieving sites!", e);
204243
}
205244
break;
206245

@@ -211,9 +250,9 @@ public static void deleteSite(
211250
com.liferay.portal.kernel.model.Group o = GroupLocalServiceUtil.getGroup(COMPANY_ID, name);
212251
GroupLocalServiceUtil.deleteGroup(o);
213252
} catch (Exception e) {
214-
LOG.error("Error by deleting Organisation !", e);
253+
LOG.error("Error by deleting Site !", e);
215254
}
216-
LOG.info("Deleting Organisation " + name);
255+
LOG.info("Deleting Site " + name);
217256
}
218257

219258
break;
@@ -224,6 +263,15 @@ public static void deleteSite(
224263
}
225264
}
226265

266+
private static void deleteLiferayGroup(Group siteGroup) {
267+
try {
268+
GroupLocalServiceUtil.deleteGroup(siteGroup.getGroupId());
269+
LOG.info("Deleting Site" + siteGroup.getName());
270+
} catch (Exception e) {
271+
LOG.error("Error by deleting Site !", e);
272+
}
273+
}
274+
227275
public static void addSiteUser(com.liferay.portal.kernel.model.Group group, User user) {
228276
LOG.info("Adding user with screenName: " + user.getScreenName() + "to group with name: " + group.getName());
229277
GroupLocalServiceUtil.addUserGroup(user.getUserId(), group);
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.mimacom.liferay.portal.setup.core.util;
2+
3+
/*
4+
* #%L
5+
* Liferay Portal DB Setup core
6+
* %%
7+
* Copyright (C) 2016 - 2017 mimacom ag
8+
* %%
9+
* Permission is hereby granted, free of charge, to any person obtaining a copy
10+
* of this software and associated documentation files (the "Software"), to deal
11+
* in the Software without restriction, including without limitation the rights
12+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13+
* copies of the Software, and to permit persons to whom the Software is
14+
* furnished to do so, subject to the following conditions:
15+
*
16+
* The above copyright notice and this permission notice shall be included in
17+
* all copies or substantial portions of the Software.
18+
*
19+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25+
* THE SOFTWARE.
26+
* #L%
27+
*/
28+
29+
import com.liferay.exportimport.kernel.staging.StagingConstants;
30+
31+
/**
32+
* Created by gustavnovotny on 12.09.17.
33+
*/
34+
public class PortletConstants {
35+
36+
public static final String STAGING_PARAM_TEMPLATE = StagingConstants.STAGED_PREFIX + StagingConstants.STAGED_PORTLET + "#" + "--";
37+
public static final String STAGING_PORTLET_ID_ADT = "com_liferay_dynamic_data_mapping_web_portlet_PortletDisplayTemplatePortlet";
38+
public static final String STAGING_PORTLET_ID_BLOGS = "com_liferay_blogs_web_portlet_BlogsPortlet";
39+
public static final String STAGING_PORTLET_ID_BOOKMARKS = "com_liferay_bookmarks_web_portlet_BookmarksPortlet";
40+
public static final String STAGING_PORTLET_ID_CALENDAR = "com_liferay_calendar_web_portlet_CalendarPortlet";
41+
public static final String STAGING_PORTLET_ID_DDL = "com_liferay_dynamic_data_lists_web_portlet_DDLPortlet";
42+
public static final String STAGING_PORTLET_ID_DL = "com_liferay_document_library_web_portlet_DLPortlet";
43+
public static final String STAGING_PORTLET_ID_FORMS = "com_liferay_dynamic_data_lists_form_web_portlet_DDLFormAdminPortlet";
44+
public static final String STAGING_PORTLET_ID_MB = "com_liferay_message_boards_web_portlet_MBAdminPortlet";
45+
public static final String STAGING_PORTLET_ID_MDR = "com_liferay_mobile_device_rules_web_portlet_MDRPortlet";
46+
public static final String STAGING_PORTLET_ID_POLLS = "com_liferay_polls_web_portlet_PollsPortlet";
47+
public static final String STAGING_PORTLET_ID_WEB_CONTENT = "com_liferay_journal_web_portlet_JournalPortlet";
48+
public static final String STAGING_PORTLET_ID_WIKI = "com_liferay_wiki_web_portlet_WikiPortlet";
49+
}

0 commit comments

Comments
 (0)