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