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