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.trash.util.TrashUtil;
033 import com.liferay.portlet.wiki.model.WikiPage;
034 import com.liferay.portlet.wiki.model.WikiPageResource;
035 import com.liferay.portlet.wiki.service.WikiPageLocalServiceUtil;
036 import com.liferay.portlet.wiki.service.WikiPageResourceLocalServiceUtil;
037 import com.liferay.portlet.wiki.service.permission.WikiPagePermission;
038
039
044 public class WikiActivityInterpreter extends BaseSocialActivityInterpreter {
045
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("title");
084
085 if ((fileVersion != null) && !fileVersion.isInTrash()) {
086 StringBundler sb = new StringBundler(9);
087
088 sb.append(serviceContext.getPathMain());
089 sb.append("/wiki/get_page_attachment?p_l_id=");
090 sb.append(serviceContext.getPlid());
091 sb.append("&nodeId=");
092 sb.append(pageResource.getNodeId());
093 sb.append("&title=");
094 sb.append(HttpUtil.encodeURL(pageResource.getTitle()));
095 sb.append("&fileName=");
096 sb.append(fileEntryTitle);
097
098 link = sb.toString();
099 }
100
101 return wrapLink(link, fileEntryTitle);
102 }
103
104 return StringPool.BLANK;
105 }
106
107 @Override
108 protected String getEntryTitle(
109 SocialActivity activity, ServiceContext serviceContext)
110 throws Exception {
111
112 WikiPageResource pageResource =
113 WikiPageResourceLocalServiceUtil.getPageResource(
114 activity.getClassPK());
115
116 WikiPage page = WikiPageLocalServiceUtil.getPage(
117 pageResource.getNodeId(), pageResource.getTitle());
118
119 if (!page.isInTrash()) {
120 return TrashUtil.getOriginalTitle(page.getTitle());
121 }
122
123 return page.getTitle();
124 }
125
126 @Override
127 protected String getPath(
128 SocialActivity activity, ServiceContext serviceContext) {
129
130 return "/wiki/find_page?pageResourcePrimKey=" + activity.getClassPK();
131 }
132
133 @Override
134 protected Object[] getTitleArguments(
135 String groupName, SocialActivity activity, String link,
136 String title, ServiceContext serviceContext)
137 throws Exception {
138
139 WikiPageResource pageResource =
140 WikiPageResourceLocalServiceUtil.getPageResource(
141 activity.getClassPK());
142
143 String creatorUserName = getUserName(
144 activity.getUserId(), serviceContext);
145
146 title = wrapLink(link, title);
147
148 return new Object[] {
149 groupName, creatorUserName, title,
150 getAttachmentTitle(activity, pageResource, serviceContext)
151 };
152 }
153
154 @Override
155 protected String getTitlePattern(
156 String groupName, SocialActivity activity) {
157
158 int activityType = activity.getType();
159
160 if ((activityType == WikiActivityKeys.ADD_COMMENT) ||
161 (activityType == SocialActivityConstants.TYPE_ADD_COMMENT)) {
162
163 if (Validator.isNull(groupName)) {
164 return "activity-wiki-page-add-comment";
165 }
166 else {
167 return "activity-wiki-page-add-comment-in";
168 }
169 }
170 else if (activityType == WikiActivityKeys.ADD_PAGE) {
171 if (Validator.isNull(groupName)) {
172 return "activity-wiki-page-add-page";
173 }
174 else {
175 return "activity-wiki-page-add-page-in";
176 }
177 }
178 else if (activityType == SocialActivityConstants.TYPE_ADD_ATTACHMENT) {
179 if (Validator.isNull(groupName)) {
180 return "activity-wiki-page-add-attachment";
181 }
182 else {
183 return "activity-wiki-page-add-attachment-in";
184 }
185 }
186 else if (activityType ==
187 SocialActivityConstants.TYPE_MOVE_ATTACHMENT_TO_TRASH) {
188
189 if (Validator.isNull(groupName)) {
190 return "activity-wiki-page-remove-attachment";
191 }
192 else {
193 return "activity-wiki-page-remove-attachment-in";
194 }
195 }
196 else if (activityType ==
197 SocialActivityConstants.
198 TYPE_RESTORE_ATTACHMENT_FROM_TRASH) {
199
200 if (Validator.isNull(groupName)) {
201 return "activity-wiki-page-restore-attachment";
202 }
203 else {
204 return "activity-wiki-page-restore-attachment-in";
205 }
206 }
207 else if (activityType == SocialActivityConstants.TYPE_MOVE_TO_TRASH) {
208 if (Validator.isNull(groupName)) {
209 return "activity-wiki-page-move-to-trash";
210 }
211 else {
212 return "activity-wiki-page-move-to-trash-in";
213 }
214 }
215 else if (activityType ==
216 SocialActivityConstants.TYPE_RESTORE_FROM_TRASH) {
217
218 if (Validator.isNull(groupName)) {
219 return "activity-wiki-page-restore-from-trash";
220 }
221 else {
222 return "activity-wiki-page-restore-from-trash-in";
223 }
224 }
225 else if (activityType == WikiActivityKeys.UPDATE_PAGE) {
226 if (Validator.isNull(groupName)) {
227 return "activity-wiki-page-update-page";
228 }
229 else {
230 return "activity-wiki-page-update-page-in";
231 }
232 }
233
234 return null;
235 }
236
237 @Override
238 protected boolean hasPermissions(
239 PermissionChecker permissionChecker, SocialActivity activity,
240 String actionId, ServiceContext serviceContext)
241 throws Exception {
242
243 if (!WikiPagePermission.contains(
244 permissionChecker, activity.getClassPK(), ActionKeys.VIEW)) {
245
246 return false;
247 }
248
249 int activityType = activity.getType();
250
251 if (activityType == WikiActivityKeys.UPDATE_PAGE) {
252 WikiPageResource pageResource =
253 WikiPageResourceLocalServiceUtil.getPageResource(
254 activity.getClassPK());
255
256 double version = GetterUtil.getDouble(
257 activity.getExtraDataValue("version"));
258
259 WikiPage page = WikiPageLocalServiceUtil.getPage(
260 pageResource.getNodeId(), pageResource.getTitle(), version);
261
262 if (!page.isApproved() &&
263 !WikiPagePermission.contains(
264 permissionChecker, activity.getClassPK(),
265 ActionKeys.UPDATE)) {
266
267 return false;
268 }
269 }
270
271 return true;
272 }
273
274 private static final String[] _CLASS_NAMES = {WikiPage.class.getName()};
275
276 }