From 72a775715c0df812b8ced79b02b9a33e172d8661 Mon Sep 17 00:00:00 2001 From: Kevin Roast Date: Wed, 20 Jan 2010 10:22:18 +0000 Subject: [PATCH] Merged V3.2E to HEAD 17571: ETHREEOH-1863 - alfresco-webscript-framework.jar is not available in the alfresco-enterprise-sdk-3.1 - although the framework jar was already part of the SDK when I looked I have done some re-organising of - names and paths and added missing source files. By no means finished but its another step forward. 17581: Fix for ETHREEOH-3380 - upload servlet in Explorer does not handle well upload errors as no error message is displayed on the client browser. 17582: ETHREEOH-2760 - Sealing of standard library root scope objects to prevent script potentially interfering with another scripts processing. - Example provided to fix ACT ticket issue against fixed codeline. 17583: Fixed ETHREEOH-3458 "If the rss feed to display returns bad formatted data or is unavailable an ugly free marker error is displayed" - Rss urls pointing to a "missing resource"/"bad formated rss data" is now displayed as "Rss feed is unavailable"/"Can't read rss feed" (before they displayed freemarker error making it impossible to re-configure) - Title is now updated after config (therefore the change to return json instead of html) (before a page refresh was needed) - The new url is now updated in the "2nd" config dialog after it has been changed in the first (before page refresh was needed) - Removed un-internationalised string from config respons template 17584: ALFCOM-3675 - WebDAV script does not allow inline editing for documents with name in upper case. - Now allows any case, as per supplied patch. - Also added support for Office 2007 file types so they can now be opened in write mode via webdav in IE6/7 from the Explorer client. - Tested in IE6/7. 17585: Yet another fix for ETHREEOH-1733 - agenda view all days events fixed 17586: ETHREEOH-1843: /api/sites/*/memberships search is slow on specific query 17587: Add cluster lock for JPBM job/timer executor (for WCM submits in a clustered env - ETHREEOH-2230 / ETHREEOH-3319) 17590: New icons for View Original & View Working Copy actions 17591: ETHREEOH-2879 - Alfresco + OpenLDAP: Unable to retrieve user from repository. - Fixed SURF to handle users without (utterly bizarely) First or Last names or even, usefully, neither. 17592: Merged V3.2 to V3.1 17415: Fix for ETHREEOH-3293 - Editing user details on large user repository causes Hibernate exception. Fix for ETHREEOH-3294 - Extreemly slow repository performance adding a new user to large user repository via the Explorer Client admin console. 17593: Icon for doclib View In Browser action 17594: ETHREEOH-2864 - Share - Documents cannot be deleted (in "All Documents" view) 17595: ETHREEOH-3203: Impossibility to add comment to any object by SiteContributor user 17596: ETHREEOH-1469 - SMTP errors not reported when sending an invitation - now errors are reported. - may upset unit tests, i've fixed those I know about 17598: Fixed ETHREEOH-3445 "Admin Console - Group Search sometimes never displays results list" 17601: ETHREEOH-3382 - Share Sites menu is broken in "debug" mode. Reworked menu css. Removed unused footer component. 17602: Share global debug flags removed from web-framework-config-application.xml. Use share-config-custom.xml instead. 17603: Changed wording on Create/Edit Site dialogs from "Access" to "Visibility". "Access" was no longer accurate now that Moderated Sites' content is private to non-members. 17604: ETHREEOH-1469 - SMTP error when sending an invitation does not return a failure. - SiteServiceTest also needed "fixing" 17606: ETHREEOH-3475 - IE: Second search on add groups to site gets yui error but works. Related to YUI bug 2286608. YUI patched instead of all DataTable client code. (Patch removed from DocLib) 17607: ETHREEOH-3470 - "Add" button is unavailable if the group with the name of more than 60 characters is found 17608: Fixed invalid use of Forms validator. Validators updated to handle specific case anyway. 17610: Fixed ETHREEOH-3445 "Admin Console - Group Search sometimes never displays results list" - missed commit of non-default theme files 17612: Fixed ETHREEOH-3480 "Browse" button no longer works after Groups Admin console page is refreshed 17613: ETHREEOH-3450 Fixed illegal nested comment in web-client-config-custom.xml.sample 17616: Fix for ETHREEOH-2863 - Code cache memory leak observed in JVM 1.6 when script action calls another script which in turn calls other functions. - Fixed use of Rhino optimization level when executing string based scripts. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@18160 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repository/comments/comments.lib.js | 10 +- .../slingshot/documentlibrary/filters.lib.js | 11 +-- .../web-scripts-application-context.xml | 9 ++ .../scripts/comment/ScriptCommentService.java | 98 +++++++++++++++++++ .../scripts/invitation/InvitationTest.java | 6 ++ .../web/scripts/invite/InviteServiceTest.java | 6 ++ .../web/scripts/site/SiteServiceTest.java | 6 ++ 7 files changed, 130 insertions(+), 16 deletions(-) create mode 100644 source/java/org/alfresco/repo/web/scripts/comment/ScriptCommentService.java diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/comments/comments.lib.js b/config/alfresco/templates/webscripts/org/alfresco/repository/comments/comments.lib.js index 58018e8375..b2cd129299 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/comments/comments.lib.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/comments/comments.lib.js @@ -48,14 +48,8 @@ function getOrCreateCommentsFolder(node) { var commentsFolder = getCommentsFolder(node); if (commentsFolder == null) - { - // add the aspect, which will create the forum as well as the comments topic - node.addAspect("fm:discussable"); - var forumFolder = node.childAssocs["fm:discussion"][0]; - if (forumFolder !== null) - { - commentsFolder = forumFolder.createNode(COMMENTS_TOPIC_NAME, "fm:topic", "cm:contains"); - } + { + commentsFolder = commentService.createCommentsFolder(node); } return commentsFolder; } 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 c21c5d6276..021e494853 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 @@ -20,7 +20,7 @@ var Filters = }], language: "lucene", templates: null, - variablePath: false + variablePath: true }; optional = optional || {}; @@ -106,7 +106,6 @@ var Filters = column: "@{http://www.alfresco.org/model/content/1.0}" + dateField, ascending: false }]; - filterParams.variablePath = true; filterParams.query = filterQuery + filterQueryDefaults; break; @@ -114,8 +113,6 @@ var Filters = filterQuery = "+PATH:\"" + parsedArgs.rootNode.qnamePath + "//*\""; filterQuery += " +ASPECT:\"{http://www.alfresco.org/model/content/1.0}workingcopy\""; filterQuery += " +@cm\\:workingCopyOwner:" + person.properties.userName; - - filterParams.variablePath = true; filterParams.query = filterQuery; break; @@ -123,8 +120,6 @@ var Filters = filterQuery = "+PATH:\"" + parsedArgs.rootNode.qnamePath + "//*\""; filterQuery += " +ASPECT:\"{http://www.alfresco.org/model/content/1.0}workingcopy\""; filterQuery += " -@cm\\:workingCopyOwner:" + person.properties.userName; - - filterParams.variablePath = true; filterParams.query = filterQuery; break; @@ -140,20 +135,20 @@ var Filters = foundOne = true; filterQuery += "ID:\"" + favourite + "\""; } - filterParams.variablePath = true; filterParams.query = filterQuery.length > 0 ? "+PATH:\"" + parsedArgs.rootNode.qnamePath + "//*\" +(" + filterQuery + ")" : "+ID:\"\""; break; case "node": + filterParams.variablePath = false; filterParams.query = "+ID:\"" + parsedArgs.rootNode.nodeRef + "\""; break; case "tag": - filterParams.variablePath = true; filterParams.query = "+PATH:\"" + parsedArgs.rootNode.qnamePath + "//*\" +PATH:\"/cm:taggable/cm:" + search.ISO9075Encode(filterData) + "/member\""; break; default: + filterParams.variablePath = false; filterQuery = "+PATH:\"" + parsedArgs.parentNode.qnamePath + "/*\""; filterParams.query = filterQuery + filterQueryDefaults; break; diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index 82aa18ba3f..dd297b817a 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -597,4 +597,13 @@ ${imap.server.enabled} + + + + commentService + + + + + \ No newline at end of file diff --git a/source/java/org/alfresco/repo/web/scripts/comment/ScriptCommentService.java b/source/java/org/alfresco/repo/web/scripts/comment/ScriptCommentService.java new file mode 100644 index 0000000000..8fe56ccd80 --- /dev/null +++ b/source/java/org/alfresco/repo/web/scripts/comment/ScriptCommentService.java @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2005-2009 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.web.scripts.comment; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.alfresco.model.ContentModel; +import org.alfresco.repo.jscript.BaseScopableProcessorExtension; +import org.alfresco.repo.jscript.Scopeable; +import org.alfresco.repo.jscript.ScriptNode; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.service.ServiceRegistry; +import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.namespace.QName; +import org.alfresco.service.namespace.RegexQNamePattern; + +/** + * Temporary comment service API to start encapsulation of comment logic. + * + * NOTE: this has been added to resolve a specific issue and needs re-consideration + * + * @author Roy Wetherall + */ +public class ScriptCommentService extends BaseScopableProcessorExtension +{ + private static final String COMMENTS_TOPIC_NAME = "Comments"; + + private ServiceRegistry serviceRegistry; + private NodeService nodeService; + + public void setServiceRegistry(ServiceRegistry serviceRegistry) + { + this.serviceRegistry = serviceRegistry; + this.nodeService = serviceRegistry.getNodeService(); + } + + public ScriptNode createCommentsFolder(ScriptNode node) + { + final NodeRef nodeRef = node.getNodeRef(); + + NodeRef commentsFolder = AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork() + { + public NodeRef doWork() throws Exception + { + NodeRef commentsFolder = null; + nodeService.addAspect(nodeRef, QName.createQName(NamespaceService.FORUMS_MODEL_1_0_URI, "discussable"), null); + List assocs = nodeService.getChildAssocs(nodeRef, QName.createQName(NamespaceService.FORUMS_MODEL_1_0_URI, "discussion"), RegexQNamePattern.MATCH_ALL); + if (assocs.size() != 0) + { + NodeRef forumFolder = assocs.get(0).getChildRef(); + + Map props = new HashMap(1); + props.put(ContentModel.PROP_NAME, COMMENTS_TOPIC_NAME); + commentsFolder = nodeService.createNode( + forumFolder, + ContentModel.ASSOC_CONTAINS, + QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, COMMENTS_TOPIC_NAME), + QName.createQName(NamespaceService.FORUMS_MODEL_1_0_URI, "topic"), + props).getChildRef(); + } + return commentsFolder; + } + + }, AuthenticationUtil.getAdminUserName()); + + return new ScriptNode(commentsFolder, serviceRegistry, getScope()); + } + + +} diff --git a/source/java/org/alfresco/repo/web/scripts/invitation/InvitationTest.java b/source/java/org/alfresco/repo/web/scripts/invitation/InvitationTest.java index 5567ea243a..b50060e054 100644 --- a/source/java/org/alfresco/repo/web/scripts/invitation/InvitationTest.java +++ b/source/java/org/alfresco/repo/web/scripts/invitation/InvitationTest.java @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.List; import org.alfresco.model.ContentModel; +import org.alfresco.repo.action.executer.MailActionExecuter; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.site.SiteModel; @@ -94,6 +95,11 @@ public class InvitationTest extends BaseWebScriptTest this.siteService = (SiteService)getServer().getApplicationContext().getBean("SiteService"); this.nodeService = (NodeService)getServer().getApplicationContext().getBean("NodeService"); + // TODO MER 20/11/2009 Bodge - turn off email sending to prevent errors during unit testing + // (or sending out email by accident from tests) + MailActionExecuter mail = (MailActionExecuter) getServer().getApplicationContext().getBean("mail"); + mail.setTestMode(true); + this.authenticationComponent.setSystemUserAsCurrentUser(); // Create users diff --git a/source/java/org/alfresco/repo/web/scripts/invite/InviteServiceTest.java b/source/java/org/alfresco/repo/web/scripts/invite/InviteServiceTest.java index cb7ec8bffc..e64a4b13de 100644 --- a/source/java/org/alfresco/repo/web/scripts/invite/InviteServiceTest.java +++ b/source/java/org/alfresco/repo/web/scripts/invite/InviteServiceTest.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.Set; import org.alfresco.model.ContentModel; +import org.alfresco.repo.action.executer.MailActionExecuter; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.invitation.WorkflowModelNominatedInvitation; import org.alfresco.repo.security.authentication.AuthenticationComponent; @@ -136,6 +137,11 @@ public class InviteServiceTest extends BaseWebScriptTest this.namespaceService = (NamespaceService) getServer().getApplicationContext().getBean("NamespaceService"); this.transactionService = (TransactionService) getServer().getApplicationContext() .getBean("TransactionService"); + + // TODO MER 20/11/2009 Bodge - turn off email sending to prevent errors during unit testing + // (or sending out email by accident from tests) + MailActionExecuter mail = (MailActionExecuter) getServer().getApplicationContext().getBean("mail"); + mail.setTestMode(true); // redeploy invite process definition in case it has been modified WorkflowDefinition inviteWfDefinition = this.workflowService.getDefinitionByName( diff --git a/source/java/org/alfresco/repo/web/scripts/site/SiteServiceTest.java b/source/java/org/alfresco/repo/web/scripts/site/SiteServiceTest.java index 847870abc8..9becc77c42 100644 --- a/source/java/org/alfresco/repo/web/scripts/site/SiteServiceTest.java +++ b/source/java/org/alfresco/repo/web/scripts/site/SiteServiceTest.java @@ -33,6 +33,7 @@ import java.util.Map; import java.util.Set; import org.alfresco.model.ContentModel; +import org.alfresco.repo.action.executer.MailActionExecuter; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.site.SiteModel; @@ -94,6 +95,11 @@ public class SiteServiceTest extends BaseWebScriptTest this.nodeService = (NodeService)getServer().getApplicationContext().getBean("NodeService"); this.authorityService = (AuthorityService)getServer().getApplicationContext().getBean("AuthorityService"); + // TODO MER 20/11/2009 Bodge - turn off email sending to prevent errors during unit testing + // (or sending out email by accident from tests) + MailActionExecuter mail = (MailActionExecuter)getServer().getApplicationContext().getBean("mail"); + mail.setTestMode(true); + this.authenticationComponent.setSystemUserAsCurrentUser(); // Create users