diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/blog.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/blog.lib.ftl index 2be19a7ed9..cbaea346d0 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/blog.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/blog.lib.ftl @@ -1,5 +1,5 @@ <#-- - This template renders the blog configuration json data. + This template renders the blog data object. --> <#macro blogJSON item> <#escape x as jsonUtils.encodeJSONString(x)> @@ -13,7 +13,12 @@ "description" : "${item.properties["blg:description"]!''}", "url" : "${item.properties["blg:url"]!''}", "username" : "${item.properties["blg:userName"]!''}", - "password" : "${item.properties["blg:password"]!''}" + "password" : "${item.properties["blg:password"]!''}", + "permissions" : { + "create" : ${item.hasPermission("CreateChildren")?string}, + "edit" : ${item.hasPermission("Write")?string}, + "delete" : ${item.hasPermission("Delete")?string} + } } diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/blogpost.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/blogpost.lib.ftl index c92a755112..7f3a11140d 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/blogpost.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/blogpost.lib.ftl @@ -44,7 +44,10 @@ "createdOn" : "${item.createdDate?string("MMM dd yyyy HH:mm:ss 'GMT'Z '('zzz')'")}", "modifiedOn" : "${item.modifiedDate?string("MMM dd yyyy HH:mm:ss 'GMT'Z '('zzz')'")}", - "permissions" : {"edit" : true, "publishExt" : true, "delete" : true}, + "permissions" : { + "edit" : ${item.node.hasPermission("Write")?string}, + "delete" : ${item.node.hasPermission("Delete")?string} + }, "commentCount" : ${item.commentCount?c}, "tags" : [<#list item.tags as x>"${x}"<#if x_has_next>, ], diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mydrafts.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mydrafts.get.js index 3d562ea783..32daa171bf 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mydrafts.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mydrafts.get.js @@ -41,6 +41,9 @@ function main() // fetch the contentLength param var contentLength = args["contentLength"] != undefined ? parseInt(args["contentLength"]) : -1; model.contentLength = isNaN(contentLength) ? -1 : contentLength; + + // assign the blog node + model.blog = node; } main(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mydrafts.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mydrafts.get.json.ftl index 84d5165a72..5f9b7ad1c0 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mydrafts.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mydrafts.get.json.ftl @@ -1,5 +1,12 @@ <#import "../blogpost.lib.ftl" as blogpostLib/> <#import "../../generic-paged-results.lib.ftl" as gen/> +{ + "blogPermissions" : { + "create" : ${blog.hasPermission("CreateChildren")?string}, + "edit" : ${blog.hasPermission("Write")?string}, + "delete" : ${blog.hasPermission("Delete")?string} + }, <@gen.pagedResults data=data ; item> <@blogpostLib.blogpostJSON item=item /> +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mypublished.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mypublished.get.js index 3b7f7b2613..85fd44efeb 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mypublished.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mypublished.get.js @@ -42,6 +42,9 @@ function main() // fetch the contentLength param var contentLength = args["contentLength"] != undefined ? parseInt(args["contentLength"]) : -1; model.contentLength = isNaN(contentLength) ? -1 : contentLength; + + // assign the blog node + model.blog = node; } main(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mypublished.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mypublished.get.json.ftl index 84d5165a72..406a0c8a6b 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mypublished.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-mypublished.get.json.ftl @@ -1,5 +1,12 @@ <#import "../blogpost.lib.ftl" as blogpostLib/> <#import "../../generic-paged-results.lib.ftl" as gen/> +{ + "blogPermissions" : { + "create" : ${blog.hasPermission("CreateChildren")?string}, + "edit" : ${blog.hasPermission("Write")?string}, + "delete" : ${blog.hasPermission("Delete")?string} + }, <@gen.pagedResults data=data ; item> <@blogpostLib.blogpostJSON item=item /> +} \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-new.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-new.get.js index f36ff09940..fbd2c0d60c 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-new.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-new.get.js @@ -44,6 +44,9 @@ function main() // fetch the contentLength param var contentLength = args["contentLength"] != undefined ? parseInt(args["contentLength"]) : -1; model.contentLength = isNaN(contentLength) ? -1 : contentLength; + + // assign the blog node + model.blog = node; } main(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-new.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-new.get.json.ftl index 84d5165a72..5f9b7ad1c0 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-new.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-new.get.json.ftl @@ -1,5 +1,12 @@ <#import "../blogpost.lib.ftl" as blogpostLib/> <#import "../../generic-paged-results.lib.ftl" as gen/> +{ + "blogPermissions" : { + "create" : ${blog.hasPermission("CreateChildren")?string}, + "edit" : ${blog.hasPermission("Write")?string}, + "delete" : ${blog.hasPermission("Delete")?string} + }, <@gen.pagedResults data=data ; item> <@blogpostLib.blogpostJSON item=item /> +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-publishedext.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-publishedext.get.js index 83e2cbdca4..db0352dfdd 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-publishedext.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-publishedext.get.js @@ -40,6 +40,9 @@ function main() // fetch the contentLength param var contentLength = args["contentLength"] != undefined ? parseInt(args["contentLength"]) : -1; model.contentLength = isNaN(contentLength) ? -1 : contentLength; + + // assign the blog node + model.blog = node; } main(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-publishedext.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-publishedext.get.json.ftl index 84d5165a72..5f9b7ad1c0 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-publishedext.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts-publishedext.get.json.ftl @@ -1,5 +1,12 @@ <#import "../blogpost.lib.ftl" as blogpostLib/> <#import "../../generic-paged-results.lib.ftl" as gen/> +{ + "blogPermissions" : { + "create" : ${blog.hasPermission("CreateChildren")?string}, + "edit" : ${blog.hasPermission("Write")?string}, + "delete" : ${blog.hasPermission("Delete")?string} + }, <@gen.pagedResults data=data ; item> <@blogpostLib.blogpostJSON item=item /> +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts.get.js index dcb000ed80..bcad947189 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts.get.js @@ -80,6 +80,9 @@ function main() // fetch the contentLength param var contentLength = args["contentLength"] != undefined ? parseInt(args["contentLength"]) : -1; model.contentLength = isNaN(contentLength) ? -1 : contentLength; + + // assign the blog node + model.blog = node; } main(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts.get.json.ftl index 84d5165a72..5f9b7ad1c0 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/blogs/posts/blog-posts.get.json.ftl @@ -1,5 +1,12 @@ <#import "../blogpost.lib.ftl" as blogpostLib/> <#import "../../generic-paged-results.lib.ftl" as gen/> +{ + "blogPermissions" : { + "create" : ${blog.hasPermission("CreateChildren")?string}, + "edit" : ${blog.hasPermission("Write")?string}, + "delete" : ${blog.hasPermission("Delete")?string} + }, <@gen.pagedResults data=data ; item> <@blogpostLib.blogpostJSON item=item /> +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/comments/comments.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/comments/comments.get.json.ftl index 772e480cdf..689f5603a3 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/comments/comments.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/comments/comments.get.json.ftl @@ -1,5 +1,7 @@ <#import "comment.lib.ftl" as commentLib/> <#import "../generic-paged-results.lib.ftl" as gen/> +{ <@gen.pagedResults data=data ; item> <@commentLib.commentJSON item=item /> +} \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-hot.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-hot.get.js index 30ee6c2408..3d6fe3ff2e 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-hot.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-hot.get.js @@ -99,6 +99,9 @@ function main() // fetch the contentLength param var contentLength = args["contentLength"] != undefined ? parseInt(args["contentLength"]) : -1; model.contentLength = isNaN(contentLength) ? -1 : contentLength; + + // also set the forum node + model.forum = node; } main(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-hot.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-hot.get.json.ftl index 55bbde4085..b60e7cc77e 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-hot.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-hot.get.json.ftl @@ -1,6 +1,12 @@ <#import "../post.lib.ftl" as postLib/> <#import "../../generic-paged-results.lib.ftl" as gen/> +{ + "forumPermissions" : { + "create" : ${forum.hasPermission("CreateChildren")?string}, + "edit" : ${forum.hasPermission("Write")?string}, + "delete" : ${forum.hasPermission("Delete")?string} + }, <@gen.pagedResults data=data ; item> <@postLib.postJSON postData=item /> - +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-mine.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-mine.get.js index dd82fec852..36b9aa5e47 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-mine.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-mine.get.js @@ -36,6 +36,9 @@ function main() // fetch the contentLength param var contentLength = args["contentLength"] != undefined ? parseInt(args["contentLength"]) : -1; model.contentLength = isNaN(contentLength) ? -1 : contentLength; + + // also set the forum node + model.forum = node; } main(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-mine.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-mine.get.json.ftl index f940739f6c..b60e7cc77e 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-mine.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-mine.get.json.ftl @@ -1,5 +1,12 @@ <#import "../post.lib.ftl" as postLib/> <#import "../../generic-paged-results.lib.ftl" as gen/> +{ + "forumPermissions" : { + "create" : ${forum.hasPermission("CreateChildren")?string}, + "edit" : ${forum.hasPermission("Write")?string}, + "delete" : ${forum.hasPermission("Delete")?string} + }, <@gen.pagedResults data=data ; item> <@postLib.postJSON postData=item /> +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-new.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-new.get.js index d8860c6ea4..1d882689bb 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-new.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-new.get.js @@ -42,6 +42,9 @@ function main() // fetch the contentLength param var contentLength = args["contentLength"] != undefined ? parseInt(args["contentLength"]) : -1; model.contentLength = isNaN(contentLength) ? -1 : contentLength; + + // also set the forum node + model.forum = node; } main(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-new.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-new.get.json.ftl index f940739f6c..b60e7cc77e 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-new.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts-new.get.json.ftl @@ -1,5 +1,12 @@ <#import "../post.lib.ftl" as postLib/> <#import "../../generic-paged-results.lib.ftl" as gen/> +{ + "forumPermissions" : { + "create" : ${forum.hasPermission("CreateChildren")?string}, + "edit" : ${forum.hasPermission("Write")?string}, + "delete" : ${forum.hasPermission("Delete")?string} + }, <@gen.pagedResults data=data ; item> <@postLib.postJSON postData=item /> +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts.get.js index 1d12f2be74..1be08c2b36 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts.get.js @@ -43,6 +43,9 @@ function main() // fetch the contentLength param var contentLength = args["contentLength"] != undefined ? parseInt(args["contentLength"]) : -1; model.contentLength = isNaN(contentLength) ? -1 : contentLength; + + // also set the forum node + model.forum = node; } main(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts.get.json.ftl index 55bbde4085..b60e7cc77e 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/forum/forum-posts.get.json.ftl @@ -1,6 +1,12 @@ <#import "../post.lib.ftl" as postLib/> <#import "../../generic-paged-results.lib.ftl" as gen/> +{ + "forumPermissions" : { + "create" : ${forum.hasPermission("CreateChildren")?string}, + "edit" : ${forum.hasPermission("Write")?string}, + "delete" : ${forum.hasPermission("Delete")?string} + }, <@gen.pagedResults data=data ; item> <@postLib.postJSON postData=item /> - +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/post.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/post.lib.ftl index 4c415b6cc1..b1fa8f49ca 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/post.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/discussions/post.lib.ftl @@ -57,7 +57,7 @@ "repliesUrl" : "/forum/post/node/${refNode.nodeRef.storeRef.protocol}/${refNode.nodeRef.storeRef.identifier}/${refNode.nodeRef.id}/replies", "nodeRef" : "${refNode.nodeRef}", - <#-- normal data, the post node will used to fetch it --> + <#-- data coming from the post node --> "title" : "${(post.properties.title!"")}", "createdOn" : "${post.properties.created?string("MMM dd yyyy HH:mm:ss 'GMT'Z '('zzz')'")}", "modifiedOn" : "${post.properties.modified?string("MMM dd yyyy HH:mm:ss 'GMT'Z '('zzz')'")}", @@ -74,7 +74,12 @@ <@addContent post=post /> "replyCount" : <#if post.sourceAssocs["cm:references"]??>${post.sourceAssocs["cm:references"]?size?c}<#else>0, - "permissions" : { "edit": true, "delete" : true, "reply" : true } + "permissions" : + { + "edit": ${post.hasPermission("Write")?string}, + "reply" : ${post.parent.hasPermission("CreateChildren")?string}, + "delete" : ${post.hasPermission("Delete")?string} + } diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/generic-paged-results.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/generic-paged-results.lib.ftl index 665ca155a5..3801fd73e8 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/generic-paged-results.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/generic-paged-results.lib.ftl @@ -10,14 +10,15 @@ Usage: <#import "generic-paged-results.lib.ftl" as gen/> + { <@gen.pagedResults data=data ; item> output of the individual item, for example by calling another macro: <@yourLib.itemJSON item=item /> + } --> <#macro pagedResults data> -{ "total" : ${data.total?c}, "pageSize" : ${data.pageSize?c}, "startIndex" : ${data.startIndex?c}, @@ -29,5 +30,4 @@ Usage: <#if item_has_next>, ] -} diff --git a/source/java/org/alfresco/repo/web/scripts/discussion/DiscussionServiceTest.java b/source/java/org/alfresco/repo/web/scripts/discussion/DiscussionServiceTest.java index 1d9d4449b7..4c3acc2b37 100644 --- a/source/java/org/alfresco/repo/web/scripts/discussion/DiscussionServiceTest.java +++ b/source/java/org/alfresco/repo/web/scripts/discussion/DiscussionServiceTest.java @@ -56,9 +56,9 @@ public class DiscussionServiceTest extends BaseWebScriptTest private SiteService siteService; private static final String USER_ADMIN = "admin"; - private static final String USER_ONE = "UserOneSecond"; - private static final String USER_TWO = "UserTwoSecond"; - private static final String SITE_SHORT_NAME_DISCUSSION = "DiscussionSiteShortName"; + private static final String USER_ONE = "UserOneThird"; + private static final String USER_TWO = "UserTwoThird"; + private static final String SITE_SHORT_NAME_DISCUSSION = "DiscussionSiteShortNameTwo"; private static final String COMPONENT_DISCUSSION = "discussion"; private static final String URL_FORUM_POST = "/api/forum/post/site/" + SITE_SHORT_NAME_DISCUSSION + "/" + COMPONENT_DISCUSSION + "/"; @@ -79,6 +79,9 @@ public class DiscussionServiceTest extends BaseWebScriptTest this.personService = (PersonService)getServer().getApplicationContext().getBean("PersonService"); this.siteService = (SiteService)getServer().getApplicationContext().getBean("siteService"); + // Authenticate as user + this.authenticationComponent.setCurrentUser(USER_ADMIN); + // Create test site // - only create the site if it doesn't already exist SiteInfo siteInfo = this.siteService.getSite(SITE_SHORT_NAME_DISCUSSION); @@ -105,8 +108,10 @@ public class DiscussionServiceTest extends BaseWebScriptTest this.authenticationComponent.setCurrentUser(USER_ADMIN); // delete the inviter user - personService.deletePerson(USER_ONE); - personService.deletePerson(USER_TWO); + //personService.deletePerson(USER_ONE); + //this.authenticationService.deleteAuthentication(USER_ONE); + //personService.deletePerson(USER_TWO); + //this.authenticationService.deleteAuthentication(USER_TWO); // delete invite site siteService.deleteSite(SITE_SHORT_NAME_DISCUSSION); @@ -134,7 +139,7 @@ public class DiscussionServiceTest extends BaseWebScriptTest } // add the user as a member with the given role - this.siteService.setMembership(SITE_SHORT_NAME_DISCUSSION, USER_ONE, role); + this.siteService.setMembership(SITE_SHORT_NAME_DISCUSSION, userName, role); }