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.context;
016    
017    import com.liferay.portal.comment.context.util.DiscussionRequestHelper;
018    import com.liferay.portal.comment.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.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 (_discussionTaglibHelper.isHideControls()) {
079                            return false;
080                    }
081    
082                    return !TrashUtil.isInTrash(
083                            _discussionComment.getModelClassName(),
084                            _discussionComment.getCommentId());
085            }
086    
087            @Override
088            public boolean isDeleteActionControlVisible() throws PortalException {
089                    return _discussionPermission.hasDeletePermission(
090                            _discussionComment.getCommentId());
091            }
092    
093            @Override
094            public boolean isDiscussionVisible() throws PortalException {
095                    if (!isCommentApproved() && !isCommentAuthor() && !isGroupAdmin()) {
096                            return false;
097                    }
098    
099                    return hasViewPermission();
100            }
101    
102            @Override
103            public boolean isEditActionControlVisible() throws PortalException {
104                    return _discussionPermission.hasUpdatePermission(
105                            _discussionComment.getCommentId());
106            }
107    
108            @Override
109            public boolean isEditControlsVisible() throws PortalException {
110                    if (_discussionTaglibHelper.isHideControls()) {
111                            return false;
112                    }
113    
114                    return hasUpdatePermission();
115            }
116    
117            @Override
118            public boolean isRatingsVisible() throws PortalException {
119                    if (!_discussionTaglibHelper.isRatingsEnabled()) {
120                            return false;
121                    }
122    
123                    return !TrashUtil.isInTrash(
124                            _discussionComment.getModelClassName(),
125                            _discussionComment.getCommentId());
126            }
127    
128            @Override
129            public boolean isReplyActionControlVisible() throws PortalException {
130                    return _discussionPermission.hasAddPermission(
131                            _discussionRequestHelper.getCompanyId(),
132                            _discussionRequestHelper.getScopeGroupId(),
133                            _discussionTaglibHelper.getClassName(),
134                            _discussionTaglibHelper.getClassPK());
135            }
136    
137            @Override
138            public boolean isWorkflowStatusVisible() {
139                    if ((_discussionComment != null) && !isCommentApproved()) {
140                            return true;
141                    }
142    
143                    return false;
144            }
145    
146            @Override
147            protected ThemeDisplay getThemeDisplay() {
148                    return _discussionRequestHelper.getThemeDisplay();
149            }
150    
151            protected User getUser() {
152                    ThemeDisplay themeDisplay = _discussionRequestHelper.getThemeDisplay();
153    
154                    return themeDisplay.getUser();
155            }
156    
157            protected boolean hasUpdatePermission() throws PortalException {
158                    return _discussionPermission.hasUpdatePermission(
159                            _discussionComment.getCommentId());
160            }
161    
162            protected boolean hasViewPermission() throws PortalException {
163                    return _discussionPermission.hasViewPermission(
164                            _discussionRequestHelper.getCompanyId(),
165                            _discussionRequestHelper.getScopeGroupId(),
166                            _discussionTaglibHelper.getClassName(),
167                            _discussionTaglibHelper.getClassPK());
168            }
169    
170            protected boolean isCommentApproved() {
171                    boolean approved = true;
172    
173                    if (_discussionComment instanceof WorkflowableComment) {
174                            WorkflowableComment workflowableComment =
175                                    (WorkflowableComment) _discussionComment;
176    
177                            if (workflowableComment.getStatus() ==
178                                            WorkflowConstants.STATUS_APPROVED) {
179    
180                                    approved = true;
181                            }
182                            else {
183                                    approved = false;
184                            }
185                    }
186    
187                    return approved;
188            }
189    
190            protected boolean isCommentAuthor() {
191                    User user = getUser();
192    
193                    if ((_discussionComment.getUserId() == user.getUserId()) &&
194                            !user.isDefaultUser()) {
195    
196                            return true;
197                    }
198    
199                    return false;
200            }
201    
202            protected boolean isCommentPending() {
203                    boolean pending = false;
204    
205                    if (_discussionComment instanceof WorkflowableComment) {
206                            WorkflowableComment workflowableComment =
207                                    (WorkflowableComment) _discussionComment;
208    
209                            if (workflowableComment.getStatus() ==
210                                            WorkflowConstants.STATUS_PENDING) {
211    
212                                    pending = true;
213                            }
214                            else {
215                                    pending = false;
216                            }
217                    }
218    
219                    return pending;
220            }
221    
222            protected boolean isGroupAdmin() {
223                    PermissionChecker permissionChecker =
224                            _discussionRequestHelper.getPermissionChecker();
225    
226                    return permissionChecker.isGroupAdmin(
227                            _discussionRequestHelper.getScopeGroupId());
228            }
229    
230            private final DiscussionComment _discussionComment;
231            private final DiscussionPermission _discussionPermission;
232            private final DiscussionRequestHelper _discussionRequestHelper;
233            private final DiscussionTaglibHelper _discussionTaglibHelper;
234    
235    }