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.kernel.util.StringPool;
023 import com.liferay.portal.kernel.util.StringUtil;
024 import com.liferay.portal.kernel.util.Validator;
025 import com.liferay.portal.model.CompanyConstants;
026 import com.liferay.portal.model.Group;
027 import com.liferay.portal.model.LayoutConstants;
028 import com.liferay.portal.security.permission.PermissionChecker;
029 import com.liferay.portal.util.PortalUtil;
030 import com.liferay.portal.util.PortletKeys;
031 import com.liferay.portlet.PortletURLFactoryUtil;
032 import com.liferay.portlet.documentlibrary.NoSuchDirectoryException;
033 import com.liferay.portlet.documentlibrary.store.DLStoreUtil;
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.trash.util.TrashUtil;
038 import com.liferay.portlet.wiki.asset.WikiPageAssetRenderer;
039 import com.liferay.portlet.wiki.model.WikiPage;
040 import com.liferay.portlet.wiki.model.WikiPageConstants;
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.WikiPagePermission;
046
047 import java.util.Date;
048
049 import javax.portlet.PortletRequest;
050 import javax.portlet.PortletURL;
051
052
057 public class WikiPageTrashHandler extends BaseTrashHandler {
058
059 public static final String CLASS_NAME = WikiPage.class.getName();
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 restoredTitle = page.getTitle();
074
075 if (Validator.isNotNull(newName)) {
076 restoredTitle = newName;
077 }
078
079 String originalTitle = TrashUtil.stripTrashNamespace(restoredTitle);
080
081 WikiPage duplicatePage = WikiPageLocalServiceUtil.fetchPage(
082 containerModelId, originalTitle, page.getVersion());
083
084 if (duplicatePage != null) {
085 DuplicateEntryException dee = new DuplicateEntryException();
086
087 dee.setDuplicateEntryId(duplicatePage.getPageId());
088 dee.setOldName(duplicatePage.getTitle());
089 dee.setTrashEntryId(trashEntry.getEntryId());
090
091 throw dee;
092 }
093 }
094
095 @Override
096 public void deleteTrashAttachments(Group group, Date date)
097 throws PortalException, SystemException {
098
099 long repositoryId = CompanyConstants.SYSTEM;
100
101 String[] fileNames = null;
102
103 try {
104 fileNames = DLStoreUtil.getFileNames(
105 group.getCompanyId(), repositoryId, "wiki");
106 }
107 catch (NoSuchDirectoryException nsde) {
108 return;
109 }
110
111 for (String fileName : fileNames) {
112 String fileTitle = StringUtil.extractLast(
113 fileName, StringPool.FORWARD_SLASH);
114
115 if (fileTitle.startsWith(TrashUtil.TRASH_ATTACHMENTS_DIR)) {
116 String[] attachmentFileNames = DLStoreUtil.getFileNames(
117 group.getCompanyId(), repositoryId,
118 WikiPageConstants.BASE_ATTACHMENTS_DIR + fileTitle);
119
120 TrashUtil.deleteEntriesAttachments(
121 group.getCompanyId(), repositoryId, date,
122 attachmentFileNames);
123 }
124 }
125 }
126
127 public void deleteTrashEntries(long[] classPKs, boolean checkPermission)
128 throws PortalException, SystemException {
129
130 for (long classPK : classPKs) {
131 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
132
133 if (checkPermission) {
134 WikiPageServiceUtil.deletePage(
135 page.getNodeId(), page.getTitle());
136 }
137 else {
138 WikiPageLocalServiceUtil.deletePage(
139 page.getNodeId(), page.getTitle());
140 }
141 }
142 }
143
144 public String getClassName() {
145 return CLASS_NAME;
146 }
147
148 @Override
149 public String getRestoreLink(PortletRequest portletRequest, long classPK)
150 throws PortalException, SystemException {
151
152 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
153
154 long plid = PortalUtil.getPlidFromPortletId(
155 page.getGroupId(), PortletKeys.WIKI);
156
157 if (plid == LayoutConstants.DEFAULT_PLID) {
158 plid = PortalUtil.getControlPanelPlid(portletRequest);
159 }
160
161 PortletURL portletURL = PortletURLFactoryUtil.create(
162 portletRequest, PortletKeys.WIKI, plid,
163 PortletRequest.RENDER_PHASE);
164
165 portletURL.setParameter("struts_action", "/wiki/view");
166 portletURL.setParameter("nodeName", page.getNode().getName());
167 portletURL.setParameter("title", HtmlUtil.unescape(page.getTitle()));
168
169 return portletURL.toString();
170 }
171
172 @Override
173 public String getRestoreMessage(PortletRequest portletRequest, long classPK)
174 throws PortalException, SystemException {
175
176 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
177
178 return page.getTitle();
179 }
180
181 @Override
182 public TrashRenderer getTrashRenderer(long classPK)
183 throws PortalException, SystemException {
184
185 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
186
187 return new WikiPageAssetRenderer(page);
188 }
189
190 public boolean isInTrash(long classPK)
191 throws PortalException, SystemException {
192
193 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
194
195 if (page.isInTrash() || page.isInTrashFolder()) {
196 return true;
197 }
198
199 return false;
200 }
201
202 public void restoreTrashEntries(long[] classPKs)
203 throws PortalException, SystemException {
204
205 for (long classPK : classPKs) {
206 WikiPageServiceUtil.restorePageFromTrash(classPK);
207 }
208 }
209
210 @Override
211 public void updateTitle(long classPK, String name)
212 throws PortalException, SystemException {
213
214 WikiPage page = WikiPageLocalServiceUtil.getPage(classPK);
215
216 page.setTitle(name);
217
218 WikiPageLocalServiceUtil.updateWikiPage(page);
219
220 WikiPageResource pageResource =
221 WikiPageResourceLocalServiceUtil.getPageResource(
222 page.getResourcePrimKey());
223
224 pageResource.setTitle(name);
225
226 WikiPageResourceLocalServiceUtil.updateWikiPageResource(pageResource);
227 }
228
229 @Override
230 protected boolean hasPermission(
231 PermissionChecker permissionChecker, long classPK, String actionId)
232 throws PortalException, SystemException {
233
234 return WikiPagePermission.contains(
235 permissionChecker, classPK, actionId);
236 }
237
238 }