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