001
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
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 }