001
014
015 package com.liferay.portlet.wiki.trash;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.repository.model.FileEntry;
020 import com.liferay.portal.kernel.trash.BaseTrashHandler;
021 import com.liferay.portal.kernel.trash.TrashActionKeys;
022 import com.liferay.portal.kernel.trash.TrashRenderer;
023 import com.liferay.portal.kernel.util.HtmlUtil;
024 import com.liferay.portal.kernel.util.Validator;
025 import com.liferay.portal.kernel.workflow.WorkflowConstants;
026 import com.liferay.portal.model.ContainerModel;
027 import com.liferay.portal.model.LayoutConstants;
028 import com.liferay.portal.model.SystemEvent;
029 import com.liferay.portal.portletfilerepository.PortletFileRepositoryUtil;
030 import com.liferay.portal.security.permission.ActionKeys;
031 import com.liferay.portal.security.permission.PermissionChecker;
032 import com.liferay.portal.util.PortalUtil;
033 import com.liferay.portal.util.PortletKeys;
034 import com.liferay.portlet.PortletURLFactoryUtil;
035 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
036 import com.liferay.portlet.trash.DuplicateEntryException;
037 import com.liferay.portlet.trash.TrashEntryConstants;
038 import com.liferay.portlet.trash.model.TrashEntry;
039 import com.liferay.portlet.wiki.asset.WikiPageAssetRenderer;
040 import com.liferay.portlet.wiki.model.WikiNode;
041 import com.liferay.portlet.wiki.model.WikiPage;
042 import com.liferay.portlet.wiki.model.WikiPageResource;
043 import com.liferay.portlet.wiki.service.WikiPageLocalServiceUtil;
044 import com.liferay.portlet.wiki.service.WikiPageResourceLocalServiceUtil;
045 import com.liferay.portlet.wiki.service.WikiPageServiceUtil;
046 import com.liferay.portlet.wiki.service.permission.WikiNodePermission;
047 import com.liferay.portlet.wiki.service.permission.WikiPagePermission;
048 import com.liferay.portlet.wiki.util.WikiPageAttachmentsUtil;
049
050 import java.util.ArrayList;
051 import java.util.List;
052
053 import javax.portlet.PortletRequest;
054 import javax.portlet.PortletURL;
055
056
061 public class WikiPageTrashHandler extends BaseTrashHandler {
062
063 @Override
064 public SystemEvent addDeletionSystemEvent(
065 long userId, long groupId, long classPK, String classUuid,
066 String referrerClassName)
067 throws PortalException, SystemException {
068
069 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
070 classPK, WorkflowConstants.STATUS_ANY, false);
071
072 return super.addDeletionSystemEvent(
073 userId, groupId, page.getPageId(), classUuid, referrerClassName);
074 }
075
076 @Override
077 public void checkDuplicateTrashEntry(
078 TrashEntry trashEntry, long containerModelId, String newName)
079 throws PortalException, SystemException {
080
081 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
082 trashEntry.getClassPK(), WorkflowConstants.STATUS_ANY, false);
083
084 if (containerModelId == TrashEntryConstants.DEFAULT_CONTAINER_ID) {
085 containerModelId = page.getNodeId();
086 }
087
088 String originalTitle = trashEntry.getTypeSettingsProperty("title");
089
090 if (Validator.isNotNull(newName)) {
091 originalTitle = newName;
092 }
093
094 WikiPageResource pageResource =
095 WikiPageResourceLocalServiceUtil.fetchPageResource(
096 containerModelId, originalTitle);
097
098 if (pageResource != null) {
099 DuplicateEntryException dee = new DuplicateEntryException();
100
101 WikiPage duplicatePage = WikiPageLocalServiceUtil.getLatestPage(
102 pageResource.getResourcePrimKey(), WorkflowConstants.STATUS_ANY,
103 false);
104
105 dee.setDuplicateEntryId(duplicatePage.getResourcePrimKey());
106 dee.setOldName(duplicatePage.getTitle());
107 dee.setTrashEntryId(trashEntry.getEntryId());
108
109 throw dee;
110 }
111 }
112
113 @Override
114 public void deleteTrashEntry(long classPK)
115 throws PortalException, SystemException {
116
117 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
118 classPK, WorkflowConstants.STATUS_ANY, false);
119
120 WikiPageLocalServiceUtil.deletePage(page);
121 }
122
123 @Override
124 public String getClassName() {
125 return WikiPage.class.getName();
126 }
127
128 @Override
129 public String getContainerModelClassName() {
130 return WikiNode.class.getName();
131 }
132
133 @Override
134 public String getContainerModelName() {
135 return "wiki-node";
136 }
137
138 @Override
139 public ContainerModel getParentContainerModel(long classPK)
140 throws PortalException, SystemException {
141
142 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
143 classPK, WorkflowConstants.STATUS_ANY, false);
144
145 return page.getNode();
146 }
147
148 @Override
149 public List<ContainerModel> getParentContainerModels(long classPK)
150 throws PortalException, SystemException {
151
152 List<ContainerModel> containerModels = new ArrayList<ContainerModel>();
153
154 containerModels.add(getParentContainerModel(classPK));
155
156 return containerModels;
157 }
158
159 @Override
160 public String getRestoreContainedModelLink(
161 PortletRequest portletRequest, long classPK)
162 throws PortalException, SystemException {
163
164 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
165 classPK, WorkflowConstants.STATUS_ANY, false);
166
167 WikiNode node = page.getNode();
168
169 PortletURL portletURL = getRestoreURL(portletRequest, classPK, false);
170
171 portletURL.setParameter("nodeName", node.getName());
172 portletURL.setParameter("title", HtmlUtil.unescape(page.getTitle()));
173
174 return portletURL.toString();
175 }
176
177 @Override
178 public String getRestoreContainerModelLink(
179 PortletRequest portletRequest, long classPK)
180 throws PortalException, SystemException {
181
182 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
183 classPK, WorkflowConstants.STATUS_ANY, false);
184
185 WikiNode node = page.getNode();
186
187 PortletURL portletURL = getRestoreURL(portletRequest, classPK, true);
188
189 portletURL.setParameter("nodeId", String.valueOf(node.getNodeId()));
190
191 return portletURL.toString();
192 }
193
194 @Override
195 public String getRestoreMessage(PortletRequest portletRequest, long classPK)
196 throws PortalException, SystemException {
197
198 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
199 classPK, WorkflowConstants.STATUS_ANY, false);
200
201 WikiNode node = page.getNode();
202
203 return node.getName();
204 }
205
206 @Override
207 public ContainerModel getTrashContainer(long classPK)
208 throws PortalException, SystemException {
209
210 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
211 classPK, WorkflowConstants.STATUS_ANY, false);
212
213 return page.getTrashContainer();
214 }
215
216 @Override
217 public TrashRenderer getTrashRenderer(long classPK)
218 throws PortalException, SystemException {
219
220 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
221 classPK, WorkflowConstants.STATUS_ANY, false);
222
223 return new WikiPageAssetRenderer(page);
224 }
225
226 @Override
227 public boolean hasTrashPermission(
228 PermissionChecker permissionChecker, long groupId, long classPK,
229 String trashActionId)
230 throws PortalException, SystemException {
231
232 if (trashActionId.equals(TrashActionKeys.MOVE)) {
233 WikiNodePermission.check(
234 permissionChecker, classPK, ActionKeys.ADD_PAGE);
235 }
236
237 return super.hasTrashPermission(
238 permissionChecker, groupId, classPK, trashActionId);
239 }
240
241 @Override
242 public boolean isInTrash(long classPK)
243 throws PortalException, SystemException {
244
245 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
246 classPK, WorkflowConstants.STATUS_ANY, false);
247
248 return page.isInTrash();
249 }
250
251 @Override
252 public boolean isInTrashContainer(long classPK)
253 throws PortalException, SystemException {
254
255 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
256 classPK, WorkflowConstants.STATUS_ANY, false);
257
258 return page.isInTrashContainer();
259 }
260
261 @Override
262 public void restoreRelatedTrashEntry(String className, long classPK)
263 throws PortalException, SystemException {
264
265 if (!className.equals(DLFileEntry.class.getName())) {
266 return;
267 }
268
269 FileEntry fileEntry = PortletFileRepositoryUtil.getPortletFileEntry(
270 classPK);
271
272 WikiPage page = WikiPageAttachmentsUtil.getPage(classPK);
273
274 WikiPageServiceUtil.restorePageAttachmentFromTrash(
275 page.getNodeId(), page.getTitle(), fileEntry.getTitle());
276 }
277
278 @Override
279 public void restoreTrashEntry(long userId, long classPK)
280 throws PortalException, SystemException {
281
282 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
283 classPK, WorkflowConstants.STATUS_ANY, false);
284
285 WikiPageLocalServiceUtil.restorePageFromTrash(userId, page);
286 }
287
288 @Override
289 public void updateTitle(long classPK, String name)
290 throws PortalException, SystemException {
291
292 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
293 classPK, WorkflowConstants.STATUS_ANY, false);
294
295 page.setTitle(name);
296
297 WikiPageLocalServiceUtil.updateWikiPage(page);
298
299 WikiPageResource pageResource =
300 WikiPageResourceLocalServiceUtil.getPageResource(
301 page.getResourcePrimKey());
302
303 pageResource.setTitle(name);
304
305 WikiPageResourceLocalServiceUtil.updateWikiPageResource(pageResource);
306 }
307
308 protected PortletURL getRestoreURL(
309 PortletRequest portletRequest, long classPK,
310 boolean isContainerModel)
311 throws PortalException, SystemException {
312
313 String portletId = PortletKeys.WIKI;
314
315 WikiPage page = WikiPageLocalServiceUtil.getLatestPage(
316 classPK, WorkflowConstants.STATUS_ANY, false);
317
318 long plid = PortalUtil.getPlidFromPortletId(
319 page.getGroupId(), PortletKeys.WIKI);
320
321 if (plid == LayoutConstants.DEFAULT_PLID) {
322 portletId = PortletKeys.WIKI_ADMIN;
323
324 plid = PortalUtil.getControlPanelPlid(portletRequest);
325 }
326
327 PortletURL portletURL = PortletURLFactoryUtil.create(
328 portletRequest, portletId, plid, PortletRequest.RENDER_PHASE);
329
330 if (isContainerModel) {
331 if (portletId.equals(PortletKeys.WIKI)) {
332 portletURL.setParameter(
333 "struts_action", "/wiki/view_all_pages");
334 }
335 else {
336 portletURL.setParameter(
337 "struts_action", "/wiki_admin/view_all_pages");
338 }
339 }
340 else {
341 if (portletId.equals(PortletKeys.WIKI)) {
342 portletURL.setParameter("struts_action", "/wiki/view");
343 }
344 else {
345 portletURL.setParameter("struts_action", "/wiki_admin/view");
346 }
347 }
348
349 return portletURL;
350 }
351
352 @Override
353 protected boolean hasPermission(
354 PermissionChecker permissionChecker, long classPK, String actionId)
355 throws PortalException, SystemException {
356
357 return WikiPagePermission.contains(
358 permissionChecker, classPK, actionId);
359 }
360
361 }