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