001
014
015 package com.liferay.portlet.wiki.social;
016
017 import com.liferay.portal.NoSuchModelException;
018 import com.liferay.portal.kernel.repository.model.FileEntry;
019 import com.liferay.portal.kernel.repository.model.FileVersion;
020 import com.liferay.portal.kernel.util.GetterUtil;
021 import com.liferay.portal.kernel.util.HttpUtil;
022 import com.liferay.portal.kernel.util.StringBundler;
023 import com.liferay.portal.kernel.util.StringPool;
024 import com.liferay.portal.kernel.util.Validator;
025 import com.liferay.portal.portletfilerepository.PortletFileRepositoryUtil;
026 import com.liferay.portal.security.permission.ActionKeys;
027 import com.liferay.portal.security.permission.PermissionChecker;
028 import com.liferay.portal.service.ServiceContext;
029 import com.liferay.portlet.social.model.BaseSocialActivityInterpreter;
030 import com.liferay.portlet.social.model.SocialActivity;
031 import com.liferay.portlet.social.model.SocialActivityConstants;
032 import com.liferay.portlet.wiki.model.WikiPage;
033 import com.liferay.portlet.wiki.model.WikiPageResource;
034 import com.liferay.portlet.wiki.service.WikiPageLocalServiceUtil;
035 import com.liferay.portlet.wiki.service.WikiPageResourceLocalServiceUtil;
036 import com.liferay.portlet.wiki.service.permission.WikiPagePermission;
037
038
043 public class WikiActivityInterpreter extends BaseSocialActivityInterpreter {
044
045 @Override
046 public String[] getClassNames() {
047 return _CLASS_NAMES;
048 }
049
050 protected String getAttachmentTitle(
051 SocialActivity activity, WikiPageResource pageResource,
052 ServiceContext serviceContext)
053 throws Exception {
054
055 int activityType = activity.getType();
056
057 if ((activityType == SocialActivityConstants.TYPE_ADD_ATTACHMENT) ||
058 (activityType ==
059 SocialActivityConstants.TYPE_MOVE_ATTACHMENT_TO_TRASH) ||
060 (activityType ==
061 SocialActivityConstants.TYPE_RESTORE_ATTACHMENT_FROM_TRASH)) {
062
063 String link = null;
064
065 FileEntry fileEntry = null;
066
067 try {
068 long fileEntryId = GetterUtil.getLong(
069 activity.getExtraDataValue("fileEntryId"));
070
071 fileEntry = PortletFileRepositoryUtil.getPortletFileEntry(
072 fileEntryId);
073 }
074 catch (NoSuchModelException nsme) {
075 }
076
077 FileVersion fileVersion = null;
078
079 if (fileEntry != null) {
080 fileVersion = fileEntry.getFileVersion();
081 }
082
083 String fileEntryTitle = activity.getExtraDataValue(
084 "fileEntryTitle");
085
086 if ((fileVersion != null) && !fileVersion.isInTrash()) {
087 StringBundler sb = new StringBundler(9);
088
089 sb.append(serviceContext.getPathMain());
090 sb.append("/wiki/get_page_attachment?p_l_id=");
091 sb.append(serviceContext.getPlid());
092 sb.append("&nodeId=");
093 sb.append(pageResource.getNodeId());
094 sb.append("&title=");
095 sb.append(HttpUtil.encodeURL(pageResource.getTitle()));
096 sb.append("&fileName=");
097 sb.append(fileEntryTitle);
098
099 link = sb.toString();
100 }
101
102 return wrapLink(link, fileEntryTitle);
103 }
104
105 return StringPool.BLANK;
106 }
107
108 @Override
109 protected String getPath(
110 SocialActivity activity, ServiceContext serviceContext) {
111
112 return "/wiki/find_page?pageResourcePrimKey=" + activity.getClassPK();
113 }
114
115 @Override
116 protected Object[] getTitleArguments(
117 String groupName, SocialActivity activity, String link,
118 String title, ServiceContext serviceContext)
119 throws Exception {
120
121 WikiPageResource pageResource =
122 WikiPageResourceLocalServiceUtil.fetchWikiPageResource(
123 activity.getClassPK());
124
125 if (pageResource == null) {
126 return null;
127 }
128
129 String creatorUserName = getUserName(
130 activity.getUserId(), serviceContext);
131
132 title = wrapLink(link, title);
133
134 return new Object[] {
135 groupName, creatorUserName, title,
136 getAttachmentTitle(activity, pageResource, serviceContext)
137 };
138 }
139
140 @Override
141 protected String getTitlePattern(
142 String groupName, SocialActivity activity) {
143
144 int activityType = activity.getType();
145
146 if ((activityType == WikiActivityKeys.ADD_COMMENT) ||
147 (activityType == SocialActivityConstants.TYPE_ADD_COMMENT)) {
148
149 if (Validator.isNull(groupName)) {
150 return "activity-wiki-page-add-comment";
151 }
152 else {
153 return "activity-wiki-page-add-comment-in";
154 }
155 }
156 else if (activityType == WikiActivityKeys.ADD_PAGE) {
157 if (Validator.isNull(groupName)) {
158 return "activity-wiki-page-add-page";
159 }
160 else {
161 return "activity-wiki-page-add-page-in";
162 }
163 }
164 else if (activityType == SocialActivityConstants.TYPE_ADD_ATTACHMENT) {
165 if (Validator.isNull(groupName)) {
166 return "activity-wiki-page-add-attachment";
167 }
168 else {
169 return "activity-wiki-page-add-attachment-in";
170 }
171 }
172 else if (activityType ==
173 SocialActivityConstants.TYPE_MOVE_ATTACHMENT_TO_TRASH) {
174
175 if (Validator.isNull(groupName)) {
176 return "activity-wiki-page-remove-attachment";
177 }
178 else {
179 return "activity-wiki-page-remove-attachment-in";
180 }
181 }
182 else if (activityType ==
183 SocialActivityConstants.
184 TYPE_RESTORE_ATTACHMENT_FROM_TRASH) {
185
186 if (Validator.isNull(groupName)) {
187 return "activity-wiki-page-restore-attachment";
188 }
189 else {
190 return "activity-wiki-page-restore-attachment-in";
191 }
192 }
193 else if (activityType == SocialActivityConstants.TYPE_MOVE_TO_TRASH) {
194 if (Validator.isNull(groupName)) {
195 return "activity-wiki-page-move-to-trash";
196 }
197 else {
198 return "activity-wiki-page-move-to-trash-in";
199 }
200 }
201 else if (activityType ==
202 SocialActivityConstants.TYPE_RESTORE_FROM_TRASH) {
203
204 if (Validator.isNull(groupName)) {
205 return "activity-wiki-page-restore-from-trash";
206 }
207 else {
208 return "activity-wiki-page-restore-from-trash-in";
209 }
210 }
211 else if (activityType == WikiActivityKeys.UPDATE_PAGE) {
212 if (Validator.isNull(groupName)) {
213 return "activity-wiki-page-update-page";
214 }
215 else {
216 return "activity-wiki-page-update-page-in";
217 }
218 }
219
220 return null;
221 }
222
223 @Override
224 protected boolean hasPermissions(
225 PermissionChecker permissionChecker, SocialActivity activity,
226 String actionId, ServiceContext serviceContext)
227 throws Exception {
228
229 if (!WikiPagePermission.contains(
230 permissionChecker, activity.getClassPK(), ActionKeys.VIEW)) {
231
232 return false;
233 }
234
235 int activityType = activity.getType();
236
237 if (activityType == WikiActivityKeys.UPDATE_PAGE) {
238 WikiPageResource pageResource =
239 WikiPageResourceLocalServiceUtil.getPageResource(
240 activity.getClassPK());
241
242 double version = GetterUtil.getDouble(
243 activity.getExtraDataValue("version"));
244
245 WikiPage page = WikiPageLocalServiceUtil.getPage(
246 pageResource.getNodeId(), pageResource.getTitle(), version);
247
248 if (!page.isApproved() &&
249 !WikiPagePermission.contains(
250 permissionChecker, activity.getClassPK(),
251 ActionKeys.UPDATE)) {
252
253 return false;
254 }
255 }
256
257 return true;
258 }
259
260 private static final String[] _CLASS_NAMES = {WikiPage.class.getName()};
261
262 }