diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagActions.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagActions.post.desc.xml index 9927a2cb60..836e8700d4 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagActions.post.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagActions.post.desc.xml @@ -2,7 +2,7 @@ Tagging Actions Add and remove tags to nodes /collaboration/tagActions - + argument user required diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagActions.post.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagActions.post.html.ftl deleted file mode 100644 index e2a6dff774..0000000000 --- a/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagActions.post.html.ftl +++ /dev/null @@ -1,5 +0,0 @@ -{ - "statusString":"${tagActions.resultString}", - "statusCode":${tagActions.resultCode?string}, - "newTag":"${tagActions.newTag?string}" -} \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagActions.post.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagActions.post.json.ftl new file mode 100644 index 0000000000..ff1785e8a2 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagActions.post.json.ftl @@ -0,0 +1,7 @@ +<#escape x as jsonUtils.encodeJSONString(x)> +{ + "statusString": "${tagActions.resultString}", + "statusCode": ${tagActions.resultCode?string}, + "newTag": "${tagActions.newTag?string}" +} + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.desc.xml index 11631c4af1..7573101272 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.desc.xml @@ -1,8 +1,17 @@ - Tagging Query - Query tag usage - /collaboration/tagQuery - - user - required + Tagging Query + + The following properties may be updated. +
+
nodeRef
nodeRef to anchor tag query from. Defaults to Company Home
+
maxResults
maximum number of results to return. Defaults to all results (limited by Lucene)
+
sortOrder
sort order for results. Possible values are: "name" (default), "count"
+
+ ]]>
+ /collaboration/tagQuery?n={nodeRef?}&m={maxResults?}&s={sortOrder?} + argument + user + required
diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.html.ftl deleted file mode 100644 index 986676c7c8..0000000000 --- a/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.html.ftl +++ /dev/null @@ -1,13 +0,0 @@ -{ -"countMin": "${tagQuery.countMin}", -"countMax": "${tagQuery.countMax}", -"tags": -<#assign n=0> -[ -<#list tagQuery.tags as tag> - <#if (n > 0)>, -{"name": "${tag.name}", "count": "${tag.count}"} - <#assign n=n+1> - -] -} \ No newline at end of file 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 991b0a4623..de83c07de0 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.js @@ -1,27 +1,39 @@ -model.tagQuery = tagQuery(args["n"], args["m"]); - -function tagQuery(nodeRef, maxResults) +function tagQuery() { - var tags = new Array(); - var countMin = Number.MAX_VALUE, + var nodeRef = args.n, + maxResults = args.m, + sortOrder = args.s, + tags = [], + countMin = Number.MAX_VALUE, countMax = 0; /* nodeRef input */ var node = null; - if ((nodeRef != null) && (nodeRef != "")) + if ((nodeRef !== null) && (nodeRef !== "")) { node = search.findNode(nodeRef); } - if (node == null) + if (node === null) { node = companyhome; } /* maxResults input */ - if ((maxResults == null) || (maxResults == "")) + if ((maxResults === null) || (maxResults === "")) { maxResults = -1; } + + /* sortOrder input */ + var validSortOrders = + { + "name": true, + "count": true + }; + if (!(sortOrder in validSortOrders)) + { + sortOrder = "name"; + } /* Query for tagged node(s) */ var query = "PATH:\"" + node.qnamePath; @@ -33,20 +45,21 @@ function tagQuery(nodeRef, maxResults) var taggedNodes = search.luceneSearch(query); - if (taggedNodes.length == 0) + if (taggedNodes.length === 0) { countMin = 0; } else { /* Build a hashtable of tags and tag count */ - var tagHash = {}; - var count; + var tagHash = {}, + count, taggedNode, tag, key; + for each (taggedNode in taggedNodes) { - for each(tag in taggedNode.properties["cm:taggable"]) + for each (tag in taggedNode.properties["cm:taggable"]) { - if (tag != null) + if (tag !== null) { count = tagHash[tag.name]; tagHash[tag.name] = count ? count+1 : 1; @@ -79,14 +92,17 @@ function tagQuery(nodeRef, maxResults) } /* Calculate the min and max tag count values */ - for each(tag in tags) + for each (tag in tags) { countMin = Math.min(countMin, tag.count); countMax = Math.max(countMax, tag.count); } - /* Sort the results by tag name (ascending) */ - tags.sort(); + if (sortOrder == "name") + { + /* Sort the results by tag name (ascending) */ + tags.sort(); + } } var results = @@ -102,3 +118,5 @@ function sortByCountDesc(a, b) { return (b.count - a.count); } + +model.tagQuery = tagQuery(); \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.json.ftl new file mode 100644 index 0000000000..6c946b00fa --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/tagQuery.get.json.ftl @@ -0,0 +1,10 @@ +<#escape x as jsonUtils.encodeJSONString(x)> +{ + "countMin": ${tagQuery.countMin?c}, + "countMax": ${tagQuery.countMax?c}, + "tags": + [<#list tagQuery.tags as tag> + { "name": "${tag.name}", "count": ${tag.count?c} }<#if tag_has_next>, + ] +} + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/office/docActions.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/office/docActions.get.desc.xml index a2aa0c797b..cd8b21ee5b 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/office/docActions.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/office/docActions.get.desc.xml @@ -2,6 +2,7 @@ Document Actions (Office Add-In) Used by the Office Add-In to perform actions on managed documents /office/docActions + argument user required \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/office/docActions.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/office/docActions.get.html.ftl deleted file mode 100644 index b63ff1d01b..0000000000 --- a/config/alfresco/templates/webscripts/org/alfresco/office/docActions.get.html.ftl +++ /dev/null @@ -1 +0,0 @@ -{"statusString":"${message(resultString)}","statusCode":${resultCode?string}} \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/office/docActions.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/office/docActions.get.json.ftl new file mode 100644 index 0000000000..824e0d1a2b --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/office/docActions.get.json.ftl @@ -0,0 +1,6 @@ +<#escape x as jsonUtils.encodeJSONString(x)> +{ + "statusString": "${message(resultString)}", + "statusCode": ${resultCode?string} +} + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/office/getUsers.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/office/getUsers.get.desc.xml index 9c77b25cc1..b77a30dbdf 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/office/getUsers.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/office/getUsers.get.desc.xml @@ -2,6 +2,7 @@ Get Users (Office Add-In) Used by the Office Add-In to query for users /office/getUsers?s={searchTerm} + argument user required \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/office/getUsers.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/office/getUsers.get.json.ftl similarity index 75% rename from config/alfresco/templates/webscripts/org/alfresco/office/getUsers.get.html.ftl rename to config/alfresco/templates/webscripts/org/alfresco/office/getUsers.get.json.ftl index c5e36ccb74..425c5cc771 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/office/getUsers.get.html.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/office/getUsers.get.json.ftl @@ -1,5 +1,7 @@ +<#escape x as jsonUtils.encodeJSONString(x)> [ <#list searchResults as result> "${"${result.properties.firstName} ${result.properties.lastName}"?trim} (${result.properties.userName})"<#if result_has_next>, -] \ No newline at end of file +] + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/forms/pickerchildren.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/forms/pickerchildren.get.js index f29d6f29cb..705880a9be 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/forms/pickerchildren.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/forms/pickerchildren.get.js @@ -73,9 +73,10 @@ function main() var searchResults = search.luceneSearch(query, "@{http://www.alfresco.org/model/content/1.0}name", true); // Ensure folders and folderlinks appear at the top of the list - var containerResults = new Array(); - var contentResults = new Array(); - for each(var result in searchResults) + var containerResults = new Array(), + contentResults = new Array(); + + for each (var result in searchResults) { if (result.isContainer || result.type == "{http://www.alfresco.org/model/application/1.0}folderlink") { @@ -104,8 +105,9 @@ function main() } else if (url.templateArgs.type == "category") { - var catAspect = (args["aspect"] != null) ? args["aspect"] : "cm:generalclassifiable"; - var nodeRef = url.templateArgs.store_type + "://" + url.templateArgs.store_id + "/" + url.templateArgs.id; + var catAspect = (args["aspect"] != null) ? args["aspect"] : "cm:generalclassifiable", + nodeRef = url.templateArgs.store_type + "://" + url.templateArgs.store_id + "/" + url.templateArgs.id; + // TODO: Better way of finding this var rootCategories = classification.getRootCategories(catAspect); if (rootCategories != null && rootCategories.length > 0) @@ -120,16 +122,18 @@ function main() { parent = search.findNode(nodeRef); categoryResults = parent.children; - } - - // make each result an object and indicate it is selectable in the UI - for each(var result in categoryResults) - { - results.push( - { - item: result, - selectable: true - }); + } + + categoryResults.sort(sortByName); + + // make each result an object and indicate it is selectable in the UI + for each (var result in categoryResults) + { + results.push( + { + item: result, + selectable: true + }); } } } @@ -166,4 +170,10 @@ function isItemSelectable(node, selectableType) return selectable; } +/* Sort the results by case-insensitive name */ +function sortByName(a, b) +{ + return (b.properties.name.toLowerCase() > a.properties.name.toLowerCase() ? -1 : 1); +} + main(); \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/requestutils.lib.js b/config/alfresco/templates/webscripts/org/alfresco/repository/requestutils.lib.js index 411d7966ec..3f8b1765ae 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/requestutils.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/requestutils.lib.js @@ -53,8 +53,26 @@ function findNodeInSite() function findFromReference() { - var nodeRef = url.templateArgs.store_type + "://" + url.templateArgs.store_id + "/" + url.templateArgs.id; - var node = search.findNode(nodeRef); + var nodeRef = url.templateArgs.store_type + "://" + url.templateArgs.store_id + "/" + url.templateArgs.id, + 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]; + } + else + { + node = search.findNode(nodeRef); + } + if (node === null) { status.setCode(status.STATUS_NOT_FOUND, "Node " + nodeRef + " does not exist"); diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/tagging/tag.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/tagging/tag.post.desc.xml new file mode 100644 index 0000000000..1b092509b6 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/tagging/tag.post.desc.xml @@ -0,0 +1,17 @@ + + Create new tag + + The following properties need be set in the POST body. +
+
name
Name of the tag to create. Note tags are created in lowercase.
+
+ ]]>
+ /api/tag/{store_type}/{store_id} + argument + user + required + draft_public_api + Tagging +
\ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/tagging/tag.post.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/tagging/tag.post.json.ftl new file mode 100644 index 0000000000..fc6987d316 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/tagging/tag.post.json.ftl @@ -0,0 +1,7 @@ +<#escape x as jsonUtils.encodeJSONString(x)> +{ + "name": "${tag.name}", + "nodeRef": "${tag.nodeRef}", + "itemExists": ${tagExists?string} +} + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/tagging/tag.post.json.js b/config/alfresco/templates/webscripts/org/alfresco/repository/tagging/tag.post.json.js new file mode 100644 index 0000000000..10f6e6fd26 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/tagging/tag.post.json.js @@ -0,0 +1,33 @@ +function main() +{ + // Get the store reference + var store = url.templateArgs.store_type + "://" + url.templateArgs.store_id; + + // Get the details of the tag + if (json.has("name") == false || json.get("name").length == 0) + { + status.setCode(status.STATUS_BAD_REQUEST, "Name missing when creating tag"); + return; + } + var tagName = json.get("name"); + + // See if the tag already exists + var tag = taggingService.getTag(store, tagName), + tagExists = (tag != null); + + if (!tagExists) + { + tag = taggingService.createTag(store, tagName); + if (tag == null) + { + status.setCode(status.STATUS_INTERNAL_SERVER_ERROR, "error.cannotCreateTag"); + return; + } + } + + // Put the created tag into the model + model.tag = tag; + model.tagExists = tagExists; +} + +main(); \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/categorynode.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/categorynode.get.desc.xml new file mode 100644 index 0000000000..64830d273a --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/categorynode.get.desc.xml @@ -0,0 +1,9 @@ + + category node + Document List Component - category node data webscript + /slingshot/doclib/categorynode/node/{store_type}/{store_id}/{id}/{path} + /slingshot/doclib/categorynode/node/{store_type}/{store_id}/{id} + argument + user + required + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/categorynode.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/categorynode.get.html.ftl new file mode 100644 index 0000000000..b8bb640289 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/categorynode.get.html.ftl @@ -0,0 +1 @@ +<#include "categorynode.get.json.ftl"> \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/categorynode.get.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/categorynode.get.js new file mode 100644 index 0000000000..09f55eeffa --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/categorynode.get.js @@ -0,0 +1,79 @@ +/** + * Document List Component: category node + */ +model.categorynode = getCategoryNode(); + +/* Create collection of categories for the given path */ +function getCategoryNode() +{ + try + { + var items = new Array(), + hasSubfolders = true, + evalChildFolders = args["children"] !== "false"; + + var catAspect = (args["aspect"] != null) ? args["aspect"] : "cm:generalclassifiable", + nodeRef = url.templateArgs.store_type + "://" + url.templateArgs.store_id + "/" + url.templateArgs.id, + path = url.templateArgs.path, + rootCategories = classification.getRootCategories(catAspect), + rootNode, parent, categoryResults; + + if (rootCategories != null && rootCategories.length > 0) + { + rootNode = rootCategories[0].parent; + if (path == null) + { + categoryResults = classification.getRootCategories(catAspect); + } + else + { + var queryPath = "/" + catAspect + "/" + encodePath(path); + categoryResults = search.luceneSearch("+PATH:\"" + queryPath + "/*\" -PATH:\"" + queryPath + "/member\""); + } + + // make each result an object and indicate it is selectable in the UI + for each (item in categoryResults) + { + if (evalChildFolders) + { + hasSubfolders = item.children.length > 0; + } + + items.push( + { + node: item, + hasSubfolders: hasSubfolders + }); + } + } + + items.sort(sortByName); + + return ( + { + "items": items + }); + } + catch(e) + { + status.setCode(status.STATUS_INTERNAL_SERVER_ERROR, e.toString()); + return; + } +} + +/* Get the path as an ISO9075 encoded path */ +function encodePath(path) +{ + var parts = path.split("/"); + for (var i = 0, ii = parts.length; i < ii; i++) + { + parts[i] = "cm:" + search.ISO9075Encode(parts[i]); + } + return parts.join("/"); +} + +/* Sort the results by case-insensitive name */ +function sortByName(a, b) +{ + return (b.node.name.toLowerCase() > a.node.name.toLowerCase() ? -1 : 1); +} \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/categorynode.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/categorynode.get.json.ftl new file mode 100644 index 0000000000..6a802d4d9b --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/categorynode.get.json.ftl @@ -0,0 +1,23 @@ +<#escape x as jsonUtils.encodeJSONString(x)> +{ + "totalResults": ${categorynode.items?size?c}, + "items": + [ + <#list categorynode.items as item> + <#assign c = item.node> + { + "nodeRef": "${c.nodeRef}", + "name": "${c.name}", + "description": "${(c.properties.description!"")}", + "hasChildren": ${item.hasSubfolders?string}, + "userAccess": + { + "create": ${c.hasPermission("CreateChildren")?string}, + "edit": ${c.hasPermission("Write")?string}, + "delete": ${c.hasPermission("Delete")?string} + } + }<#if item_has_next>, + + ] +} + diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/doclist.get.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/doclist.get.js index d8d9d35bab..e4a85918da 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/doclist.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/doclist.get.js @@ -3,7 +3,8 @@ const THUMBNAIL_NAME = "doclib", - PREF_FAVOURITES = "org.alfresco.share.documents.favourites"; + PREF_DOCUMENT_FAVOURITES = "org.alfresco.share.documents.favourites"; + PREF_FOLDER_FAVOURITES = "org.alfresco.share.folders.favourites"; var PeopleCache = {}, SiteCache = {}; @@ -17,27 +18,30 @@ function getPerson(username) { if (typeof PeopleCache[username] == "undefined") { - PeopleCache[username] = people.getPerson(username); + var person = people.getPerson(username); + if (person == null && username == "System") + { + person = + { + properties: + { + userName: "System", + firstName: "System", + lastName: "User" + } + } + } + PeopleCache[username] = + { + userName: person.properties.userName, + firstName: person.properties.firstName, + lastName: person.properties.lastName, + displayName: (person.properties.firstName + " " + person.properties.lastName).replace(/^\s+|\s+$/g, "") + }; } return PeopleCache[username]; } -/** - * Gets a person's full name - * @method getPersonName - * @param username {string} User name - */ -function getPersonName(username) -{ - var user = getPerson(username); - if (user) - { - // Return trimmed full name - return (user.properties.firstName + " " + user.properties.lastName).replace(/^\s+|\s+$/g, ""); - } - return username; -} - /** * Gets / caches a site object * @method getSite @@ -79,22 +83,37 @@ function main() } // Get the user's favourite docs from our slightly eccentric Preferences Service - var prefs = preferenceService.getPreferences(person.properties.userName, PREF_FAVOURITES), - favourites = {}; + var prefs = preferenceService.getPreferences(person.properties.userName, PREF_DOCUMENT_FAVOURITES), + favourites = {}, + strFavs, f, ff; try { /** * Fasten seatbelts... * An "eval" could be used here, but the Rhino debugger will complain if throws an exception, which gets old very quickly. - * e.g. var strFavs = eval('try{(prefs.' + PREF_FAVOURITES + ')}catch(e){}'); + * e.g. var strFavs = eval('try{(prefs.' + PREF_DOCUMENT_FAVOURITES + ')}catch(e){}'); */ if (prefs && prefs.org && prefs.org.alfresco && prefs.org.alfresco.share && prefs.org.alfresco.share.documents) { - var strFavs = prefs.org.alfresco.share.documents.favourites; + strFavs = prefs.org.alfresco.share.documents.favourites; if (typeof strFavs == "string") { arrFavs = strFavs.split(","); - for (var f = 0, ff = arrFavs.length; f < ff; f++) + for (f = 0, ff = arrFavs.length; f < ff; f++) + { + favourites[arrFavs[f]] = true; + } + } + } + // Same thing but for folders + prefs = preferenceService.getPreferences(person.properties.userName, PREF_FOLDER_FAVOURITES); + if (prefs && prefs.org && prefs.org.alfresco && prefs.org.alfresco.share && prefs.org.alfresco.share.folders) + { + strFavs = prefs.org.alfresco.share.folders.favourites; + if (typeof strFavs == "string") + { + arrFavs = strFavs.split(","); + for (f = 0, ff = arrFavs.length; f < ff; f++) { favourites[arrFavs[f]] = true; } @@ -241,7 +260,7 @@ function main() site: null, siteTitle: null, container: null, - path: null, + path: "/" + displayPaths.slice(2, displayPaths.length).join("/"), file: locationAsset.name }; } diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/doclist.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/doclist.get.json.ftl index 8b852ecc06..0f68e7726b 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/doclist.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/doclist.get.json.ftl @@ -41,20 +41,20 @@ <#assign version = "1.0"> <#if d.hasAspect("cm:versionable") && d.versionHistory?size != 0><#assign version = d.versionHistory[0].versionLabel> <#if item.createdBy??> - <#assign createdBy = ((item.createdBy.properties.firstName!"") + " " + (item.createdBy.properties.lastName!""))?trim> - <#assign createdByUser = item.createdBy.properties.userName> + <#assign createdBy = item.createdBy.displayName> + <#assign createdByUser = item.createdBy.userName> <#else> <#assign createdBy="" createdByUser=""> <#if item.modifiedBy??> - <#assign modifiedBy = ((item.modifiedBy.properties.firstName!"") + " " + (item.modifiedBy.properties.lastName!""))?trim> - <#assign modifiedByUser = item.modifiedBy.properties.userName> + <#assign modifiedBy = item.modifiedBy.displayName> + <#assign modifiedByUser = item.modifiedBy.userName> <#else> <#assign modifiedBy="" modifiedByUser=""> <#if item.lockedBy??> - <#assign lockedBy = ((item.lockedBy.properties.firstName!"") + " " + (item.lockedBy.properties.lastName!""))?trim> - <#assign lockedByUser = item.lockedBy.properties.userName> + <#assign lockedBy = item.lockedBy.displayName> + <#assign lockedByUser = item.lockedBy.userName> <#else> <#assign lockedBy="" lockedByUser=""> @@ -86,6 +86,7 @@ "contentUrl": "api/node/content/${d.storeType}/${d.storeId}/${d.id}/${d.name?url}", "actionSet": "${item.actionSet}", "tags": <#noescape>[${tags}], + "categories": [<#list d.properties.categories![] as c>["${c.name}", "${c.displayPath?replace("/categories/General","")}"]<#if c_has_next>,], "activeWorkflows": "<#list item.activeWorkflows as aw>${aw}<#if aw_has_next>,", "isFavourite": ${item.isFavourite?string}, "location": diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/evaluator.lib.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/evaluator.lib.js index ae7707c56e..f27a672031 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/evaluator.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/evaluator.lib.js @@ -93,7 +93,7 @@ var Evaluator = if (asset.hasAspect("cm:workingcopy")) { lockedBy = getPerson(asset.properties["cm:workingCopyOwner"]); - lockOwnerUser = lockedBy.properties.userName; + lockOwnerUser = lockedBy.userName; if (lockOwnerUser == person.properties.userName) { status["editing"] = true; @@ -101,7 +101,7 @@ var Evaluator = } else { - status["locked " + getPersonName(lockOwnerUser) + "|" + lockedBy.properties.userName] = true; + status["locked " + lockedBy.displayName + "|" + lockedBy.userName] = true; actionSet = "locked"; } var wcNode = asset.properties["source"]; @@ -117,7 +117,7 @@ var Evaluator = else if (asset.isLocked) { lockedBy = getPerson(asset.properties["cm:lockOwner"]); - lockOwnerUser = lockedBy.properties.userName; + lockOwnerUser = lockedBy.userName; if (lockOwnerUser == person.properties.userName) { status["lock-owner"] = true; @@ -125,7 +125,7 @@ var Evaluator = } else { - status["locked " + getPersonName(lockOwnerUser) + "|" + lockedBy.properties.userName] = true; + status["locked " + lockedBy.displayName + "|" + lockedBy.userName] = true; actionSet = "locked"; } var srcNodes = search.query( diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/filters.lib.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/filters.lib.js index 021e494853..517b78dae5 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/filters.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/filters.lib.js @@ -7,6 +7,17 @@ var Filters = "images": "-TYPE:\"{http://www.alfresco.org/model/content/1.0}thumbnail\" +@cm\\:content.mimetype:image/*" }, + /* Encode a path with ISO9075 encoding */ + iso9075EncodePath: function Filter_iso9075EncodePath(path) + { + var parts = path.split("/"); + for (var i = 1, ii = parts.length; i < ii; i++) + { + parts[i] = "cm:" + search.ISO9075Encode(parts[i]); + } + return parts.join("/"); + }, + getFilterParams: function Filter_getFilterParams(filter, parsedArgs, optional) { var filterParams = @@ -43,7 +54,7 @@ var Filters = filterQuery = ""; // Common types and aspects to filter from the UI - filterQueryDefaults = + var filterQueryDefaults = " -TYPE:\"{http://www.alfresco.org/model/content/1.0}thumbnail\"" + " -TYPE:\"{http://www.alfresco.org/model/content/1.0}systemfolder\"" + " -TYPE:\"{http://www.alfresco.org/model/forum/1.0}forums\"" + @@ -123,7 +134,7 @@ var Filters = filterParams.query = filterQuery; break; - case "favouriteDocuments": + case "favourites": var foundOne = false; for (var favourite in favourites) @@ -147,6 +158,10 @@ var Filters = filterParams.query = "+PATH:\"" + parsedArgs.rootNode.qnamePath + "//*\" +PATH:\"/cm:taggable/cm:" + search.ISO9075Encode(filterData) + "/member\""; break; + case "category": + filterParams.query = "+PATH:\"/cm:generalclassifiable" + Filters.iso9075EncodePath(filterData) + "/member\""; + break; + default: filterParams.variablePath = false; filterQuery = "+PATH:\"" + parsedArgs.parentNode.qnamePath + "/*\""; 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 617c599210..1c2275af1a 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 @@ -59,7 +59,7 @@ var ParseArgs = var storeType = url.templateArgs.store_type, storeId = url.templateArgs.store_id, id = url.templateArgs.id, - type = "node"; + type = url.templateArgs.type; nodeRef = storeType + "://" + storeId + "/" + id; @@ -77,6 +77,7 @@ var ParseArgs = } else { + type = "node" rootNode = search.findNode(nodeRef); if (rootNode === null) { @@ -183,6 +184,10 @@ var ParseArgs = }; } } + else + { + location.path = "/" + displayPaths.slice(2, displayPaths.length).join("/"); + } var objRet = { diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/treenode.get.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/treenode.get.js index 717808bc4c..bc95d6fa52 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/treenode.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/treenode.get.js @@ -3,10 +3,10 @@ /** * Document List Component: treenode */ -model.treenode = getTreenode(); +model.treenode = getTreeNode(); /* Create collection of folders in the given space */ -function getTreenode(siteId, path) +function getTreeNode() { try {