diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.get.js
index 012b81ef77..856d16ce6a 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.get.js
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.get.js
@@ -13,6 +13,7 @@ function main()
model.person = person;
model.capabilities = people.getCapabilities(person);
model.groups = groups ? people.getContainerGroups(person) : null;
+ model.immutability = groups ? people.getImmutableProperties(userName) : null;
}
else
{
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.get.json.ftl
index b9805d7f0e..471c655644 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.get.json.ftl
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.get.json.ftl
@@ -1,6 +1,6 @@
<#import "person.lib.ftl" as personLib/>
<#if groups??>
- <@personLib.personGroupsJSON person=person groups=groups capabilities=capabilities />
+ <@personLib.personGroupsJSON person=person groups=groups capabilities=capabilities immutability=immutability />
<#else>
<@personLib.personCapJSON person=person capabilities=capabilities />
#if>
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl
index ada66e071e..e38fdc00ab 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl
@@ -46,7 +46,7 @@
}
#macro>
-<#macro personGroupsJSON person groups capabilities>
+<#macro personGroupsJSON person groups capabilities immutability>
<#escape x as jsonUtils.encodeJSONString(x)>
{
<@personJSONinner person=person/>,
@@ -61,7 +61,11 @@
{
"itemName": "${authName}",
"displayName": "${displayName}"
- }<#if g_has_next>,#if>#list>]
+ }<#if g_has_next>,#if>#list>],
+ "immutability":
+ {
+ <@serializeHash hash=immutability/>
+ }
}
#escape>
#macro>
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/version/version.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/version/version.get.js
index 43646ce90a..da98e7582e 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/repository/version/version.get.js
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/version/version.get.js
@@ -10,16 +10,35 @@ function getPerson(username)
if (typeof PeopleCache[username] == "undefined")
{
var person = people.getPerson(username);
- if (person == null && (username == "System" || username.match("^System@") == "System@"))
+ if (person == null)
{
- person =
+ if (username == "System" || username.match("^System@") == "System@")
{
- properties:
+ // special case for the System users
+ person =
{
- userName: "System",
- firstName: "System",
- lastName: "User"
- }
+ properties:
+ {
+ userName: "System",
+ firstName: "System",
+ lastName: "User"
+ },
+ assocs: {}
+ };
+ }
+ else
+ {
+ // missing person - may have been deleted from the database
+ person =
+ {
+ properties:
+ {
+ userName: username,
+ firstName: "",
+ lastName: ""
+ },
+ assocs: {}
+ };
}
}
PeopleCache[username] =
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/content.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/content.get.desc.xml
new file mode 100644
index 0000000000..875a281ef5
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/content.get.desc.xml
@@ -0,0 +1,10 @@
+
+ Get the content of the specified asset within the specified web project and sandbox.
+ /api/wcm/webprojects/{webprojectref}/sandboxes/{sandboxref}/assets/content/{path}
+ /api/wcm/webprojects/{webprojectref}/sandboxes/{sandboxref}/assets/content/{path}?webApp={webApp?}
+ argument
+ user
+ required
+ WCM/Asset
+ draft_public_api
+
\ No newline at end of file
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/content.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/content.get.js
new file mode 100644
index 0000000000..20f7b01eb1
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/content.get.js
@@ -0,0 +1,55 @@
+/*
+ * Get asset content script
+ */
+function main()
+{
+ var urlElements = url.extension.split("/");
+ var shortName = urlElements[0];
+ var boxName = urlElements[2];
+ var pathArray = urlElements.slice(5);
+ var path = pathArray.join("/");
+
+ var webproject = webprojects.getWebProject(shortName);
+ if (null == webproject)
+ {
+ // Site cannot be found
+ status.setCode(status.STATUS_NOT_FOUND, "The webproject '" + shortName + "' does not exist.");
+ return;
+ }
+
+ var sandbox;
+ sandbox = webproject.getSandbox(boxName);
+ if (null == sandbox)
+ {
+ // Site cannot be found
+ status.setCode(status.STATUS_NOT_FOUND, "The sandbox '" + boxName + "' in webproject '" + shortName + "' does not exist.");
+ return;
+ }
+
+ var webApp = args["webApp"];
+
+ var asset;
+
+ if(null != webApp)
+ {
+ asset = sandbox.getAssetWebApp(webApp, path);
+ }
+ else
+ {
+ asset = sandbox.getAsset(path);
+ }
+
+ if (null == asset)
+ {
+ // Site cannot be found
+ status.setCode(status.STATUS_NOT_FOUND, "The asset '" + path + "' in webproject '" + shortName + "' does not exist.");
+ return;
+ }
+
+ // set model properties
+ model.sandbox = sandbox;
+ model.webproject = asset.getContent();
+ model.asset = asset;
+}
+
+main();
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/content.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/content.get.json.ftl
new file mode 100644
index 0000000000..dd6eb79a4b
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/content.get.json.ftl
@@ -0,0 +1,4 @@
+<#import "asset.lib.ftl" as assetLib/>
+{
+ "content": "${asset.content}"
+}
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/properties.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/properties.post.desc.xml
new file mode 100644
index 0000000000..63e553fe16
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/properties.post.desc.xml
@@ -0,0 +1,9 @@
+
+ Update a WCM asset
+ /api/wcm/webprojects/{webprojectref}/sandboxes/{sandboxref}/assets/properties/{path}
+ argument
+ user
+ required
+ WCM/Asset
+ draft_public_api
+
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/properties.post.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/properties.post.json.ftl
new file mode 100644
index 0000000000..1229613d38
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/properties.post.json.ftl
@@ -0,0 +1,4 @@
+<#import "asset.lib.ftl" as assetLib/>
+{
+ data: <@assetLib.assetJSON asset=asset depth=0/>
+}
diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/properties.post.json.js b/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/properties.post.json.js
new file mode 100644
index 0000000000..3605bd577c
--- /dev/null
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/wcm/sandbox/Asset/properties.post.json.js
@@ -0,0 +1,72 @@
+/*
+ * Post -update a asset file/folder
+ * optionally updates simple content
+ */
+function main()
+{
+ var urlElements = url.extension.split("/");
+ var shortName = urlElements[0];
+ var boxName = urlElements[2];
+ var pathArray = urlElements.slice(5);
+ var path = pathArray.join("/");
+
+ var webproject = webprojects.getWebProject(shortName);
+ if (null == webproject)
+ {
+ // Site cannot be found
+ status.setCode(status.STATUS_NOT_FOUND, "The webproject, " + shortName + ", does not exist.");
+ return;
+ }
+ var sandbox = webproject.getSandbox(boxName);
+ if (null == sandbox)
+ {
+ // Site cannot be found
+ status.setCode(status.STATUS_NOT_FOUND, "The sandbox, " + boxName + ", in webproject, " + shortName + ", does not exist.");
+ return;
+ }
+ var asset = sandbox.getAsset(path);
+
+ if (null == asset)
+ {
+ status.setCode(status.STATUS_NOT_FOUND, "The asset, " + path + ", in webproject, " + shortName + ", does not exist.");
+ return;
+ }
+
+ // Now read the values from the json form
+// if(!json.has("properties"))
+// {
+// status.setCode(status.BAD_REQUEST, "JSON property 'properties' must specified");
+// return;
+// }
+
+ var properties = null;
+ if (json.has("properties"))
+ {
+ properties = json.get("properties");
+ }
+ var content = null;
+
+ if(json.has("content"))
+ {
+ content = json.get("content");
+ }
+
+ if (null != properties)
+ {
+ asset.setProperties(properties);
+ asset.save();
+ }
+ if (null != content)
+ {
+ asset.writeContent(content);
+ }
+
+ // set model properties
+ model.sandbox = sandbox;
+ model.webproject = webproject;
+ model.asset = asset;
+
+ status.code = status.STATUS_ACCEPTED;
+}
+
+main();
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 645c172798..1ff0706eca 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
@@ -40,18 +40,36 @@ var Common =
if (typeof Common.PeopleCache[username] == "undefined")
{
var person = people.getPerson(username);
- if (person == null && (username == "System" || username.match("^System@") == "System@"))
+ if (person == null)
{
- person =
+ if (username == "System" || username.match("^System@") == "System@")
{
- properties:
+ // special case for the System users
+ person =
{
- userName: "System",
- firstName: "System",
- lastName: "User"
- },
- assocs: {}
- };
+ properties:
+ {
+ userName: "System",
+ firstName: "System",
+ lastName: "User"
+ },
+ assocs: {}
+ };
+ }
+ else
+ {
+ // missing person - may have been deleted from the database
+ person =
+ {
+ properties:
+ {
+ userName: username,
+ firstName: "",
+ lastName: ""
+ },
+ assocs: {}
+ };
+ }
}
Common.PeopleCache[username] =
{
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 50c79bf02f..87c7b7a5ac 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
@@ -114,42 +114,45 @@ function getDoclist()
{
// Get evaluated properties.
item = Evaluator.run(node);
- item.isFavourite = (favourites[item.node.nodeRef] === true);
-
- // Does this collection of nodes have potentially differering paths?
- if (filterParams.variablePath || item.isLink)
+ if (item !== null)
{
- locationNode = (item.isLink && item.type == "document") ? item.linkNode : item.node;
- location = Common.getLocation(locationNode);
- }
- else
- {
- location =
+ item.isFavourite = (favourites[item.node.nodeRef] === true);
+
+ // Does this collection of nodes have potentially differering paths?
+ if (filterParams.variablePath || item.isLink)
{
- site: parsedArgs.location.site,
- siteTitle: parsedArgs.location.siteTitle,
- container: parsedArgs.location.container,
- path: parsedArgs.location.path,
- file: node.name
- };
- }
-
- // Resolved location
- item.location = location;
-
- // Is our thumbnail type registered?
- if (isThumbnailNameRegistered)
- {
- // Make sure we have a thumbnail.
- thumbnail = item.node.getThumbnail(THUMBNAIL_NAME);
- if (thumbnail === null)
- {
- // No thumbnail, so queue creation
- item.node.createThumbnail(THUMBNAIL_NAME, true);
+ locationNode = (item.isLink && item.type == "document") ? item.linkNode : item.node;
+ location = Common.getLocation(locationNode);
}
+ else
+ {
+ location =
+ {
+ site: parsedArgs.location.site,
+ siteTitle: parsedArgs.location.siteTitle,
+ container: parsedArgs.location.container,
+ path: parsedArgs.location.path,
+ file: node.name
+ };
+ }
+
+ // Resolved location
+ item.location = location;
+
+ // Is our thumbnail type registered?
+ if (isThumbnailNameRegistered)
+ {
+ // Make sure we have a thumbnail.
+ thumbnail = item.node.getThumbnail(THUMBNAIL_NAME);
+ if (thumbnail === null)
+ {
+ // No thumbnail, so queue creation
+ item.node.createThumbnail(THUMBNAIL_NAME, true);
+ }
+ }
+
+ items.push(item);
}
-
- items.push(item);
}
return (
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 5a725a48dd..ebada43a36 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
@@ -108,8 +108,11 @@ var Evaluator =
*/
linkNode = node;
node = linkNode.properties.destination;
- // Re-evaluate the nodeType based on the link's destination node
- nodeType = Evaluator.getNodeType(node);
+ if (node !== null)
+ {
+ // Re-evaluate the nodeType based on the link's destination node
+ nodeType = Evaluator.getNodeType(node);
+ }
break;
/**
@@ -247,32 +250,39 @@ var Evaluator =
break;
}
- // Part of an active workflow? Guard against stale worklow tasks.
- try
+ if (node !== null)
{
- for each (activeWorkflow in node.activeWorkflows)
+ // Part of an active workflow? Guard against stale worklow tasks.
+ try
{
- activeWorkflows.push(activeWorkflow.id);
+ for each (activeWorkflow in node.activeWorkflows)
+ {
+ activeWorkflows.push(activeWorkflow.id);
+ }
}
+ catch (e) {}
+
+ return(
+ {
+ node: node,
+ type: nodeType,
+ linkNode: linkNode,
+ isLink: isLink,
+ status: status,
+ actionSet: actionSet,
+ actionPermissions: permissions,
+ createdBy: createdBy,
+ modifiedBy: modifiedBy,
+ lockedBy: lockedBy,
+ tags: node.tags,
+ activeWorkflows: activeWorkflows,
+ custom: jsonUtils.toJSONString(custom),
+ actionLabels: actionLabels
+ });
}
- catch (e) {}
-
- return(
+ else
{
- node: node,
- type: nodeType,
- linkNode: linkNode,
- isLink: isLink,
- status: status,
- actionSet: actionSet,
- actionPermissions: permissions,
- createdBy: createdBy,
- modifiedBy: modifiedBy,
- lockedBy: lockedBy,
- tags: node.tags,
- activeWorkflows: activeWorkflows,
- custom: jsonUtils.toJSONString(custom),
- actionLabels: actionLabels
- });
+ return null;
+ }
}
};
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 5f990f6eb7..ebe472b621 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
@@ -26,18 +26,36 @@ var Common =
if (typeof Common.PeopleCache[username] == "undefined")
{
var person = people.getPerson(username);
- if (person == null && (username == "System" || username.match("^System@") == "System@"))
+ if (person == null)
{
- person =
+ if (username == "System" || username.match("^System@") == "System@")
{
- properties:
+ // special case for the System users
+ person =
{
- userName: "System",
- firstName: "System",
- lastName: "User"
- },
- assocs: {}
- };
+ properties:
+ {
+ userName: "System",
+ firstName: "System",
+ lastName: "User"
+ },
+ assocs: {}
+ };
+ }
+ else
+ {
+ // missing person - may have been deleted from the database
+ person =
+ {
+ properties:
+ {
+ userName: username,
+ firstName: "",
+ lastName: ""
+ },
+ assocs: {}
+ };
+ }
}
Common.PeopleCache[username] =
{
diff --git a/config/alfresco/templates/webscripts/org/alfresco/webframework/metadata.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/webframework/metadata.get.html.ftl
index 4c056783c8..71f726b6ee 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/webframework/metadata.get.html.ftl
+++ b/config/alfresco/templates/webscripts/org/alfresco/webframework/metadata.get.html.ftl
@@ -86,6 +86,11 @@
{
<@serializeHash hash=capabilities/>
}
+ ,
+ "immutableProperties":
+ {
+ <@serializeHash hash=immutableProperties/>
+ }
#if>
#escape>
#macro>
diff --git a/config/alfresco/templates/webscripts/org/alfresco/webframework/metadata.get.js b/config/alfresco/templates/webscripts/org/alfresco/webframework/metadata.get.js
index 77a1ec0da6..3f5830a2f5 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/webframework/metadata.get.js
+++ b/config/alfresco/templates/webscripts/org/alfresco/webframework/metadata.get.js
@@ -21,6 +21,7 @@ else if (args["user"] != null)
model.isUser = true;
model.includeChildren = false;
model.capabilities = people.getCapabilities(object);
+ model.immutableProperties = people.getImmutableProperties(userId);
}
// load content by relative path
diff --git a/source/java/org/alfresco/repo/cmis/ws/utils/PropertyUtil.java b/source/java/org/alfresco/repo/cmis/ws/utils/PropertyUtil.java
index 2a3268281b..fa1218f3f9 100644
--- a/source/java/org/alfresco/repo/cmis/ws/utils/PropertyUtil.java
+++ b/source/java/org/alfresco/repo/cmis/ws/utils/PropertyUtil.java
@@ -568,12 +568,26 @@ public class PropertyUtil
{
for (Object propertyValue : (Collection