001
014
015 package com.liferay.portlet.layoutsadmin.context;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
019 import com.liferay.portal.kernel.util.JavaConstants;
020 import com.liferay.portal.kernel.util.ParamUtil;
021 import com.liferay.portal.kernel.util.StringPool;
022 import com.liferay.portal.kernel.util.UnicodeProperties;
023 import com.liferay.portal.kernel.util.WebKeys;
024 import com.liferay.portal.model.Group;
025 import com.liferay.portal.model.Layout;
026 import com.liferay.portal.model.LayoutConstants;
027 import com.liferay.portal.model.LayoutSet;
028 import com.liferay.portal.model.Organization;
029 import com.liferay.portal.model.RoleConstants;
030 import com.liferay.portal.model.User;
031 import com.liferay.portal.model.UserGroup;
032 import com.liferay.portal.service.LayoutLocalServiceUtil;
033 import com.liferay.portal.service.LayoutSetLocalServiceUtil;
034 import com.liferay.portal.service.OrganizationLocalServiceUtil;
035 import com.liferay.portal.service.RoleLocalServiceUtil;
036 import com.liferay.portal.service.UserGroupLocalServiceUtil;
037 import com.liferay.portal.service.UserLocalServiceUtil;
038 import com.liferay.portal.theme.PortletDisplay;
039 import com.liferay.portal.theme.ThemeDisplay;
040 import com.liferay.portal.util.LayoutDescription;
041 import com.liferay.portal.util.LayoutListUtil;
042 import com.liferay.portal.util.PortletKeys;
043 import com.liferay.portal.util.PropsValues;
044
045 import java.util.List;
046
047 import javax.portlet.PortletConfig;
048 import javax.portlet.PortletURL;
049
050 import javax.servlet.http.HttpServletRequest;
051
052
055 public class LayoutsAdminDisplayContext {
056
057 public LayoutsAdminDisplayContext(
058 HttpServletRequest request,
059 LiferayPortletResponse liferayPortletResponse) {
060
061 _request = request;
062 _liferayPortletResponse = liferayPortletResponse;
063
064 _groupDisplayContextHelper = new GroupDisplayContextHelper(request);
065
066 boolean privateLayout = false;
067 String tabs1 = ParamUtil.getString(request, "tabs1", "public-pages");
068
069 if (tabs1.equals("my-dashboard") || tabs1.equals("private-pages")) {
070 privateLayout = true;
071 }
072
073 Layout selLayout = getSelLayout();
074
075 if (selLayout != null) {
076 privateLayout = selLayout.isPrivateLayout();
077 }
078
079 Group liveGroup = getLiveGroup();
080
081 if (liveGroup.isUser() && !isPublicLayoutsModifiable() &&
082 isPrivateLayoutsModifiable() && !privateLayout) {
083
084 privateLayout = true;
085 tabs1 = "my-dashboard";
086 }
087
088 Group selGroup = getSelGroup();
089
090 if (selGroup.isLayoutSetPrototype()) {
091 privateLayout = true;
092 }
093
094 _privateLayout = privateLayout;
095 _tabs1 = tabs1;
096
097 String portletName = getPortletName();
098
099 if (portletName.equals(PortletKeys.LAYOUTS_ADMIN) ||
100 portletName.equals(PortletKeys.MY_ACCOUNT)) {
101
102 ThemeDisplay themeDisplay = (ThemeDisplay) _request.getAttribute(
103 WebKeys.THEME_DISPLAY);
104
105 PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
106
107 portletDisplay.setURLBack(getBackURL());
108 }
109
110 _request.setAttribute(
111 com.liferay.portal.util.WebKeys.LAYOUT_DESCRIPTIONS,
112 getLayoutDescriptions());
113 }
114
115 public String getBackURL() {
116 if (_backURL != null) {
117 return _backURL;
118 }
119
120 _backURL = ParamUtil.getString(_request, "backURL", getRedirect());
121
122 return _backURL;
123 }
124
125 public PortletURL getEditLayoutURL() {
126 String closeRedirect = ParamUtil.getString(_request, "closeRedirect");
127
128 PortletURL editLayoutURL = _liferayPortletResponse.createRenderURL();
129
130 editLayoutURL.setParameter(
131 "struts_action", "/layouts_admin/edit_layouts");
132 editLayoutURL.setParameter("tabs1", getTabs1());
133 editLayoutURL.setParameter("redirect", getRedirect());
134 editLayoutURL.setParameter("closeRedirect", closeRedirect);
135
136 String portletName = getPortletName();
137
138 if (portletName.equals(PortletKeys.LAYOUTS_ADMIN) ||
139 portletName.equals(PortletKeys.MY_ACCOUNT) ||
140 portletName.equals(PortletKeys.USERS_ADMIN)) {
141
142 editLayoutURL.setParameter("backURL", getBackURL());
143 }
144
145 editLayoutURL.setParameter("groupId", String.valueOf(getLiveGroupId()));
146 editLayoutURL.setParameter("viewLayout", Boolean.TRUE.toString());
147
148 return editLayoutURL;
149 }
150
151 public Group getGroup() {
152 return _groupDisplayContextHelper.getGroup();
153 }
154
155 public Long getGroupId() {
156 return _groupDisplayContextHelper.getGroupId();
157 }
158
159 public UnicodeProperties getGroupTypeSettings() {
160 return _groupDisplayContextHelper.getGroupTypeSettings();
161 }
162
163 public List<LayoutDescription> getLayoutDescriptions() {
164 if (_layoutDescriptions != null) {
165 return _layoutDescriptions;
166 }
167
168 ThemeDisplay themeDisplay = (ThemeDisplay) _request.getAttribute(
169 WebKeys.THEME_DISPLAY);
170
171 _layoutDescriptions = LayoutListUtil.getLayoutDescriptions(
172 getGroupId(), isPrivateLayout(), getRootNodeName(),
173 themeDisplay.getLocale());
174
175 return _layoutDescriptions;
176 }
177
178 public Long getLayoutId() {
179 if (_layoutId != null) {
180 return _layoutId;
181 }
182
183 _layoutId = LayoutConstants.DEFAULT_PARENT_LAYOUT_ID;
184
185 Layout selLayout = getSelLayout();
186
187 if (selLayout != null) {
188 _layoutId = selLayout.getLayoutId();
189 }
190
191 return _layoutId;
192 }
193
194 public Group getLiveGroup() {
195 return _groupDisplayContextHelper.getLiveGroup();
196 }
197
198 public Long getLiveGroupId() {
199 return _groupDisplayContextHelper.getLiveGroupId();
200 }
201
202 public Organization getOrganization() {
203 if (_organization != null) {
204 return _organization;
205 }
206
207 Group liveGroup = getLiveGroup();
208
209 if (liveGroup.isOrganization()) {
210 _organization = OrganizationLocalServiceUtil.fetchOrganization(
211 liveGroup.getOrganizationId());
212 }
213
214 return _organization;
215 }
216
217 public String getPagesName() {
218 if (_pagesName != null) {
219 return _pagesName;
220 }
221
222 Group liveGroup = getLiveGroup();
223
224 if (liveGroup.isLayoutPrototype() || liveGroup.isLayoutSetPrototype() ||
225 liveGroup.isUserGroup()) {
226
227 _pagesName = "pages";
228 }
229 else if (isPrivateLayout()) {
230 if (liveGroup.isUser()) {
231 _pagesName = "my-dashboard";
232 }
233 else {
234 _pagesName = "private-pages";
235 }
236 }
237 else {
238 if (liveGroup.isUser()) {
239 _pagesName = "my-profile";
240 }
241 else {
242 _pagesName = "public-pages";
243 }
244 }
245
246 return _pagesName;
247 }
248
249 public String getRedirect() {
250 if (_redirect != null) {
251 return _redirect;
252 }
253
254 _redirect = ParamUtil.getString(_request, "redirect");
255
256 return _redirect;
257 }
258
259 public PortletURL getRedirectURL() {
260 PortletURL portletURL = _liferayPortletResponse.createRenderURL();
261
262 portletURL.setParameter("struts_action", "/layouts_admin/edit_layouts");
263 portletURL.setParameter("tabs1", getTabs1());
264 portletURL.setParameter("redirect", getRedirect());
265
266 String portletName = getPortletName();
267
268 if (portletName.equals(PortletKeys.LAYOUTS_ADMIN) ||
269 portletName.equals(PortletKeys.MY_ACCOUNT) ||
270 portletName.equals(PortletKeys.USERS_ADMIN)) {
271
272 portletURL.setParameter("backURL", getBackURL());
273 }
274
275 portletURL.setParameter("groupId", String.valueOf(getLiveGroupId()));
276
277 return portletURL;
278 }
279
280 public String getRootNodeName() {
281 if (_rootNodeName != null) {
282 return _rootNodeName;
283 }
284
285 ThemeDisplay themeDisplay = (ThemeDisplay) _request.getAttribute(
286 WebKeys.THEME_DISPLAY);
287
288 Group liveGroup = getLiveGroup();
289
290 _rootNodeName = liveGroup.getLayoutRootNodeName(
291 isPrivateLayout(), themeDisplay.getLocale());
292
293 return _rootNodeName;
294 }
295
296 public Group getSelGroup() {
297 return _groupDisplayContextHelper.getSelGroup();
298 }
299
300 public Layout getSelLayout() {
301 if (_selLayout != null) {
302 return _selLayout;
303 }
304
305 if (getSelPlid() != LayoutConstants.DEFAULT_PLID) {
306 _selLayout = LayoutLocalServiceUtil.fetchLayout(getSelPlid());
307 }
308
309 return _selLayout;
310 }
311
312 public LayoutSet getSelLayoutSet() throws PortalException {
313 if (_selLayoutSet != null) {
314 return _selLayoutSet;
315 }
316
317 _selLayoutSet = LayoutSetLocalServiceUtil.getLayoutSet(
318 getGroupId(), isPrivateLayout());
319
320 return _selLayoutSet;
321 }
322
323 public Long getSelPlid() {
324 if (_selPlid != null) {
325 return _selPlid;
326 }
327
328 _selPlid = ParamUtil.getLong(
329 _request, "selPlid", LayoutConstants.DEFAULT_PLID);
330
331 return _selPlid;
332 }
333
334 public User getSelUser() {
335 if (_selUser != null) {
336 return _selUser;
337 }
338
339 Group liveGroup = getLiveGroup();
340
341 if (liveGroup.isUser()) {
342 _selUser = UserLocalServiceUtil.fetchUser(liveGroup.getClassPK());
343 }
344
345 return _selUser;
346 }
347
348 public Group getStagingGroup() {
349 return _groupDisplayContextHelper.getStagingGroup();
350 }
351
352 public Long getStagingGroupId() {
353 return _groupDisplayContextHelper.getStagingGroupId();
354 }
355
356 public String getTabs1() {
357 return _tabs1;
358 }
359
360 public String getTabs1Names() {
361 if (_tabs1Names != null) {
362 return _tabs1Names;
363 }
364
365 _tabs1Names = "public-pages,private-pages";
366
367 Group liveGroup = getLiveGroup();
368
369 if (liveGroup.isUser()) {
370 if (isPrivateLayoutsModifiable() && isPublicLayoutsModifiable()) {
371 _tabs1Names = "my-profile,my-dashboard";
372 }
373 else if (isPrivateLayoutsModifiable()) {
374 _tabs1Names = "my-dashboard";
375 }
376 else if (isPublicLayoutsModifiable()) {
377 _tabs1Names = "my-profile";
378 }
379 }
380
381 return _tabs1Names;
382 }
383
384 public UserGroup getUserGroup() {
385 if (_userGroup != null) {
386 return _userGroup;
387 }
388
389 Group liveGroup = getLiveGroup();
390
391 if (liveGroup.isUserGroup()) {
392 _userGroup = UserGroupLocalServiceUtil.fetchUserGroup(
393 liveGroup.getClassPK());
394 }
395
396 return _userGroup;
397 }
398
399 public boolean isPrivateLayout() {
400 return _privateLayout;
401 }
402
403 protected String getPortletName() {
404 PortletConfig portletConfig = (PortletConfig)_request.getAttribute(
405 JavaConstants.JAVAX_PORTLET_CONFIG);
406
407 if (portletConfig == null) {
408 return StringPool.BLANK;
409 }
410
411 return portletConfig.getPortletName();
412 }
413
414 protected boolean hasPowerUserRole() {
415 ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute(
416 WebKeys.THEME_DISPLAY);
417
418 try {
419 User selUser = getSelUser();
420
421 return RoleLocalServiceUtil.hasUserRole(
422 selUser.getUserId(), themeDisplay.getCompanyId(),
423 RoleConstants.POWER_USER, true);
424 }
425 catch (Exception e) {
426 }
427
428 return false;
429 }
430
431 protected boolean isPrivateLayoutsModifiable() {
432 if ((!PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_POWER_USER_REQUIRED ||
433 hasPowerUserRole()) &&
434 PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_ENABLED) {
435
436 return true;
437 }
438
439 return false;
440 }
441
442 protected boolean isPublicLayoutsModifiable() {
443 if ((!PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_POWER_USER_REQUIRED ||
444 hasPowerUserRole()) &&
445 PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_ENABLED) {
446
447 return true;
448 }
449
450 return false;
451 }
452
453 private String _backURL;
454 private final GroupDisplayContextHelper _groupDisplayContextHelper;
455 private List<LayoutDescription> _layoutDescriptions;
456 private Long _layoutId;
457 private final LiferayPortletResponse _liferayPortletResponse;
458 private Organization _organization;
459 private String _pagesName;
460 private final boolean _privateLayout;
461 private String _redirect;
462 private final HttpServletRequest _request;
463 private String _rootNodeName;
464 private Layout _selLayout;
465 private LayoutSet _selLayoutSet;
466 private Long _selPlid;
467 private User _selUser;
468 private final String _tabs1;
469 private String _tabs1Names;
470 private UserGroup _userGroup;
471
472 }