diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.js b/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.js index 94d72475fc..8e706f9148 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.js @@ -1,17 +1,17 @@ function tagQuery() { - var nodeRef = args.n, + var rootNode = args.n, maxResults = args.m, sortOrder = args.s, tags = [], countMin = Number.MAX_VALUE, countMax = 0; - /* nodeRef input */ + /* rootNode input */ var node = null; - if ((nodeRef !== null) && (nodeRef !== "")) + if ((rootNode !== null) && (rootNode !== "")) { - node = resolveVirtualNodeRef(nodeRef) || search.findNode(nodeRef); + node = resolveVirtualNodeRef(rootNode) || resolveXPath(rootNode) || search.findNode(rootNode); } if (node === null) { @@ -144,4 +144,25 @@ function resolveVirtualNodeRef(nodeRef) return node; } +/** + * Resolve xpath location + * + * @method resolveXPath + * @param xpath {string} xpath expression + * @return {ScriptNode|null} First node corresponding to supplied xpath expression. Results null if xpath doesn't resolve. + */ +function resolveXPath(xpath) +{ + var node = null; + try + { + node = companyhome.childrenByXPath(xpath)[0]; + } + catch(e) + { + return null; + } + return node; +} + model.tagQuery = tagQuery(); \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/datalists/action/action.lib.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/datalists/action/action.lib.js index ee645fbd38..ba2c9e2e1c 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/datalists/action/action.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/datalists/action/action.lib.js @@ -1,3 +1,5 @@ + + /** * Copyright (C) 2005-2010 Alfresco Software Limited. * @@ -47,7 +49,7 @@ function main() id = url.templateArgs.id; nodeRef = storeType + "://" + storeId + "/" + id; - rootNode = resolveVirtualNodeRef(nodeRef); + rootNode = ParseArgs.resolveNode(nodeRef); if (rootNode == null) { rootNode = search.findNode(nodeRef); @@ -119,31 +121,6 @@ function main() } } -/** - * Resolve "virtual" nodeRefs into nodes - * - * @method resolveVirtualNodeRef - * @param virtualNodeRef {string} nodeRef - * @return {ScriptNode|null} Node corresponding to supplied virtual nodeRef. Returns null if supplied nodeRef isn't a "virtual" type - */ -function resolveVirtualNodeRef(nodeRef) -{ - var node = null; - if (nodeRef == "alfresco://company/home") - { - node = companyhome; - } - else if (nodeRef == "alfresco://user/home") - { - node = userhome; - } - else if (nodeRef == "alfresco://sites/home") - { - node = companyhome.childrenByXPath("st:sites")[0]; - } - return node; -} - /** * Get multiple input values * diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/datalists/parse-args.lib.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/datalists/parse-args.lib.js index 1ff0706eca..e80072cea5 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/datalists/parse-args.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/datalists/parse-args.lib.js @@ -112,7 +112,7 @@ var ParseArgs = id = url.templateArgs.id; nodeRef = storeType + "://" + storeId + "/" + id; - rootNode = ParseArgs.resolveVirtualNodeRef(nodeRef); + rootNode = ParseArgs.resolveNode(nodeRef); if (rootNode == null) { rootNode = search.findNode(nodeRef); @@ -203,23 +203,53 @@ var ParseArgs = * Resolve "virtual" nodeRefs into nodes * * @method resolveVirtualNodeRef - * @param virtualNodeRef {string} nodeRef - * @return {ScriptNode|null} Node corresponding to supplied virtual nodeRef. Returns null if supplied nodeRef isn't a "virtual" type + * @deprecated for ParseArgs.resolveNode */ resolveVirtualNodeRef: function ParseArgs_resolveVirtualNodeRef(nodeRef) + { + if (logger.isLoggingEnabled()) + { + logger.log("WARNING: ParseArgs.resolveVirtualNodeRef is deprecated for ParseArgs.resolveNode"); + } + return ParseArgs.resolveNode(nodeRef); + }, + + /** + * Resolve "virtual" nodeRefs, nodeRefs and xpath expressions into nodes + * + * @method resolveNode + * @param reference {string} "virtual" nodeRef, nodeRef or xpath expressions + * @return {ScriptNode|null} Node corresponding to supplied expression. Returns null if node cannot be resolved. + */ + resolveNode: function ParseArgs_resolveNode(reference) { var node = null; - if (nodeRef == "alfresco://company/home") + try { - node = companyhome; + if (reference == "alfresco://company/home") + { + node = companyhome; + } + else if (reference == "alfresco://user/home") + { + node = userhome; + } + else if (reference == "alfresco://sites/home") + { + node = companyhome.childrenByXPath("st:sites")[0]; + } + else if (reference.indexOf("://") > 0) + { + node = search.findNode(reference); + } + else if (reference.substring(0, 1) == "/") + { + node = search.xpathSearch(reference)[0]; + } } - else if (nodeRef == "alfresco://user/home") + catch (e) { - node = userhome; - } - else if (nodeRef == "alfresco://sites/home") - { - node = companyhome.childrenByXPath("st:sites")[0]; + return null; } return node; } diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/action.lib.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/action.lib.js index 8fb6a9d649..aeb777d3b5 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/action.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/action.lib.js @@ -1,3 +1,5 @@ + + /** * Document List Component: action * @@ -225,24 +227,11 @@ function getNodeRefInputParams() id = url.templateArgs.id; var nodeRef = storeType + "://" + storeId + "/" + id, - rootNode = null; + rootNode = ParseArgs.resolveNode(nodeRef); - if (nodeRef == "alfresco://company/home") + if (rootNode === null) { - rootNode = companyhome; - } - else if (nodeRef == "alfresco://user/home") - { - rootNode = userhome; - } - else - { - rootNode = search.findNode(nodeRef); - - if (rootNode === null) - { - return "'" + nodeRef + "' is not a valid nodeRef."; - } + return "'" + nodeRef + "' is not a valid nodeRef."; } // Populate the return object diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/node.get.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/node.get.js index 6d92dc09f5..5bcb73a3d3 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/node.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/node.get.js @@ -15,12 +15,15 @@ function getDoclist() { return; } + + parsedArgs.pathNode = ParseArgs.resolveNode(parsedArgs.nodeRef); + parsedArgs.location = Common.getLocation(parsedArgs.pathNode, parsedArgs.libraryRoot); var filter = args.filter, items = []; var favourites = Common.getFavourites(), - node = parsedArgs.rootNode, + node = parsedArgs.pathNode, parent = { node: node.parent, diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/parse-args.lib.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/parse-args.lib.js index 3514405243..30afcc7ec6 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/parse-args.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/parse-args.lib.js @@ -274,6 +274,12 @@ var ParseArgs = nodeRef = null, path = ""; + // Is this library rooted from a non-site nodeRef? + if (libraryRoot !== null) + { + libraryRoot = ParseArgs.resolveNode(libraryRoot); + } + if (url.templateArgs.store_type !== null) { /** @@ -284,15 +290,11 @@ var ParseArgs = id = url.templateArgs.id; nodeRef = storeType + "://" + storeId + "/" + id; - rootNode = ParseArgs.resolveVirtualNodeRef(nodeRef); + rootNode = libraryRoot || ParseArgs.resolveNode(nodeRef); if (rootNode == null) { - rootNode = search.findNode(nodeRef); - if (rootNode === null) - { - status.setCode(status.STATUS_NOT_FOUND, "Not a valid nodeRef: '" + nodeRef + "'"); - return null; - } + status.setCode(status.STATUS_NOT_FOUND, "Not a valid nodeRef: '" + nodeRef + "'"); + return null; } // Special case: make sure filter picks up correct mode @@ -345,19 +347,13 @@ var ParseArgs = // Path input? path = url.templateArgs.path || ""; - pathNode = path.length > 0 ? rootNode.childByNamePath(path) : rootNode; + pathNode = path.length > 0 ? rootNode.childByNamePath(path) : (pathNode || rootNode); if (pathNode === null) { status.setCode(status.STATUS_NOT_FOUND, "Path not found: '" + path + "'"); return null; } - // Is this library rooted from a non-site nodeRef? - if (libraryRoot !== null) - { - libraryRoot = ParseArgs.resolveVirtualNodeRef(libraryRoot) || search.findNode(libraryRoot); - } - var objRet = { rootNode: rootNode, @@ -383,23 +379,53 @@ var ParseArgs = * Resolve "virtual" nodeRefs into nodes * * @method resolveVirtualNodeRef - * @param virtualNodeRef {string} nodeRef - * @return {ScriptNode|null} Node corresponding to supplied virtual nodeRef. Returns null if supplied nodeRef isn't a "virtual" type + * @deprecated for ParseArgs.resolveNode */ resolveVirtualNodeRef: function ParseArgs_resolveVirtualNodeRef(nodeRef) + { + if (logger.isLoggingEnabled()) + { + logger.log("WARNING: ParseArgs.resolveVirtualNodeRef is deprecated for ParseArgs.resolveNode"); + } + return ParseArgs.resolveNode(nodeRef); + }, + + /** + * Resolve "virtual" nodeRefs, nodeRefs and xpath expressions into nodes + * + * @method resolveNode + * @param reference {string} "virtual" nodeRef, nodeRef or xpath expressions + * @return {ScriptNode|null} Node corresponding to supplied expression. Returns null if node cannot be resolved. + */ + resolveNode: function ParseArgs_resolveNode(reference) { var node = null; - if (nodeRef == "alfresco://company/home") + try { - node = companyhome; + if (reference == "alfresco://company/home") + { + node = companyhome; + } + else if (reference == "alfresco://user/home") + { + node = userhome; + } + else if (reference == "alfresco://sites/home") + { + node = companyhome.childrenByXPath("st:sites")[0]; + } + else if (reference.indexOf("://") > 0) + { + node = search.findNode(reference); + } + else if (reference.substring(0, 1) == "/") + { + node = search.xpathSearch(reference)[0]; + } } - else if (nodeRef == "alfresco://user/home") + catch (e) { - node = userhome; - } - else if (nodeRef == "alfresco://sites/home") - { - node = companyhome.childrenByXPath("st:sites")[0]; + return null; } return node; }, diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/permissions.get.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/permissions.get.js index a611413bac..b22e70b32c 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/permissions.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/permissions.get.js @@ -14,7 +14,7 @@ function getPermissions() storeId = url.templateArgs.store_id, id = url.templateArgs.id, nodeRef = storeType + "://" + storeId + "/" + id, - node = ParseArgs.resolveVirtualNodeRef(nodeRef); + node = ParseArgs.resolveNode(nodeRef); if (node == null) { diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/permissions.post.json.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/permissions.post.json.js index bf0d67f9ad..3d0054320d 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/permissions.post.json.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/permissions.post.json.js @@ -15,7 +15,7 @@ function main() storeId = url.templateArgs.store_id, id = url.templateArgs.id, nodeRef = storeType + "://" + storeId + "/" + id, - node = ParseArgs.resolveVirtualNodeRef(nodeRef); + node = ParseArgs.resolveNode(nodeRef); if (node == null) {