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