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 public void deleteTrashEntry(long classPK)
098 throws PortalException, SystemException {
099
100 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
101
102 WikiPageLocalServiceUtil.deletePage(page.getNodeId(), page.getTitle());
103 }
104
105 public String getClassName() {
106 return WikiPage.class.getName();
107 }
108
109 @Override
110 public String getContainerModelClassName() {
111 return WikiNode.class.getName();
112 }
113
114 @Override
115 public String getContainerModelName() {
116 return "wiki-node";
117 }
118
119 @Override
120 public ContainerModel getParentContainerModel(long classPK)
121 throws PortalException, SystemException {
122
123 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
124
125 return page.getNode();
126 }
127
128 @Override
129 public List<ContainerModel> getParentContainerModels(long classPK)
130 throws PortalException, SystemException {
131
132 List<ContainerModel> containerModels = new ArrayList<ContainerModel>();
133
134 containerModels.add(getParentContainerModel(classPK));
135
136 return containerModels;
137 }
138
139 @Override
140 public String getRestoreLink(PortletRequest portletRequest, long classPK)
141 throws PortalException, SystemException {
142
143 String portletId = PortletKeys.WIKI;
144
145 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
146
147 long plid = PortalUtil.getPlidFromPortletId(
148 page.getGroupId(), PortletKeys.WIKI);
149
150 if (plid == LayoutConstants.DEFAULT_PLID) {
151 portletId = PortletKeys.WIKI_ADMIN;
152
153 plid = PortalUtil.getControlPanelPlid(portletRequest);
154 }
155
156 PortletURL portletURL = PortletURLFactoryUtil.create(
157 portletRequest, portletId, plid, PortletRequest.RENDER_PHASE);
158
159 WikiNode node = page.getNode();
160
161 if (portletId.equals(PortletKeys.WIKI)) {
162 portletURL.setParameter("struts_action", "/wiki/view");
163 }
164 else {
165 portletURL.setParameter("struts_action", "/wiki_admin/view");
166 }
167
168 portletURL.setParameter("nodeName", node.getName());
169 portletURL.setParameter("title", HtmlUtil.unescape(page.getTitle()));
170
171 return portletURL.toString();
172 }
173
174 @Override
175 public String getRestoreMessage(PortletRequest portletRequest, long classPK)
176 throws PortalException, SystemException {
177
178 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
179
180 return page.getTitle();
181 }
182
183 @Override
184 public ContainerModel getTrashContainer(long classPK)
185 throws PortalException, SystemException {
186
187 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
188
189 return page.getTrashContainer();
190 }
191
192 @Override
193 public TrashRenderer getTrashRenderer(long classPK)
194 throws PortalException, SystemException {
195
196 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
197
198 return new WikiPageAssetRenderer(page);
199 }
200
201 @Override
202 public boolean hasTrashPermission(
203 PermissionChecker permissionChecker, long groupId, long classPK,
204 String trashActionId)
205 throws PortalException, SystemException {
206
207 if (trashActionId.equals(TrashActionKeys.MOVE)) {
208 WikiNodePermission.check(
209 permissionChecker, classPK, ActionKeys.ADD_PAGE);
210 }
211
212 return super.hasTrashPermission(
213 permissionChecker, groupId, classPK, trashActionId);
214 }
215
216 public boolean isInTrash(long classPK)
217 throws PortalException, SystemException {
218
219 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
220
221 return page.isInTrash();
222 }
223
224 @Override
225 public boolean isInTrashContainer(long classPK)
226 throws PortalException, SystemException {
227
228 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
229
230 return page.isInTrashContainer();
231 }
232
233 @Override
234 public void restoreRelatedTrashEntry(String className, long classPK)
235 throws PortalException, SystemException {
236
237 if (!className.equals(DLFileEntry.class.getName())) {
238 return;
239 }
240
241 FileEntry fileEntry = PortletFileRepositoryUtil.getPortletFileEntry(
242 classPK);
243
244 WikiPage page = WikiPageAttachmentsUtil.getPage(classPK);
245
246 WikiPageServiceUtil.restorePageAttachmentFromTrash(
247 page.getNodeId(), page.getTitle(), fileEntry.getTitle());
248
249 }
250
251 public void restoreTrashEntry(long userId, long classPK)
252 throws PortalException, SystemException {
253
254 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
255
256 WikiPageLocalServiceUtil.restorePageFromTrash(userId, page);
257 }
258
259 @Override
260 public void updateTitle(long classPK, String name)
261 throws PortalException, SystemException {
262
263 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
264
265 page.setTitle(name);
266
267 WikiPageLocalServiceUtil.updateWikiPage(page);
268
269 WikiPageResource pageResource =
270 WikiPageResourceLocalServiceUtil.getPageResource(
271 page.getResourcePrimKey());
272
273 pageResource.setTitle(name);
274
275 WikiPageResourceLocalServiceUtil.updateWikiPageResource(pageResource);
276 }
277
278 @Override
279 protected boolean hasPermission(
280 PermissionChecker permissionChecker, long classPK, String actionId)
281 throws PortalException, SystemException {
282
283 return WikiPagePermission.contains(
284 permissionChecker, classPK, actionId);
285 }
286
287 }