From b56cc820439fb6f4ad57f0ae58fd49e87573f995 Mon Sep 17 00:00:00 2001 From: Derek Hulley Date: Tue, 18 Jul 2006 15:17:28 +0000 Subject: [PATCH] Merged V1.3 to HEAD (3027:3044) svn merge svn://www.alfresco.org:3691/alfresco/BRANCHES/V1.3@3027 svn://www.alfresco.org:3691/alfresco/BRANCHES/V1.3@3044 . git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@3339 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../web-client-config-forum-actions.xml | 29 +++++++ .../alfresco/web-client-config-properties.xml | 77 ++++++++++++------- .../action/evaluator/ApproveDocEvaluator.java | 1 - .../evaluator/CreateForumNodeEvaluator.java | 1 - .../evaluator/DiscussNodeEvaluator.java | 1 - .../evaluator/DiscussionCutCopyEvaluator.java | 45 +++++++++++ .../action/evaluator/RejectDocEvaluator.java | 1 - .../app/servlet/TemplateContentServlet.java | 4 +- .../org/alfresco/web/bean/GroupsBean.java | 20 +++-- .../web/bean/wizard/InviteUsersWizard.java | 2 +- .../alfresco/web/config/AspectEvaluator.java | 18 ++--- .../template/DefaultModelHelper.java | 8 +- .../repo/component/template/UITemplate.java | 24 +++--- 13 files changed, 169 insertions(+), 62 deletions(-) create mode 100644 source/java/org/alfresco/web/action/evaluator/DiscussionCutCopyEvaluator.java diff --git a/config/alfresco/web-client-config-forum-actions.xml b/config/alfresco/web-client-config-forum-actions.xml index 6ce65784fd..76891b781e 100644 --- a/config/alfresco/web-client-config-forum-actions.xml +++ b/config/alfresco/web-client-config-forum-actions.xml @@ -16,6 +16,35 @@ #{actionContext.id} + + + + + org.alfresco.web.action.evaluator.DiscussionCutCopyEvaluator + + Delete + + cut + /images/icons/cut.gif + #{ClipboardBean.cutNode} + + #{actionContext.id} + + + + + + + + org.alfresco.web.action.evaluator.DiscussionCutCopyEvaluator + copy + /images/icons/copy.gif + #{ClipboardBean.copyNode} + + #{actionContext.id} + + + diff --git a/config/alfresco/web-client-config-properties.xml b/config/alfresco/web-client-config-properties.xml index e7afc96f0f..00cd3f2ffb 100644 --- a/config/alfresco/web-client-config-properties.xml +++ b/config/alfresco/web-client-config-properties.xml @@ -35,32 +35,6 @@ ignore-if-missing="false" /> - - - - - - - - - - - - - - - - - - - - - - - @@ -97,7 +71,7 @@ - + @@ -105,6 +79,20 @@ + + + + + + + + + + + + + @@ -184,4 +172,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/java/org/alfresco/web/action/evaluator/ApproveDocEvaluator.java b/source/java/org/alfresco/web/action/evaluator/ApproveDocEvaluator.java index 5f4ea1ebb9..d33009d6e9 100644 --- a/source/java/org/alfresco/web/action/evaluator/ApproveDocEvaluator.java +++ b/source/java/org/alfresco/web/action/evaluator/ApproveDocEvaluator.java @@ -17,7 +17,6 @@ package org.alfresco.web.action.evaluator; import org.alfresco.model.ContentModel; -import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.web.action.ActionEvaluator; import org.alfresco.web.bean.repository.Node; diff --git a/source/java/org/alfresco/web/action/evaluator/CreateForumNodeEvaluator.java b/source/java/org/alfresco/web/action/evaluator/CreateForumNodeEvaluator.java index cda684ec76..135de5addf 100644 --- a/source/java/org/alfresco/web/action/evaluator/CreateForumNodeEvaluator.java +++ b/source/java/org/alfresco/web/action/evaluator/CreateForumNodeEvaluator.java @@ -16,7 +16,6 @@ */ package org.alfresco.web.action.evaluator; -import org.alfresco.model.ContentModel; import org.alfresco.model.ForumModel; import org.alfresco.web.action.ActionEvaluator; import org.alfresco.web.bean.repository.Node; diff --git a/source/java/org/alfresco/web/action/evaluator/DiscussNodeEvaluator.java b/source/java/org/alfresco/web/action/evaluator/DiscussNodeEvaluator.java index 47183fa100..cd789ac5e7 100644 --- a/source/java/org/alfresco/web/action/evaluator/DiscussNodeEvaluator.java +++ b/source/java/org/alfresco/web/action/evaluator/DiscussNodeEvaluator.java @@ -16,7 +16,6 @@ */ package org.alfresco.web.action.evaluator; -import org.alfresco.model.ContentModel; import org.alfresco.model.ForumModel; import org.alfresco.web.action.ActionEvaluator; import org.alfresco.web.bean.repository.Node; diff --git a/source/java/org/alfresco/web/action/evaluator/DiscussionCutCopyEvaluator.java b/source/java/org/alfresco/web/action/evaluator/DiscussionCutCopyEvaluator.java new file mode 100644 index 0000000000..96922b2d77 --- /dev/null +++ b/source/java/org/alfresco/web/action/evaluator/DiscussionCutCopyEvaluator.java @@ -0,0 +1,45 @@ +package org.alfresco.web.action.evaluator; + +import javax.faces.context.FacesContext; + +import org.alfresco.model.ForumModel; +import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.namespace.QName; +import org.alfresco.web.action.ActionEvaluator; +import org.alfresco.web.bean.repository.Node; +import org.alfresco.web.bean.repository.Repository; + +/** + * Evaluates whether the cut or copy action should be visible. + * + * If the node is a discussion don't allow the action. + * + * @author gavinc + */ +public class DiscussionCutCopyEvaluator implements ActionEvaluator +{ + /** + * @see org.alfresco.web.action.ActionEvaluator#evaluate(org.alfresco.web.bean.repository.Node) + */ + public boolean evaluate(Node node) + { + boolean result = true; + + // if the node in question is a forum... + if (node.getType().equals(ForumModel.TYPE_FORUM)) + { + // get the association type + FacesContext context = FacesContext.getCurrentInstance(); + NodeService nodeService = Repository.getServiceRegistry(context).getNodeService(); + + ChildAssociationRef parentAssoc = nodeService.getPrimaryParent(node.getNodeRef()); + QName assocType = parentAssoc.getTypeQName(); + + // only allow the action if the association type is not the discussion assoc + result = (assocType.equals(ForumModel.ASSOC_DISCUSSION) == false); + } + + return result; + } +} diff --git a/source/java/org/alfresco/web/action/evaluator/RejectDocEvaluator.java b/source/java/org/alfresco/web/action/evaluator/RejectDocEvaluator.java index 9ad88edcf7..d05aaf227e 100644 --- a/source/java/org/alfresco/web/action/evaluator/RejectDocEvaluator.java +++ b/source/java/org/alfresco/web/action/evaluator/RejectDocEvaluator.java @@ -17,7 +17,6 @@ package org.alfresco.web.action.evaluator; import org.alfresco.model.ContentModel; -import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.web.action.ActionEvaluator; import org.alfresco.web.bean.repository.Node; diff --git a/source/java/org/alfresco/web/app/servlet/TemplateContentServlet.java b/source/java/org/alfresco/web/app/servlet/TemplateContentServlet.java index 8d51790e69..a264a278b2 100644 --- a/source/java/org/alfresco/web/app/servlet/TemplateContentServlet.java +++ b/source/java/org/alfresco/web/app/servlet/TemplateContentServlet.java @@ -261,13 +261,13 @@ public class TemplateContentServlet extends BaseServlet private Object getModel(ServiceRegistry services, HttpServletRequest req, NodeRef templateRef, NodeRef nodeRef) { // build FreeMarker default model and merge - Map root = DefaultModelHelper.buildDefaultModel(services, Application.getCurrentUser(req.getSession())); + Map root = DefaultModelHelper.buildDefaultModel( + services, Application.getCurrentUser(req.getSession()), templateRef); // put the current NodeRef in as "space" and "document" TemplateNode node = new TemplateNode(nodeRef, services, this.imageResolver); root.put("space", node); root.put("document", node); - root.put("template", new TemplateNode(templateRef, services, this.imageResolver)); // add URL arguments as a map called 'args' to the root of the model Map args = new HashMap(8, 1.0f); diff --git a/source/java/org/alfresco/web/bean/GroupsBean.java b/source/java/org/alfresco/web/bean/GroupsBean.java index 58b5c1de4a..5ee6f4a2ef 100644 --- a/source/java/org/alfresco/web/bean/GroupsBean.java +++ b/source/java/org/alfresco/web/bean/GroupsBean.java @@ -40,6 +40,7 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.security.AuthorityType; +import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.web.app.Application; @@ -568,16 +569,21 @@ public class GroupsBean implements IContextListener services.getNamespaceService(), false); - items = new SelectItem[nodes.size()]; - for (int index=0; index itemList = new ArrayList(nodes.size()); + for (NodeRef personRef : nodes) { - NodeRef personRef = nodes.get(index); - String firstName = (String)this.nodeService.getProperty(personRef, ContentModel.PROP_FIRSTNAME); - String lastName = (String)this.nodeService.getProperty(personRef, ContentModel.PROP_LASTNAME); String username = (String)this.nodeService.getProperty(personRef, ContentModel.PROP_USERNAME); - SelectItem item = new SortableSelectItem(username, firstName + " " + lastName, lastName); - items[index] = item; + if (PermissionService.GUEST_AUTHORITY.equals(username) == false) + { + String firstName = (String)this.nodeService.getProperty(personRef, ContentModel.PROP_FIRSTNAME); + String lastName = (String)this.nodeService.getProperty(personRef, ContentModel.PROP_LASTNAME); + + SelectItem item = new SortableSelectItem(username, firstName + " " + lastName, lastName); + itemList.add(item); + } } + items = new SelectItem[itemList.size()]; + itemList.toArray(items); // commit the transaction tx.commit(); diff --git a/source/java/org/alfresco/web/bean/wizard/InviteUsersWizard.java b/source/java/org/alfresco/web/bean/wizard/InviteUsersWizard.java index 0f38fee2aa..df0afdfb48 100644 --- a/source/java/org/alfresco/web/bean/wizard/InviteUsersWizard.java +++ b/source/java/org/alfresco/web/bean/wizard/InviteUsersWizard.java @@ -297,7 +297,7 @@ public abstract class InviteUsersWizard extends AbstractWizardBean NodeRef templateRef = new NodeRef(Repository.getStoreRef(), this.usingTemplate); ServiceRegistry services = Repository.getServiceRegistry(fc); Map model = DefaultModelHelper.buildDefaultModel( - services, Application.getCurrentUser(fc)); + services, Application.getCurrentUser(fc), templateRef); model.put("role", roleText); model.put("space", new TemplateNode(node, Repository.getServiceRegistry(fc), null)); diff --git a/source/java/org/alfresco/web/config/AspectEvaluator.java b/source/java/org/alfresco/web/config/AspectEvaluator.java index 482af8af95..164228e1e8 100644 --- a/source/java/org/alfresco/web/config/AspectEvaluator.java +++ b/source/java/org/alfresco/web/config/AspectEvaluator.java @@ -16,10 +16,9 @@ */ package org.alfresco.web.config; -import javax.faces.context.FacesContext; +import java.util.Set; import org.alfresco.config.evaluator.Evaluator; -import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.namespace.QName; import org.alfresco.web.bean.repository.Node; import org.alfresco.web.bean.repository.Repository; @@ -38,19 +37,18 @@ public final class AspectEvaluator implements Evaluator */ public boolean applies(Object obj, String condition) { + boolean result = false; + if (obj instanceof Node) { - DictionaryService dd = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getDictionaryService(); - QName aspectQName = Repository.resolveToQName(condition); - for (QName aspect : ((Node)obj).getAspects()) + Set aspects = ((Node)obj).getAspects(); + if (aspects != null) { - if (dd.isSubClass(aspect, aspectQName) == true) - { - return true; - } + QName spaceQName = Repository.resolveToQName(condition); + result = aspects.contains(spaceQName); } } - return false; + return result; } } diff --git a/source/java/org/alfresco/web/ui/repo/component/template/DefaultModelHelper.java b/source/java/org/alfresco/web/ui/repo/component/template/DefaultModelHelper.java index 22721ceb8b..8595d1d945 100644 --- a/source/java/org/alfresco/web/ui/repo/component/template/DefaultModelHelper.java +++ b/source/java/org/alfresco/web/ui/repo/component/template/DefaultModelHelper.java @@ -58,7 +58,7 @@ public class DefaultModelHelper * * @return Map containing the default model. */ - public static Map buildDefaultModel(ServiceRegistry services, User user) + public static Map buildDefaultModel(ServiceRegistry services, User user, NodeRef template) { if (services == null) { @@ -85,6 +85,12 @@ public class DefaultModelHelper // supply the current user Node as "person" root.put("person", new TemplateNode(user.getPerson(), services, imageResolver)); + // add the template itself as "template" if it comes from content on a node + if (template != null) + { + root.put("template", new TemplateNode(template, services, imageResolver)); + } + // current date/time is useful to have and isn't supplied by FreeMarker by default root.put("date", new Date()); diff --git a/source/java/org/alfresco/web/ui/repo/component/template/UITemplate.java b/source/java/org/alfresco/web/ui/repo/component/template/UITemplate.java index fc429f431d..0c362c3793 100644 --- a/source/java/org/alfresco/web/ui/repo/component/template/UITemplate.java +++ b/source/java/org/alfresco/web/ui/repo/component/template/UITemplate.java @@ -17,21 +17,16 @@ package org.alfresco.web.ui.repo.component.template; import java.io.IOException; -import java.util.Date; -import java.util.HashMap; import java.util.Map; import javax.faces.context.FacesContext; import javax.faces.el.ValueBinding; -import org.alfresco.repo.template.DateCompareMethod; -import org.alfresco.repo.template.HasAspectMethod; -import org.alfresco.repo.template.I18NMessageMethod; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.repository.TemplateException; import org.alfresco.service.cmr.repository.TemplateImageResolver; -import org.alfresco.service.cmr.repository.TemplateNode; import org.alfresco.service.cmr.repository.TemplateService; import org.alfresco.web.app.Application; import org.alfresco.web.bean.repository.Repository; @@ -108,9 +103,6 @@ public class UITemplate extends SelfRenderingComponent return; } - // get the data model to use - building default if required - Object model = getModel(); - // get the template to process String template = getTemplate(); if (template != null && template.length() != 0) @@ -125,6 +117,9 @@ public class UITemplate extends SelfRenderingComponent startTime = System.currentTimeMillis(); } + // get the data model to use - building default if required + Object model = getModel(); + // process the template against the model try { @@ -195,7 +190,16 @@ public class UITemplate extends SelfRenderingComponent FacesContext fc = FacesContext.getCurrentInstance(); ServiceRegistry services = Repository.getServiceRegistry(fc); User user = Application.getCurrentUser(fc); - Map root = DefaultModelHelper.buildDefaultModel(services, user); + + // add the template itself to the model + NodeRef templateRef = null; + if (getTemplate().indexOf(StoreRef.URI_FILLER) != -1) + { + // found a noderef template + templateRef = new NodeRef(getTemplate()); + } + + Map root = DefaultModelHelper.buildDefaultModel(services, user, templateRef); // merge models if (model instanceof Map)