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