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)