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 5a688a0e9f..8a60789502 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
@@ -19,7 +19,15 @@ main();
function main()
{
// Params object contains commonly-used arguments
- var params = getInputParams();
+ var params;
+ if (url.templateArgs.storetype != undefined)
+ {
+ params = getNodeRefInputParams();
+ }
+ else
+ {
+ params = getSiteInputParams();
+ }
if (typeof params == "string")
{
status.setCode(status.STATUS_BAD_REQUEST, params);
@@ -68,12 +76,12 @@ function main()
/**
- * Get and check existence of mandatory input parameter
+ * Get and check existence of mandatory input parameters (Site-based)
*
- * @method getInputParams
+ * @method getSiteInputParams
* @return {object|string} object literal containing parameters value or string error
*/
-function getInputParams()
+function getSiteInputParams()
{
var params = {};
var error = null;
@@ -140,7 +148,68 @@ function getInputParams()
{
containerId: containerId,
siteId: siteId,
- filePath: filePath
+ filePath: filePath,
+ usingNodeRef: false
+ }
+ }
+ catch(e)
+ {
+ error = e.toString();
+ }
+
+ // Return the params object, or the error string if it was set
+ return (error !== null ? error : params);
+}
+
+/**
+ * Get and check existence of mandatory input parameters (nodeRef-based)
+ *
+ * @method getNodeRefInputParams
+ * @return {object|string} object literal containing parameters value or string error
+ */
+function getNodeRefInputParams()
+{
+ var params = {};
+ var error = null;
+
+ try
+ {
+ // First try to get the parameters from the URI
+ var storeType = url.templateArgs.storetype;
+ var storeId = url.templateArgs.storeid;
+ var id = url.templateArgs.id;
+
+ // Was a JSON parameter list supplied?
+ // TODO: Also handle multiple files
+ if (typeof json == "object")
+ {
+ if (!json.isNull("storetype"))
+ {
+ storeType = json.get("storetype");
+ }
+ if (!json.isNull("storeid"))
+ {
+ storeId = json.get("storeid");
+ }
+ if (!json.isNull("id"))
+ {
+ id = json.get("id");
+ }
+ }
+
+ var nodeRef = storeType + "://" + storeId + "/" + id;
+ var node = search.findNode(nodeRef);
+
+ if (node === null)
+ {
+ return "'" + nodeRef + "' is not valid.";
+ }
+
+ // Populate the return object
+ params =
+ {
+ nodeRef: nodeRef,
+ usingNodeRef: true
}
}
catch(e)
@@ -164,6 +233,11 @@ function getRootNode(p_params)
var rootNode = null;
var error = null;
+ if (p_params.usingNodeRef)
+ {
+ return search.findNode(p_params.nodeRef);
+ }
+
try
{
// Find the site
@@ -205,7 +279,7 @@ function getAssetNode(p_rootNode, p_assetPath)
try
{
- if (p_assetPath.length > 0)
+ if (p_assetPath && (p_assetPath.length > 0))
{
assetNode = assetNode.childByNamePath(p_assetPath);
}
diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/cancel-checkout.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/cancel-checkout.post.desc.xml
new file mode 100644
index 0000000000..ff1062ad6a
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/cancel-checkout.post.desc.xml
@@ -0,0 +1,9 @@
+
+ cancel-checkout
+ Document List Action - Cancel check-out for file
+ /slingshot/doclib/action/cancel-checkout/site/{siteid}/{containerId}/{filepath}
+ /slingshot/doclib/action/cancel-checkout/node/{storetype}/{storeid}/{id}
+ argument
+ user
+ required
+
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/cancel-checkout.post.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/cancel-checkout.post.js
new file mode 100644
index 0000000000..0137e5f0e2
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/cancel-checkout.post.js
@@ -0,0 +1,58 @@
+
+
+/**
+ * Cancel checkout file action
+ * @method POST
+ * @param uri {string} /{siteId}/{containerId}/{filepath}
+ */
+
+/**
+ * Entrypoint required by action.lib.js
+ *
+ * @method runAction
+ * @param p_params {object} standard action parameters: nodeRef, siteId, containerId, filePath
+ * @return {object|null} object representation of action result
+ */
+function runAction(p_params)
+{
+ var results;
+
+ try
+ {
+ var assetNode = getAssetNode(p_params.rootNode, p_params.filePath);
+
+ // Must have assetNode by this point
+ if (typeof assetNode == "string")
+ {
+ status.setCode(status.STATUS_NOT_FOUND, "Not found: " + p_params.filePath);
+ return;
+ }
+
+ // Checkin the asset
+ var originalDoc = assetNode.cancelCheckout();
+ if (originalDoc === null)
+ {
+ status.setCode(status.STATUS_INTERNAL_SERVER_ERROR, "Could not cancel checkout: " + p_params.filePath);
+ return;
+ }
+
+ var resultId = originalDoc.name;
+ var resultNodeRef = originalDoc.nodeRef.toString();
+
+ // Construct the result object
+ results = [
+ {
+ id: resultId,
+ nodeRef: resultNodeRef,
+ action: "cancelCheckoutAsset",
+ success: true
+ }];
+ }
+ catch(e)
+ {
+ status.setCode(status.STATUS_INTERNAL_SERVER_ERROR, e.toString());
+ return;
+ }
+
+ return results;
+}
diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/cancel-checkout.post.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/cancel-checkout.post.json.ftl
new file mode 100644
index 0000000000..e2f0e9da9f
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/cancel-checkout.post.json.ftl
@@ -0,0 +1,2 @@
+<#import "action.lib.ftl" as actionLib />
+<@actionLib.resultsJSON results=results />
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/checkin.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/checkin.post.desc.xml
new file mode 100644
index 0000000000..c0cb6c9a9d
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/checkin.post.desc.xml
@@ -0,0 +1,9 @@
+
+ checkin
+ Document List Action - Check-in file
+ /slingshot/doclib/action/checkin/site/{siteid}/{containerId}/{filepath}
+ /slingshot/doclib/action/checkin/node/{storetype}/{storeid}/{id}
+ argument
+ user
+ required
+
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/checkin.post.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/checkin.post.js
new file mode 100644
index 0000000000..4060e8add0
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/checkin.post.js
@@ -0,0 +1,58 @@
+
+
+/**
+ * Checkin file action
+ * @method POST
+ * @param uri {string} /{siteId}/{containerId}/{filepath}
+ */
+
+/**
+ * Entrypoint required by action.lib.js
+ *
+ * @method runAction
+ * @param p_params {object} standard action parameters: nodeRef, siteId, containerId, filePath
+ * @return {object|null} object representation of action result
+ */
+function runAction(p_params)
+{
+ var results;
+
+ try
+ {
+ var assetNode = getAssetNode(p_params.rootNode, p_params.filePath);
+
+ // Must have assetNode by this point
+ if (typeof assetNode == "string")
+ {
+ status.setCode(status.STATUS_NOT_FOUND, "Not found: " + p_params.filePath);
+ return;
+ }
+
+ // Checkin the asset
+ var originalDoc = assetNode.checkin();
+ if (originalDoc === null)
+ {
+ status.setCode(status.STATUS_INTERNAL_SERVER_ERROR, "Could not checkin: " + p_params.filePath);
+ return;
+ }
+
+ var resultId = assetNode.name;
+ var resultNodeRef = originalDoc.nodeRef.toString();
+
+ // Construct the result object
+ results = [
+ {
+ id: resultId,
+ nodeRef: resultNodeRef,
+ action: "checkinAsset",
+ success: true
+ }];
+ }
+ catch(e)
+ {
+ status.setCode(status.STATUS_INTERNAL_SERVER_ERROR, e.toString());
+ return;
+ }
+
+ return results;
+}
diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/checkin.post.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/checkin.post.json.ftl
new file mode 100644
index 0000000000..e2f0e9da9f
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/checkin.post.json.ftl
@@ -0,0 +1,2 @@
+<#import "action.lib.ftl" as actionLib />
+<@actionLib.resultsJSON results=results />
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/checkout.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/checkout.post.desc.xml
index 2465aac75d..bc23cd0197 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/checkout.post.desc.xml
+++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/checkout.post.desc.xml
@@ -1,7 +1,8 @@
checkout
Document List Action - Check-out file
- /slingshot/doclib/action/checkout/{siteid}/{containerId}/{filepath}
+ /slingshot/doclib/action/checkout/site/{siteid}/{containerId}/{filepath}
+ /slingshot/doclib/action/checkout/node/{storetype}/{storeid}/{id}
argument
user
required
diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/file.delete.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/file.delete.desc.xml
index 6ee313b27c..3c3441c5f9 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/file.delete.desc.xml
+++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/file.delete.desc.xml
@@ -1,8 +1,10 @@
file
Document List Action - Delete file
- /slingshot/doclib/action/file/{siteid}/{containerId}/{filepath}
- /slingshot/doclib/action/folder/{siteid}/{containerId}/{filepath}
+ /slingshot/doclib/action/file/site/{siteid}/{containerId}/{filepath}
+ /slingshot/doclib/action/folder/site/{siteid}/{containerId}/{filepath}
+ /slingshot/doclib/action/file/node/{storetype}/{storeid}/{id}
+ /slingshot/doclib/action/folder/node/{storetype}/{storeid}/{id}
argument
user
required
diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/file.delete.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/file.delete.js
index cc01280248..bf44a0eede 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/file.delete.js
+++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/file.delete.js
@@ -19,7 +19,15 @@ function runAction(p_params)
try
{
- var assetNode = getAssetNode(p_params.rootNode, p_params.filePath);
+ var assetNode;
+ if (p_params.usingNodeRef)
+ {
+ assetNode = p_params.nodeRef;
+ }
+ else
+ {
+ assetNode = getAssetNode(p_params.rootNode, p_params.filePath);
+ }
// Must have assetNode by this point
if (typeof assetNode == "string")
diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/folder.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/folder.post.desc.xml
index fff699c210..b3490560db 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/folder.post.desc.xml
+++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/folder.post.desc.xml
@@ -1,9 +1,11 @@
folder
Document List Action - Create folder
- /slingshot/doclib/action/folder/{siteid}/{containerId}
- /slingshot/doclib/action/folder/{siteid}/{containerId}/{filepath}
+ /slingshot/doclib/action/folder/site/{siteid}/{containerId}
+ /slingshot/doclib/action/folder/site/{siteid}/{containerId}/{filepath}
+ /slingshot/doclib/action/folder/node/{storetype}/{storeid}/{id}
argument
user
required
-
\ No newline at end of file
+
+
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 4ecb25f13a..671f6d4ab5 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
@@ -43,6 +43,7 @@ function getDoclist(siteId, path, type, filter)
else
{
pathNode = containerNode;
+ path = "";
}
if (pathNode === null)
@@ -114,6 +115,7 @@ function getDoclist(siteId, path, type, filter)
items.push(
{
asset: asset,
+ parent: path,
status: itemStatus,
owner: itemOwner,
actionSet: actionSet
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 4e7c74501e..0d4a45f10e 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
@@ -15,6 +15,7 @@
"mimetype": "${d.mimetype!""}",
"icon32": "${d.icon32}",
"name": "${d.name?replace(" (Working Copy)", "")?html}",
+ "parent": "${item.parent}",
"status": "<#list item.status as s>${s}<#if s_has_next>,#if>#list>",
"lockedBy": "${item.owner}",
"title": "${(d.properties.title!"")?html}",