001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.comment.display.context;
016    
017    import com.liferay.portal.comment.display.context.util.DiscussionRequestHelper;
018    import com.liferay.portal.comment.display.context.util.DiscussionTaglibHelper;
019    import com.liferay.portal.kernel.comment.CommentConstants;
020    import com.liferay.portal.kernel.comment.DiscussionComment;
021    import com.liferay.portal.kernel.comment.DiscussionPermission;
022    import com.liferay.portal.kernel.comment.WorkflowableComment;
023    import com.liferay.portal.kernel.comment.display.context.CommentTreeDisplayContext;
024    import com.liferay.portal.kernel.exception.PortalException;
025    import com.liferay.portal.kernel.language.LanguageUtil;
026    import com.liferay.portal.kernel.workflow.WorkflowConstants;
027    import com.liferay.portal.model.User;
028    import com.liferay.portal.security.permission.PermissionChecker;
029    import com.liferay.portal.service.WorkflowDefinitionLinkLocalServiceUtil;
030    import com.liferay.portal.theme.ThemeDisplay;
031    import com.liferay.portlet.trash.util.TrashUtil;
032    
033    import java.util.Locale;
034    
035    /**
036     * @author Adolfo P??rez
037     */
038    public class DefaultCommentTreeDisplayContext
039            extends BaseCommentDisplayContext implements CommentTreeDisplayContext {
040    
041            public DefaultCommentTreeDisplayContext(
042                    DiscussionRequestHelper discussionRequestHelper,
043                    DiscussionTaglibHelper discussionTaglibHelper,
044                    DiscussionPermission discussionPermission,
045                    DiscussionComment discussionComment) {
046    
047                    _discussionRequestHelper = discussionRequestHelper;
048                    _discussionTaglibHelper = discussionTaglibHelper;
049                    _discussionPermission = discussionPermission;
050                    _discussionComment = discussionComment;
051            }
052    
053            @Override
054            public String getPublishButtonLabel(Locale locale) {
055                    String publishButtonLabel = LanguageUtil.get(
056                            _discussionRequestHelper.getRequest(), "publish");
057    
058                    if (WorkflowDefinitionLinkLocalServiceUtil.hasWorkflowDefinitionLink(
059                                    _discussionRequestHelper.getCompanyId(),
060                                    _discussionRequestHelper.getScopeGroupId(),
061                                    CommentConstants.getDiscussionClassName())) {
062    
063                            if (isCommentPending()) {
064                                    publishButtonLabel = "save";
065                            }
066                            else {
067                                    publishButtonLabel = LanguageUtil.get(
068                                            _discussionRequestHelper.getRequest(),
069                                            "submit-for-publication");
070                            }
071                    }
072    
073                    return publishButtonLabel;
074            }
075    
076            @Override
077            public boolean isActionControlsVisible() throws PortalException {
078                    if ((_discussionComment == null) ||
079                            _discussionTaglibHelper.isHideControls()) {
080    
081                            return false;
082                    }
083    
084                    return !TrashUtil.isInTrash(
085                            _discussionComment.getModelClassName(),
086                            _discussionComment.getCommentId());
087            }
088    
089            @Override
090            public boolean isDeleteActionControlVisible() throws PortalException {
091                    if (_discussionPermission == null) {
092                            return false;
093                    }
094    
095                    return _discussionPermission.hasDeletePermission(
096                            _discussionComment.getCommentId());
097            }
098    
099            @Override
100            public boolean isDiscussionVisible() throws PortalException {
101                    if (!isCommentApproved() && !isCommentAuthor() && !isGroupAdmin()) {
102                            return false;
103                    }
104    
105                    return hasViewPermission();
106            }
107    
108            @Override
109            public boolean isEditActionControlVisible() throws PortalException {
110                    if (_discussionPermission == null) {
111                            return false;
112                    }
113    
114                    return _discussionPermission.hasUpdatePermission(
115                            _discussionComment.getCommentId());
116            }
117    
118            @Override
119            public boolean isEditControlsVisible() throws PortalException {
120                    if (_discussionTaglibHelper.isHideControls()) {
121                            return false;
122                    }
123    
124                    return hasUpdatePermission();
125            }
126    
127            @Override
128            public boolean isRatingsVisible() throws PortalException {
129                    if ((_discussionComment == null) ||
130                            !_discussionTaglibHelper.isRatingsEnabled()) {
131    
132                            return false;
133                    }
134    
135                    return !TrashUtil.isInTrash(
136                            _discussionComment.getModelClassName(),
137                            _discussionComment.getCommentId());
138            }
139    
140            @Override
141            public boolean isReplyActionControlVisible() throws PortalException {
142                    if (_discussionPermission == null) {
143                            return false;
144                    }
145    
146                    return _discussionPermission.hasAddPermission(
147                            _discussionRequestHelper.getCompanyId(),
148                            _discussionRequestHelper.getScopeGroupId(),
149                            _discussionTaglibHelper.getClassName(),
150                            _discussionTaglibHelper.getClassPK());
151            }
152    
153            @Override
154            public boolean isWorkflowStatusVisible() {
155                    if ((_discussionComment != null) && !isCommentApproved()) {
156                            return true;
157                    }
158    
159                    return false;
160            }
161    
162            @Override
163            protected ThemeDisplay getThemeDisplay() {
164                    return _discussionRequestHelper.getThemeDisplay();
165            }
166    
167            protected User getUser() {
168                    ThemeDisplay themeDisplay = _discussionRequestHelper.getThemeDisplay();
169    
170                    return themeDisplay.getUser();
171            }
172    
173            protected boolean hasUpdatePermission() throws PortalException {
174                    if (_discussionPermission == null) {
175                            return false;
176                    }
177    
178                    return _discussionPermission.hasUpdatePermission(
179                            _discussionComment.getCommentId());
180            }
181    
182            protected boolean hasViewPermission() throws PortalException {
183                    if (_discussionPermission == null) {
184                            return false;
185                    }
186    
187                    return _discussionPermission.hasViewPermission(
188                            _discussionRequestHelper.getCompanyId(),
189                            _discussionRequestHelper.getScopeGroupId(),
190                            _discussionTaglibHelper.getClassName(),
191                            _discussionTaglibHelper.getClassPK());
192            }
193    
194            protected boolean isCommentApproved() {
195                    boolean approved = true;
196    
197                    if (_discussionComment instanceof WorkflowableComment) {
198                            WorkflowableComment workflowableComment =
199                                    (WorkflowableComment) _discussionComment;
200    
201                            if (workflowableComment.getStatus() ==
202                                            WorkflowConstants.STATUS_APPROVED) {
203    
204                                    approved = true;
205                            }
206                            else {
207                                    approved = false;
208                            }
209                    }
210    
211                    return approved;
212            }
213    
214            protected boolean isCommentAuthor() {
215                    User user = getUser();
216    
217                    if ((_discussionComment != null) &&
218                            (_discussionComment.getUserId() == user.getUserId()) &&
219                            !user.isDefaultUser()) {
220    
221                            return true;
222                    }
223    
224                    return false;
225            }
226    
227            protected boolean isCommentPending() {
228                    boolean pending = false;
229    
230                    if (_discussionComment instanceof WorkflowableComment) {
231                            WorkflowableComment workflowableComment =
232                                    (WorkflowableComment) _discussionComment;
233    
234                            if (workflowableComment.getStatus() ==
235                                            WorkflowConstants.STATUS_PENDING) {
236    
237                                    pending = true;
238                            }
239                            else {
240                                    pending = false;
241                            }
242                    }
243    
244                    return pending;
245            }
246    
247            protected boolean isGroupAdmin() {
248                    PermissionChecker permissionChecker =
249                            _discussionRequestHelper.getPermissionChecker();
250    
251                    return permissionChecker.isGroupAdmin(
252                            _discussionRequestHelper.getScopeGroupId());
253            }
254    
255            private final DiscussionComment _discussionComment;
256            private final DiscussionPermission _discussionPermission;
257            private final DiscussionRequestHelper _discussionRequestHelper;
258            private final DiscussionTaglibHelper _discussionTaglibHelper;
259    
260    }