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}"
+}
+#escape>
\ 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)>,#if>
-{"name": "${tag.name}", "count": "${tag.count}"}
- <#assign n=n+1>
-#list>
-]
-}
\ 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>,#if>
+ #list>]
+}
+#escape>
\ 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}
+}
+#escape>
\ 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>,#if>
#list>
-]
\ No newline at end of file
+]
+#escape>
\ 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}
+}
+#escape>
\ 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>,#if>
+ #list>
+ ]
+}
+#escape>
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>
<#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>
<#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>
<#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="">
#if>
@@ -86,6 +86,7 @@
"contentUrl": "api/node/content/${d.storeType}/${d.storeId}/${d.id}/${d.name?url}",
"actionSet": "${item.actionSet}",
"tags": <#noescape>[${tags}]#noescape>,
+ "categories": [<#list d.properties.categories![] as c>["${c.name}", "${c.displayPath?replace("/categories/General","")}"]<#if c_has_next>,#if>#list>],
"activeWorkflows": "<#list item.activeWorkflows as aw>${aw}<#if aw_has_next>,#if>#list>",
"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
{