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