From c4236cec8e2f5f34d26fdb67450aee6ef81d2da9 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Fri, 26 Aug 2011 12:03:52 +0000 Subject: [PATCH] ALF-9923 Wiki webscript tweaks to ensure the correct 404 template is used, and tests for it git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@30090 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../alfresco/slingshot/wiki/page.delete.js | 62 ------------------ .../web-scripts-application-context.xml | 6 ++ .../scripts/wiki/AbstractWikiWebScript.java | 6 +- .../repo/web/scripts/wiki/WikiPageDelete.java | 63 +++++++++++++++++++ .../repo/web/scripts/wiki/WikiPageGet.java | 5 +- .../web/scripts/wiki/WikiRestApiTest.java | 13 +++- 6 files changed, 86 insertions(+), 69 deletions(-) delete mode 100644 config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/page.delete.js create mode 100644 source/java/org/alfresco/repo/web/scripts/wiki/WikiPageDelete.java diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/page.delete.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/page.delete.js deleted file mode 100644 index 8f35572459..0000000000 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/wiki/page.delete.js +++ /dev/null @@ -1,62 +0,0 @@ - -/** - * Deletes le page. - * - * @method DELETE - * @param uri {string} /slingshot/wiki/page/{siteid}/{pageTitle} - */ -deleteEvent(); - -function deleteEvent() -{ - var params = getTemplateArgs(["siteId", "pageTitle"]); - if (params === null) - { - status.setCode(status.STATUS_BAD_REQUEST, "Correct parameters not supplied."); - return ; - } - - var site = siteService.getSite(params.siteId); - if (site === null) - { - status.setCode(status.STATUS_NOT_FOUND, "Could not find site."); - return; - } - - var wiki = getWikiContainer(site); - if (wiki === null) - { - status.setCode(status.STATUS_NOT_FOUND, "Could not find wiki container."); - return; - } - - var page = wiki.childByNamePath(params.pageTitle); - if (page === null) - { - status.setCode(status.STATUS_NOT_FOUND, "Could not find specified page."); - return; - } - - var whatPage = page.name; - - if (!page.remove()) - { - status.setCode(status.STATUS_INTERNAL_SERVER_ERROR, "Failed to delete page"); - return; - } - else - { - // Log to page deletion to activity service - var data = - { - title: params.pageTitle.replace(/_/g, " "), - page: decodeURIComponent(args["page"]) - } - - activities.postActivity("org.alfresco.wiki.page-deleted", params.siteId, "wiki", jsonUtils.toJSONString(data)); - } - - // Success - status.setCode(status.STATUS_NO_CONTENT); // Nothing to do here yet - return; -} \ No newline at end of file diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index 1d0dd4cc99..a0f1aa7f2a 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -1546,6 +1546,12 @@ class="org.alfresco.repo.web.scripts.wiki.WikiPageGet" parent="abstractWikiWebScript"> + + + + . + */ +package org.alfresco.repo.web.scripts.wiki; + +import java.util.HashMap; +import java.util.Map; + +import org.alfresco.service.cmr.site.SiteInfo; +import org.alfresco.service.cmr.wiki.WikiPageInfo; +import org.json.JSONObject; +import org.springframework.extensions.webscripts.Cache; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptException; +import org.springframework.extensions.webscripts.WebScriptRequest; + +/** + * This class is the controller for the wiki page listing page.delete webscript. + * + * @author Nick Burch + * @since 4.0 + */ +public class WikiPageDelete extends AbstractWikiWebScript +{ + @Override + protected Map executeImpl(SiteInfo site, String pageName, + WebScriptRequest req, JSONObject json, Status status, Cache cache) { + Map model = new HashMap(); + + // Try to find the page + WikiPageInfo page = wikiService.getWikiPage(site.getShortName(), pageName); + if(page == null) + { + String message = "The Wiki Page could not be found"; + throw new WebScriptException(Status.STATUS_NOT_FOUND, message); + } + + // Have the page deleted + wikiService.deleteWikiPage(page); + + // Generate an activity for this + addActivityEntry("deleted", page, site, req, json); + + // Mark it as gone + status.setCode(Status.STATUS_NO_CONTENT); + return model; + } +} diff --git a/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageGet.java b/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageGet.java index 6b130a444d..3de9464f04 100644 --- a/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageGet.java +++ b/source/java/org/alfresco/repo/web/scripts/wiki/WikiPageGet.java @@ -59,6 +59,7 @@ public class WikiPageGet extends AbstractWikiWebScript String message = "The Wiki Page could not be found"; status.setCode(Status.STATUS_NOT_FOUND); status.setMessage(message); + status.setRedirect(true); // Grab the container, used in permissions checking NodeRef container = siteService.getContainer( @@ -68,9 +69,7 @@ public class WikiPageGet extends AbstractWikiWebScript model.put("error", message); // Bail out - Map result = new HashMap(); - result.put("result", model); - return result; + return model; } diff --git a/source/java/org/alfresco/repo/web/scripts/wiki/WikiRestApiTest.java b/source/java/org/alfresco/repo/web/scripts/wiki/WikiRestApiTest.java index d9443909ba..4465839a0f 100644 --- a/source/java/org/alfresco/repo/web/scripts/wiki/WikiRestApiTest.java +++ b/source/java/org/alfresco/repo/web/scripts/wiki/WikiRestApiTest.java @@ -228,6 +228,11 @@ public class WikiRestApiTest extends BaseWebScriptTest } return result; } + else if(expectedStatus == Status.STATUS_NOT_FOUND) + { + JSONObject result = new JSONObject(response.getContentAsString()); + return result; + } else { return null; @@ -372,7 +377,6 @@ public class WikiRestApiTest extends BaseWebScriptTest // Won't be there to start with page = getPage(PAGE_TITLE_ONE, Status.STATUS_NOT_FOUND); - // Create page = createOrUpdatePage(PAGE_TITLE_ONE, PAGE_CONTENTS_ONE, null, Status.STATUS_OK); name = PAGE_TITLE_ONE.replace(' ', '_'); @@ -450,6 +454,13 @@ public class WikiRestApiTest extends BaseWebScriptTest // Fetch, will have gone page = getPage(name, Status.STATUS_NOT_FOUND); + // On a page that isn't there, you do get permissions + assertEquals(true, page.has("permissions")); + permissions = page.getJSONObject("permissions"); + assertEquals(true, permissions.getBoolean("create")); + assertEquals(true, permissions.getBoolean("edit")); + assertEquals(false, permissions.has("delete")); // No delete for non existing page + // Can't delete again deletePage(name, Status.STATUS_NOT_FOUND);