From fd5330fe56e115159ec763b10df114aa41b3492d Mon Sep 17 00:00:00 2001 From: Gavin Cornwell Date: Mon, 16 Jan 2006 14:09:01 +0000 Subject: [PATCH] Added document level security Fixed AWC-407 Added helper to Application to get client config git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2114 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/messages/webclient.properties | 16 +- config/alfresco/web-client-config.xml | 3 + .../org/alfresco/web/app/Application.java | 13 + .../alfresco/web/bean/AdvancedSearchBean.java | 4 +- .../org/alfresco/web/bean/BrowseBean.java | 5 +- .../org/alfresco/web/bean/ForumsBean.java | 10 +- .../org/alfresco/web/bean/NavigationBean.java | 5 +- .../web/bean/users/ContentUsersBean.java | 19 ++ .../web/bean/users/SpaceUsersBean.java | 19 ++ .../web/bean/users/UserMembersBean.java | 53 ++-- .../bean/wizard/InviteContentUsersWizard.java | 66 +++++ .../bean/wizard/InviteSpaceUsersWizard.java | 63 +++++ .../web/bean/wizard/InviteUsersWizard.java | 102 +++----- .../web/config/ClientConfigElement.java | 18 ++ .../web/config/ClientElementReader.java | 8 + .../component/UISearchCustomProperties.java | 4 +- .../repo/component/template/UITemplate.java | 7 - .../web/WEB-INF/faces-config-navigation.xml | 105 +++++++- source/web/WEB-INF/faces-config.xml | 86 ++++++- source/web/jsp/dialog/document-details.jsp | 6 + .../web/jsp/roles/edit-content-user-roles.jsp | 208 ++++++++++++++++ source/web/jsp/roles/edit-user-roles.jsp | 16 +- source/web/jsp/roles/manage-content-users.jsp | 235 ++++++++++++++++++ source/web/jsp/roles/manage-invited-users.jsp | 18 +- source/web/jsp/roles/remove-content-user.jsp | 168 +++++++++++++ source/web/jsp/roles/remove-invited-user.jsp | 6 +- .../wizard/invite-content-users/invite.jsp | 234 +++++++++++++++++ .../wizard/invite-content-users/notify.jsp | 215 ++++++++++++++++ source/web/jsp/wizard/invite-users/invite.jsp | 28 +-- source/web/jsp/wizard/invite-users/notify.jsp | 24 +- 30 files changed, 1584 insertions(+), 180 deletions(-) create mode 100644 source/java/org/alfresco/web/bean/users/ContentUsersBean.java create mode 100644 source/java/org/alfresco/web/bean/users/SpaceUsersBean.java create mode 100644 source/java/org/alfresco/web/bean/wizard/InviteContentUsersWizard.java create mode 100644 source/java/org/alfresco/web/bean/wizard/InviteSpaceUsersWizard.java create mode 100644 source/web/jsp/roles/edit-content-user-roles.jsp create mode 100644 source/web/jsp/roles/manage-content-users.jsp create mode 100644 source/web/jsp/roles/remove-content-user.jsp create mode 100644 source/web/jsp/wizard/invite-content-users/invite.jsp create mode 100644 source/web/jsp/wizard/invite-content-users/notify.jsp diff --git a/config/alfresco/messages/webclient.properties b/config/alfresco/messages/webclient.properties index 184886fdfb..bd766cc4f7 100644 --- a/config/alfresco/messages/webclient.properties +++ b/config/alfresco/messages/webclient.properties @@ -22,7 +22,9 @@ editfileinline_description=Edit the content of the document, then click Save. createfile_description=Enter new content. manageusers_description=Manage the users of the repository. manage_invited_users_description=Manage the permissions you have granted to users who access your space. +manage_content_users_description=Manage the permissions you have granted to users who access your content. modify_user_roles_description=Modify the permissions granted to a user for accessing your space. +modify_content_user_roles_description=Modify the permissions granted to a user for accessing your content. advancedsearch_description=Perform a more detailed search of the repository. editdocument_description=Modify the document properties then click OK. editcategory_description=Set the category for the document then click OK. @@ -220,6 +222,7 @@ manage_rules=Manage Content Rules manage_users=Manage System Users manage_groups=Manage User Groups manage_invited_users=Manage Space Users +manage_content_users=Manage Content Users modify_user_roles=Modify User Roles for modify=Modify view=View @@ -416,7 +419,7 @@ send_email=Do you want to send an email to notify the invited users? subject=Subject body=Body automatic_text=Automatic text -invite_space=You have been invited to ''{0}'' by {1}. +invited_to=You have been invited to ''{0}'' by {1}. invite_role=You will have the role of: {0} invite_finish_instruction=To close this wizard and apply your changes click Finish. To review or change your selections click Back. remove_invited_user_info=To remove an invited user from this space, click Yes. @@ -425,6 +428,13 @@ space_owner=User ''{0}'' is the current owner of this space. users_and_groups=Users and Groups authority=Username +# Invite Content Users Wizard messages +invite_content_title=Invite Content Users Wizard +invite_content_desc=This wizard helps you to give other users access to your content. +invite_content_step1_desc=Select the users and roles they will play for this content. +remove_content_user_info=To remove an invited user from this content, click Yes. +content_owner=User ''{0}'' is the current owner of this content. + # System Users messages create_user=Create User change_password=Change Password @@ -746,6 +756,8 @@ title_browse=Alfresco Web Client title_create_space=Create Space title_inviteusers_invite=Invite Users - Invite title_inviteusers_notify=Invite Users - Notify +title_invitecontentusers_invite=Invite Content Users - Invite +title_invitecontentusers_notify=Invite Content Users - Notify title_change_user_roles=Change User Roles title_remove_invited_user=Remove Invited User title_advanced_search=Advanced Search @@ -772,6 +784,7 @@ title_undo_checkout=Undo Check Out title_update_file=Update File Content title_users=User Management title_invited_users=Manage Invited Users +title_content_users=Manage Content Users title_add_content_props=Add Content - Properties title_add_content_summary=Add Content - Summary title_add_content_upload=Add Content - Upload @@ -923,6 +936,7 @@ delete_user_info=To delete this user, click Yes. delete_rule_confirm=Are you sure you want to delete \"{0}\"? delete_user_confirm=The User will no longer be able to access the system. Are you sure you want to delete user \"{0}\"? remove_invited_user_confirm=The User will no longer be able to access the documents and folders in this space. Are you sure you want to remove user \"{0}\"? +remove_content_user_confirm=The User will no longer be able to access this content. Are you sure you want to remove user \"{0}\"? delete_companyroot_confirm=WARNING: This folder is a special folder accessed by all Users! Please be sure that you wish to delete this folder. It may cause System Errors if you remove it. # Status Messages diff --git a/config/alfresco/web-client-config.xml b/config/alfresco/web-client-config.xml index 87bd899781..2f2c2e4dff 100644 --- a/config/alfresco/web-client-config.xml +++ b/config/alfresco/web-client-config.xml @@ -118,6 +118,9 @@ http + + + alfresco@alfresco.org diff --git a/source/java/org/alfresco/web/app/Application.java b/source/java/org/alfresco/web/app/Application.java index 36d1ae2d5a..fbe6d21298 100644 --- a/source/java/org/alfresco/web/app/Application.java +++ b/source/java/org/alfresco/web/app/Application.java @@ -39,6 +39,7 @@ import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.web.app.servlet.AuthenticationHelper; import org.alfresco.web.bean.ErrorBean; import org.alfresco.web.bean.repository.User; +import org.alfresco.web.config.ClientConfigElement; import org.alfresco.web.config.ServerConfigElement; import org.apache.commons.logging.Log; import org.springframework.web.context.WebApplicationContext; @@ -546,6 +547,18 @@ public class Application Application.BEAN_CONFIG_SERVICE); } + /** + * Helper to get the client config element from the config service + * + * @param context FacesContext + * @return The ClientConfigElement + */ + public static ClientConfigElement getClientConfig(FacesContext context) + { + return (ClientConfigElement)getConfigService(context).getGlobalConfig(). + getConfigElement(ClientConfigElement.CONFIG_ELEMENT_ID); + } + /** * Returns the repository store URL * diff --git a/source/java/org/alfresco/web/bean/AdvancedSearchBean.java b/source/java/org/alfresco/web/bean/AdvancedSearchBean.java index 82931b0cdc..65d523f983 100644 --- a/source/java/org/alfresco/web/bean/AdvancedSearchBean.java +++ b/source/java/org/alfresco/web/bean/AdvancedSearchBean.java @@ -1213,9 +1213,7 @@ public class AdvancedSearchBean { if (clientConfigElement == null) { - ConfigService configService = Application.getConfigService(FacesContext.getCurrentInstance()); - clientConfigElement = (ClientConfigElement)configService.getGlobalConfig().getConfigElement( - ClientConfigElement.CONFIG_ELEMENT_ID); + clientConfigElement = Application.getClientConfig(FacesContext.getCurrentInstance()); } return clientConfigElement; } diff --git a/source/java/org/alfresco/web/bean/BrowseBean.java b/source/java/org/alfresco/web/bean/BrowseBean.java index 444e05942a..20ab2ef2df 100644 --- a/source/java/org/alfresco/web/bean/BrowseBean.java +++ b/source/java/org/alfresco/web/bean/BrowseBean.java @@ -1245,10 +1245,7 @@ public class BrowseBean implements IContextListener */ private void initFromClientConfig() { - this.clientConfig = (ClientConfigElement)Application.getConfigService( - FacesContext.getCurrentInstance()).getGlobalConfig(). - getConfigElement(ClientConfigElement.CONFIG_ELEMENT_ID); - + this.clientConfig = Application.getClientConfig(FacesContext.getCurrentInstance()); this.browseViewMode = clientConfig.getDefaultView(PAGE_NAME_BROWSE); this.browsePageSize = clientConfig.getDefaultPageSize(PAGE_NAME_BROWSE, this.browseViewMode); diff --git a/source/java/org/alfresco/web/bean/ForumsBean.java b/source/java/org/alfresco/web/bean/ForumsBean.java index 34dcf45e34..4bc54d5cd5 100644 --- a/source/java/org/alfresco/web/bean/ForumsBean.java +++ b/source/java/org/alfresco/web/bean/ForumsBean.java @@ -952,22 +952,20 @@ public class ForumsBean implements IContextListener */ private void initFromClientConfig() { - this.clientConfig = (ClientConfigElement)Application.getConfigService( - FacesContext.getCurrentInstance()).getGlobalConfig(). - getConfigElement(ClientConfigElement.CONFIG_ELEMENT_ID); + this.clientConfig = Application.getClientConfig(FacesContext.getCurrentInstance()); // get the defaults for the forums page - this.forumsViewMode = clientConfig.getDefaultView(PAGE_NAME_FORUMS); + this.forumsViewMode = this.clientConfig.getDefaultView(PAGE_NAME_FORUMS); this.forumsPageSize = this.clientConfig.getDefaultPageSize(PAGE_NAME_FORUMS, this.forumsViewMode); // get the default for the forum page - this.forumViewMode = clientConfig.getDefaultView(PAGE_NAME_FORUM); + this.forumViewMode = this.clientConfig.getDefaultView(PAGE_NAME_FORUM); this.forumPageSize = this.clientConfig.getDefaultPageSize(PAGE_NAME_FORUM, this.forumViewMode); // get the default for the topic page - this.topicViewMode = clientConfig.getDefaultView(PAGE_NAME_TOPIC); + this.topicViewMode = this.clientConfig.getDefaultView(PAGE_NAME_TOPIC); this.topicPageSize = this.clientConfig.getDefaultPageSize(PAGE_NAME_TOPIC, this.topicViewMode); diff --git a/source/java/org/alfresco/web/bean/NavigationBean.java b/source/java/org/alfresco/web/bean/NavigationBean.java index bb0d8fea2b..10ff5d426a 100644 --- a/source/java/org/alfresco/web/bean/NavigationBean.java +++ b/source/java/org/alfresco/web/bean/NavigationBean.java @@ -540,10 +540,7 @@ public class NavigationBean */ private void initFromClientConfig() { - this.clientConfig = (ClientConfigElement)Application.getConfigService( - FacesContext.getCurrentInstance()).getGlobalConfig(). - getConfigElement(ClientConfigElement.CONFIG_ELEMENT_ID); - + this.clientConfig = Application.getClientConfig(FacesContext.getCurrentInstance()); this.helpUrl = clientConfig.getHelpUrl(); this.shelfExpanded = clientConfig.isShelfVisible(); } diff --git a/source/java/org/alfresco/web/bean/users/ContentUsersBean.java b/source/java/org/alfresco/web/bean/users/ContentUsersBean.java new file mode 100644 index 0000000000..3b7fa8204f --- /dev/null +++ b/source/java/org/alfresco/web/bean/users/ContentUsersBean.java @@ -0,0 +1,19 @@ +package org.alfresco.web.bean.users; + +import org.alfresco.web.bean.repository.Node; + +/** + * Concrete implementation providing access to users of the current content/document. + * + * @author gavinc + */ +public class ContentUsersBean extends UserMembersBean +{ + /** + * @return The space to work against + */ + public Node getNode() + { + return this.browseBean.getDocument(); + } +} diff --git a/source/java/org/alfresco/web/bean/users/SpaceUsersBean.java b/source/java/org/alfresco/web/bean/users/SpaceUsersBean.java new file mode 100644 index 0000000000..929b2800a6 --- /dev/null +++ b/source/java/org/alfresco/web/bean/users/SpaceUsersBean.java @@ -0,0 +1,19 @@ +package org.alfresco.web.bean.users; + +import org.alfresco.web.bean.repository.Node; + +/** + * Concrete implementation providing access to users of the current space. + * + * @author gavinc + */ +public class SpaceUsersBean extends UserMembersBean +{ + /** + * @return The space to work against + */ + public Node getNode() + { + return this.browseBean.getActionSpace(); + } +} diff --git a/source/java/org/alfresco/web/bean/users/UserMembersBean.java b/source/java/org/alfresco/web/bean/users/UserMembersBean.java index 5b57b41e96..48aa70beaf 100644 --- a/source/java/org/alfresco/web/bean/users/UserMembersBean.java +++ b/source/java/org/alfresco/web/bean/users/UserMembersBean.java @@ -45,12 +45,10 @@ import org.alfresco.service.cmr.security.OwnableService; import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.web.app.Application; -import org.alfresco.web.app.context.UIContextService; import org.alfresco.web.bean.BrowseBean; import org.alfresco.web.bean.repository.MapNode; import org.alfresco.web.bean.repository.Node; import org.alfresco.web.bean.repository.Repository; -import org.alfresco.web.bean.repository.User; import org.alfresco.web.ui.common.Utils; import org.alfresco.web.ui.common.component.UIActionLink; import org.alfresco.web.ui.common.component.data.UIRichList; @@ -59,7 +57,7 @@ import org.alfresco.web.ui.repo.WebResources; /** * @author Kevin Roast */ -public class UserMembersBean +public abstract class UserMembersBean { private static final String MSG_SUCCESS_INHERIT_NOT = "success_not_inherit_permissions"; private static final String MSG_SUCCESS_INHERIT = "success_inherit_permissions"; @@ -69,22 +67,22 @@ public class UserMembersBean private static final String OUTCOME_FINISH = "finish"; /** NodeService bean reference */ - private NodeService nodeService; + protected NodeService nodeService; /** SearchService bean reference */ - private SearchService searchService; + protected SearchService searchService; /** PermissionService bean reference */ - private PermissionService permissionService; + protected PermissionService permissionService; /** PersonService bean reference */ - private PersonService personService; + protected PersonService personService; /** BrowseBean bean refernce */ - private BrowseBean browseBean; + protected BrowseBean browseBean; /** OwnableService bean reference */ - private OwnableService ownableService; + protected OwnableService ownableService; /** Component reference for Users RichList control */ private UIRichList usersRichList; @@ -101,6 +99,15 @@ public class UserMembersBean /** roles for current person */ private List personRoles = null; + // ------------------------------------------------------------------------------ + // Abstract methods + + /** + * Returns the node that is being acted upon + * + * @return The node to manage permissions for + */ + public abstract Node getNode(); // ------------------------------------------------------------------------------ // Bean property getters and setters @@ -153,14 +160,6 @@ public class UserMembersBean this.browseBean = browseBean; } - /** - * @return The space to work against - */ - public Node getSpace() - { - return this.browseBean.getActionSpace(); - } - /** * @return Returns the usersRichList. */ @@ -234,7 +233,7 @@ public class UserMembersBean */ public boolean getHasChangePermissions() { - return getSpace().hasPermission(PermissionService.CHANGE_PERMISSIONS); + return getNode().hasPermission(PermissionService.CHANGE_PERMISSIONS); } /** @@ -242,7 +241,7 @@ public class UserMembersBean */ public boolean isInheritPermissions() { - return this.permissionService.getInheritParentPermissions(getSpace().getNodeRef()); + return this.permissionService.getInheritParentPermissions(getNode().getNodeRef()); } /** @@ -258,7 +257,7 @@ public class UserMembersBean */ public String getOwner() { - return this.ownableService.getOwner(getSpace().getNodeRef()); + return this.ownableService.getOwner(getNode().getNodeRef()); } /** @@ -279,9 +278,8 @@ public class UserMembersBean // Return all the permissions set against the current node // for any authentication instance (user). // Then combine them into a single list for each authentication found. - User user = Application.getCurrentUser(context); Map> permissionMap = new HashMap>(13, 1.0f); - Set permissions = permissionService.getAllSetPermissions(getSpace().getNodeRef()); + Set permissions = permissionService.getAllSetPermissions(getNode().getNodeRef()); if (permissions != null) { for (AccessPermission permission : permissions) @@ -326,8 +324,7 @@ public class UserMembersBean // it is much better for performance to do this now rather than during page bind Map props = node.getProperties(); props.put("fullName", ((String)props.get("firstName")) + ' ' + ((String)props.get("lastName"))); - - String userName = (String)props.get("userName"); + props.put("roles", listToString(context, permissionMap.get(authority))); props.put("icon", WebResources.IMAGE_PERSON); @@ -426,7 +423,7 @@ public class UserMembersBean // setup roles for this Authority List userPermissions = new ArrayList(4); - Set permissions = permissionService.getAllSetPermissions(getSpace().getNodeRef()); + Set permissions = permissionService.getAllSetPermissions(getNode().getNodeRef()); if (permissions != null) { for (AccessPermission permission : permissions) @@ -471,7 +468,7 @@ public class UserMembersBean { // change the value to the new selected value boolean inheritPermissions = (Boolean)event.getNewValue(); - this.permissionService.setInheritParentPermissions(getSpace().getNodeRef(), inheritPermissions); + this.permissionService.setInheritParentPermissions(getNode().getNodeRef(), inheritPermissions); // inform the user that the change occured FacesContext context = FacesContext.getCurrentInstance(); @@ -542,7 +539,7 @@ public class UserMembersBean // clear the currently set permissions for this user // and add each of the new permissions in turn - NodeRef nodeRef = getSpace().getNodeRef(); + NodeRef nodeRef = getNode().getNodeRef(); this.permissionService.clearPermission(nodeRef, getPersonAuthority()); for (PermissionWrapper wrapper : personRoles) { @@ -585,7 +582,7 @@ public class UserMembersBean if (getPersonAuthority() != null) { // clear permissions for the specified Authority - this.permissionService.clearPermission(getSpace().getNodeRef(), getPersonAuthority()); + this.permissionService.clearPermission(getNode().getNodeRef(), getPersonAuthority()); } // commit the transaction diff --git a/source/java/org/alfresco/web/bean/wizard/InviteContentUsersWizard.java b/source/java/org/alfresco/web/bean/wizard/InviteContentUsersWizard.java new file mode 100644 index 0000000000..fcd3cbe960 --- /dev/null +++ b/source/java/org/alfresco/web/bean/wizard/InviteContentUsersWizard.java @@ -0,0 +1,66 @@ +package org.alfresco.web.bean.wizard; + +import java.util.Set; + +import javax.faces.context.FacesContext; + +import org.alfresco.model.ContentModel; +import org.alfresco.web.app.Application; +import org.alfresco.web.bean.repository.Node; + +/** + * Concrete implementation providing the ability to invite users to content. + * + * @author gavinc + */ +public class InviteContentUsersWizard extends InviteUsersWizard +{ + private static final String WIZARD_TITLE_ID = "invite_content_title"; + private static final String WIZARD_DESC_ID = "invite_content_desc"; + private static final String STEP1_DESCRIPTION_ID = "invite_content_step1_desc"; + + /** Cache of available content permissions */ + Set contentPermissions = null; + + /** + * @see org.alfresco.web.bean.wizard.AbstractWizardBean#getWizardDescription() + */ + public String getWizardDescription() + { + return Application.getMessage(FacesContext.getCurrentInstance(), WIZARD_DESC_ID); + } + + /** + * @see org.alfresco.web.bean.wizard.AbstractWizardBean#getWizardTitle() + */ + public String getWizardTitle() + { + return Application.getMessage(FacesContext.getCurrentInstance(), WIZARD_TITLE_ID); + } + + @Override + protected String getStep1DescriptionText() + { + return STEP1_DESCRIPTION_ID; + } + + @Override + protected Set getPermissionsForType() + { + if (this.contentPermissions == null) + { + // TODO: This should really request permissions from TYPE_CONTENT but there are other permissions + // defined at that level at the moment that get exposed when we don't want them to, see + // http://www.alfresco.org/jira/browse/AR-343 + this.contentPermissions = this.permissionService.getSettablePermissions(ContentModel.TYPE_CMOBJECT); + } + + return this.contentPermissions; + } + + @Override + protected Node getNode() + { + return this.browseBean.getDocument(); + } +} diff --git a/source/java/org/alfresco/web/bean/wizard/InviteSpaceUsersWizard.java b/source/java/org/alfresco/web/bean/wizard/InviteSpaceUsersWizard.java new file mode 100644 index 0000000000..1acb0bc0bf --- /dev/null +++ b/source/java/org/alfresco/web/bean/wizard/InviteSpaceUsersWizard.java @@ -0,0 +1,63 @@ +package org.alfresco.web.bean.wizard; + +import java.util.Set; + +import javax.faces.context.FacesContext; + +import org.alfresco.model.ContentModel; +import org.alfresco.web.app.Application; +import org.alfresco.web.bean.repository.Node; + +/** + * Concrete implementation providing the ability to invite users to a space. + * + * @author gavinc + */ +public class InviteSpaceUsersWizard extends InviteUsersWizard +{ + private static final String WIZARD_TITLE_ID = "invite_title"; + private static final String WIZARD_DESC_ID = "invite_desc"; + private static final String STEP1_DESCRIPTION_ID = "invite_step1_desc"; + + /** Cache of available folder permissions */ + Set folderPermissions = null; + + /** + * @see org.alfresco.web.bean.wizard.AbstractWizardBean#getWizardDescription() + */ + public String getWizardDescription() + { + return Application.getMessage(FacesContext.getCurrentInstance(), WIZARD_DESC_ID); + } + + /** + * @see org.alfresco.web.bean.wizard.AbstractWizardBean#getWizardTitle() + */ + public String getWizardTitle() + { + return Application.getMessage(FacesContext.getCurrentInstance(), WIZARD_TITLE_ID); + } + + @Override + protected String getStep1DescriptionText() + { + return STEP1_DESCRIPTION_ID; + } + + @Override + protected Set getPermissionsForType() + { + if (this.folderPermissions == null) + { + this.folderPermissions = this.permissionService.getSettablePermissions(ContentModel.TYPE_FOLDER); + } + + return this.folderPermissions; + } + + @Override + protected Node getNode() + { + return this.browseBean.getActionSpace(); + } +} diff --git a/source/java/org/alfresco/web/bean/wizard/InviteUsersWizard.java b/source/java/org/alfresco/web/bean/wizard/InviteUsersWizard.java index 0de1427c35..c78731c1f9 100644 --- a/source/java/org/alfresco/web/bean/wizard/InviteUsersWizard.java +++ b/source/java/org/alfresco/web/bean/wizard/InviteUsersWizard.java @@ -54,19 +54,16 @@ import org.springframework.mail.javamail.JavaMailSender; /** * @author Kevin Roast */ -public class InviteUsersWizard extends AbstractWizardBean +public abstract class InviteUsersWizard extends AbstractWizardBean { private static Log logger = LogFactory.getLog(InviteUsersWizard.class); /** I18N message strings */ private static final String MSG_USERS = "users"; private static final String MSG_GROUPS = "groups"; - private static final String MSG_INVITED_SPACE = "invite_space"; + private static final String MSG_INVITED_TO = "invited_to"; private static final String MSG_INVITED_ROLE = "invite_role"; - private static final String WIZARD_TITLE_ID = "invite_title"; - private static final String WIZARD_DESC_ID = "invite_desc"; private static final String STEP1_TITLE_ID = "invite_step1_title"; - private static final String STEP1_DESCRIPTION_ID = "invite_step1_desc"; private static final String STEP2_TITLE_ID = "invite_step2_title"; private static final String STEP2_DESCRIPTION_ID = "invite_step2_desc"; private static final String FINISH_INSTRUCTION_ID = "invite_finish_instruction"; @@ -74,19 +71,19 @@ public class InviteUsersWizard extends AbstractWizardBean private static final String NOTIFY_YES = "yes"; /** NamespaceService bean reference */ - private NamespaceService namespaceService; + protected NamespaceService namespaceService; /** JavaMailSender bean reference */ - private JavaMailSender mailSender; + protected JavaMailSender mailSender; /** AuthorityService bean reference */ - private AuthorityService authorityService; + protected AuthorityService authorityService; /** PermissionService bean reference */ - private PermissionService permissionService; + protected PermissionService permissionService; /** personService bean reference */ - private PersonService personService; + protected PersonService personService; /** datamodel for table of roles for users */ private DataModel userRolesDataModel = null; @@ -94,9 +91,6 @@ public class InviteUsersWizard extends AbstractWizardBean /** list of user/group role wrapper objects */ private List userGroupRoles = null; - /** Cache of available folder permissions */ - Set folderPermissions = null; - /** dialog state */ private String notify = NOTIFY_YES; private String subject = null; @@ -104,6 +98,20 @@ public class InviteUsersWizard extends AbstractWizardBean private String internalSubject = null; private String automaticText = null; + /** + * @return a cached list of available permissions for the type being dealt with + */ + protected abstract Set getPermissionsForType(); + + /** + * @return Returns the node that the permissions are being applied to + */ + protected abstract Node getNode(); + + /** + * @return The text to use for the description of step 1 (depends on the type being dealt with) + */ + protected abstract String getStep1DescriptionText(); /** * @param namespaceService The NamespaceService to set. @@ -186,12 +194,12 @@ public class InviteUsersWizard extends AbstractWizardBean String from = (String)this.nodeService.getProperty(user.getPerson(), ContentModel.PROP_EMAIL); if (from == null || from.length() == 0) { - // TODO: get this from spring config? - from = "alfresco@alfresco.org"; + // if the user does not have an email address get the default one from the config service + from = Application.getClientConfig(context).getFromEmailAddress(); } // get the Space to apply changes too - NodeRef folderNodeRef = this.browseBean.getActionSpace().getNodeRef(); + NodeRef nodeRef = this.getNode().getNodeRef(); // set permissions for each user and send them a mail for (int i=0; i perms = getFolderPermissions(); + Set perms = getPermissionsForType(); for (String permission : perms) { if (userGroupRole.getRole().equals(permission)) { this.permissionService.setPermission( - folderNodeRef, + nodeRef, authority, permission, true); @@ -223,7 +231,7 @@ public class InviteUsersWizard extends AbstractWizardBean { if (this.personService.personExists(authority) == true) { - notifyUser(this.personService.getPerson(authority), folderNodeRef, from, userGroupRole.getRole()); + notifyUser(this.personService.getPerson(authority), nodeRef, from, userGroupRole.getRole()); } } else if (authType.equals(AuthorityType.GROUP)) @@ -234,7 +242,7 @@ public class InviteUsersWizard extends AbstractWizardBean { if (this.personService.personExists(userAuth) == true) { - notifyUser(this.personService.getPerson(userAuth), folderNodeRef, from, userGroupRole.getRole()); + notifyUser(this.personService.getPerson(userAuth), nodeRef, from, userGroupRole.getRole()); } } } @@ -262,11 +270,11 @@ public class InviteUsersWizard extends AbstractWizardBean * Send an email notification to the specified User authority * * @param person Person node representing the user - * @param folder Folder node they are invited too + * @param node Node they are invited too * @param from From text message * @param roleText The role display label for the user invite notification */ - private void notifyUser(NodeRef person, NodeRef folder, String from, String roleText) + private void notifyUser(NodeRef person, NodeRef node, String from, String roleText) { String to = (String)this.nodeService.getProperty(person, ContentModel.PROP_EMAIL); @@ -275,10 +283,10 @@ public class InviteUsersWizard extends AbstractWizardBean String msgRole = Application.getMessage(FacesContext.getCurrentInstance(), MSG_INVITED_ROLE); String roleMessage = MessageFormat.format(msgRole, new Object[] {roleText}); - // TODO: include External Authentication link to the invited space - //String args = folder.getStoreRef().getProtocol() + '/' + - // folder.getStoreRef().getIdentifier() + '/' + - // folder.getId(); + // TODO: include External Authentication link to the invited node + //String args = node.getStoreRef().getProtocol() + '/' + + // node.getStoreRef().getIdentifier() + '/' + + // node.getId(); //String url = ExternalAccessServlet.generateExternalURL(LoginBean.OUTCOME_SPACEDETAILS, args); String body = this.internalSubject + "\r\n\r\n" + roleMessage + "\r\n\r\n";// + url + "\r\n\r\n"; @@ -513,7 +521,7 @@ public class InviteUsersWizard extends AbstractWizardBean ResourceBundle bundle = Application.getBundle(FacesContext.getCurrentInstance()); // get available roles (grouped permissions) from the permission service - Set perms = getFolderPermissions(); + Set perms = getPermissionsForType(); SelectItem[] roles = new SelectItem[perms.size()]; int index = 0; for (String permission : perms) @@ -590,22 +598,6 @@ public class InviteUsersWizard extends AbstractWizardBean } /** - * @see org.alfresco.web.bean.wizard.AbstractWizardBean#getWizardDescription() - */ - public String getWizardDescription() - { - return Application.getMessage(FacesContext.getCurrentInstance(), WIZARD_DESC_ID); - } - - /** - * @see org.alfresco.web.bean.wizard.AbstractWizardBean#getWizardTitle() - */ - public String getWizardTitle() - { - return Application.getMessage(FacesContext.getCurrentInstance(), WIZARD_TITLE_ID); - } - - /** * @see org.alfresco.web.bean.wizard.AbstractWizardBean#getStepDescription() */ public String getStepDescription() @@ -616,7 +608,7 @@ public class InviteUsersWizard extends AbstractWizardBean { case 1: { - stepDesc = Application.getMessage(FacesContext.getCurrentInstance(), STEP1_DESCRIPTION_ID); + stepDesc = Application.getMessage(FacesContext.getCurrentInstance(), getStep1DescriptionText()); break; } case 2: @@ -699,10 +691,10 @@ public class InviteUsersWizard extends AbstractWizardBean StringBuilder buf = new StringBuilder(256); String personName = Application.getCurrentUser(context).getFullName(getNodeService()); - String msgInvite = Application.getMessage(context, MSG_INVITED_SPACE); - Node node = this.browseBean.getActionSpace(); + String msgInvitedTo = Application.getMessage(context, MSG_INVITED_TO); + Node node = this.getNode(); String path = this.nodeService.getPath(node.getNodeRef()).toDisplayPath(this.nodeService); - buf.append(MessageFormat.format(msgInvite, new Object[] { + buf.append(MessageFormat.format(msgInvitedTo, new Object[] { path + '/' + node.getName(), personName}) ); @@ -756,21 +748,7 @@ public class InviteUsersWizard extends AbstractWizardBean } return outcome; - } - - /** - * @return a cached list of available folder permissions - */ - private Set getFolderPermissions() - { - if (this.folderPermissions == null) - { - this.folderPermissions = this.permissionService.getSettablePermissions(ContentModel.TYPE_FOLDER); - } - - return this.folderPermissions; - } - + } /** * Simple wrapper class to represent a user/group and a role combination diff --git a/source/java/org/alfresco/web/config/ClientConfigElement.java b/source/java/org/alfresco/web/config/ClientConfigElement.java index d99265fbb9..5b2596336c 100644 --- a/source/java/org/alfresco/web/config/ClientConfigElement.java +++ b/source/java/org/alfresco/web/config/ClientConfigElement.java @@ -44,6 +44,7 @@ public class ClientConfigElement extends ConfigElementAdapter private String defaultView = "details"; private String defaultSortColumn = "name"; private String defaultSortOrder = "ascending"; + private String fromEmailAddress = "alfresco@alfresco.org"; // list to store all the configured views private List views = new ArrayList(4); @@ -323,6 +324,23 @@ public class ClientConfigElement extends ConfigElementAdapter this.helpUrl = helpUrl; } + /** + * @return Returns the from email address, if one has not been set + * alfresco@alfresco.org will be returned + */ + public String getFromEmailAddress() + { + return this.fromEmailAddress; + } + + /** + * @param fromEmailAddress The from email address to set + */ + /*package*/ void setFromEmailAddress(String fromEmailAddress) + { + this.fromEmailAddress = fromEmailAddress; + } + /** * @return Returns the edit link type. */ diff --git a/source/java/org/alfresco/web/config/ClientElementReader.java b/source/java/org/alfresco/web/config/ClientElementReader.java index fa74eb49ee..f3d13d1f8b 100644 --- a/source/java/org/alfresco/web/config/ClientElementReader.java +++ b/source/java/org/alfresco/web/config/ClientElementReader.java @@ -55,6 +55,7 @@ public class ClientElementReader implements ConfigElementReader public static final String ELEMENT_TYPE = "type"; public static final String ELEMENT_CUSTOMPROPS = "custom-properties"; public static final String ELEMENT_METADATA = "meta-data"; + public static final String ELEMENT_FROMEMAILADDRESS = "from-email-address"; public static final String ATTRIBUTE_TYPE = "type"; public static final String ATTRIBUTE_PROPERTY = "property"; public static final String ATTRIBUTE_ASPECT = "aspect"; @@ -200,6 +201,13 @@ public class ClientElementReader implements ConfigElementReader configElement.setHomeSpacePermission(permission.getTextTrim()); } + // get the from address to use when sending emails from the client + Element fromEmail = element.element(ELEMENT_FROMEMAILADDRESS); + if (fromEmail != null) + { + configElement.setFromEmailAddress(fromEmail.getTextTrim()); + } + // get the Advanced Search config block Element advsearch = element.element(ELEMENT_ADVANCEDSEARCH); if (advsearch != null) diff --git a/source/java/org/alfresco/web/ui/repo/component/UISearchCustomProperties.java b/source/java/org/alfresco/web/ui/repo/component/UISearchCustomProperties.java index 50686d5c8c..0b7c994c20 100644 --- a/source/java/org/alfresco/web/ui/repo/component/UISearchCustomProperties.java +++ b/source/java/org/alfresco/web/ui/repo/component/UISearchCustomProperties.java @@ -136,9 +136,7 @@ public class UISearchCustomProperties extends SelfRenderingComponent implements private void createComponentsFromConfig(FacesContext context) { DictionaryService dd = Repository.getServiceRegistry(context).getDictionaryService(); - ConfigService configService = Application.getConfigService(context); - ClientConfigElement clientConfig = (ClientConfigElement)configService.getGlobalConfig().getConfigElement( - ClientConfigElement.CONFIG_ELEMENT_ID); + ClientConfigElement clientConfig = Application.getClientConfig(context); // create an appropriate component for each custom property // using the DataDictionary to look-up labels and value types 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 1eb06707ec..444a44b835 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 @@ -24,7 +24,6 @@ import java.util.Map; import javax.faces.context.FacesContext; import javax.faces.el.ValueBinding; -import org.alfresco.config.ConfigService; import org.alfresco.repo.template.DateCompareMethod; import org.alfresco.repo.template.HasAspectMethod; import org.alfresco.repo.template.I18NMessageMethod; @@ -37,7 +36,6 @@ import org.alfresco.service.cmr.repository.TemplateService; import org.alfresco.web.app.Application; import org.alfresco.web.bean.repository.Repository; import org.alfresco.web.bean.repository.User; -import org.alfresco.web.config.ClientConfigElement; import org.alfresco.web.ui.common.Utils; import org.alfresco.web.ui.common.component.SelfRenderingComponent; import org.apache.log4j.Logger; @@ -113,11 +111,6 @@ public class UITemplate extends SelfRenderingComponent // get the data model to use - building default if required Object model = getModel(); - // get the configservice to find the appropriate processor - ConfigService service = Application.getConfigService(context); - ClientConfigElement clientConfig = (ClientConfigElement)service.getGlobalConfig().getConfigElement( - ClientConfigElement.CONFIG_ELEMENT_ID); - // get the template to process String template = getTemplate(); if (template != null && template.length() != 0) diff --git a/source/web/WEB-INF/faces-config-navigation.xml b/source/web/WEB-INF/faces-config-navigation.xml index cc7646e638..8e00322898 100644 --- a/source/web/WEB-INF/faces-config-navigation.xml +++ b/source/web/WEB-INF/faces-config-navigation.xml @@ -146,6 +146,10 @@ manageInvitedUsers /jsp/roles/manage-invited-users.jsp + + manageContentUsers + /jsp/roles/manage-content-users.jsp + manageRules /jsp/dialog/rules.jsp @@ -363,6 +367,10 @@ showForum /jsp/forums/forum.jsp + + manageContentUsers + /jsp/roles/manage-content-users.jsp + @@ -434,18 +442,6 @@ - - /jsp/roles/* - - cancel - /jsp/roles/manage-invited-users.jsp - - - finish - /jsp/roles/manage-invited-users.jsp - - - /jsp/roles/manage-invited-users.jsp @@ -462,6 +458,70 @@ + + /jsp/roles/edit-user-roles.jsp + + cancel + /jsp/roles/manage-invited-users.jsp + + + finish + /jsp/roles/manage-invited-users.jsp + + + + + /jsp/roles/remove-invited-user.jsp + + cancel + /jsp/roles/manage-invited-users.jsp + + + finish + /jsp/roles/manage-invited-users.jsp + + + + + /jsp/roles/manage-content-users.jsp + + inviteUsers + /jsp/wizard/invite-content-users/invite.jsp + + + editRoles + /jsp/roles/edit-content-user-roles.jsp + + + removeUser + /jsp/roles/remove-content-user.jsp + + + + + /jsp/roles/edit-content-user-roles.jsp + + cancel + /jsp/roles/manage-content-users.jsp + + + finish + /jsp/roles/manage-content-users.jsp + + + + + /jsp/roles/remove-content-user.jsp + + cancel + /jsp/roles/manage-content-users.jsp + + + finish + /jsp/roles/manage-content-users.jsp + + + /jsp/wizard/invite-users/* @@ -483,6 +543,27 @@ + + + /jsp/wizard/invite-content-users/* + + invite + /jsp/wizard/invite-content-users/invite.jsp + + + notify + /jsp/wizard/invite-content-users/notify.jsp + + + cancel + /jsp/roles/manage-content-users.jsp + + + finish + /jsp/roles/manage-content-users.jsp + + + /jsp/users/* diff --git a/source/web/WEB-INF/faces-config.xml b/source/web/WEB-INF/faces-config.xml index ae765c2d33..7773b0bddb 100644 --- a/source/web/WEB-INF/faces-config.xml +++ b/source/web/WEB-INF/faces-config.xml @@ -584,8 +584,41 @@ The bean that backs up the Manage Invited Users screens - UserMembersBean - org.alfresco.web.bean.users.UserMembersBean + SpaceUsersBean + org.alfresco.web.bean.users.SpaceUsersBean + session + + nodeService + #{NodeService} + + + searchService + #{SearchService} + + + browseBean + #{BrowseBean} + + + permissionService + #{PermissionService} + + + ownableService + #{OwnableService} + + + personService + #{personService} + + + + + + The bean that backs up the Manage Content Users screens + + ContentUsersBean + org.alfresco.web.bean.users.ContentUsersBean session nodeService @@ -617,8 +650,53 @@ The bean that backs up the Invite Users Wizard - InviteUsersWizard - org.alfresco.web.bean.wizard.InviteUsersWizard + InviteSpaceUsersWizard + org.alfresco.web.bean.wizard.InviteSpaceUsersWizard + session + + nodeService + #{NodeService} + + + searchService + #{SearchService} + + + namespaceService + #{NamespaceService} + + + permissionService + #{PermissionService} + + + personService + #{personService} + + + navigator + #{NavigationBean} + + + browseBean + #{BrowseBean} + + + mailSender + #{mailService} + + + authorityService + #{AuthorityService} + + + + + + The bean that backs up the Invite Content Users Wizard + + InviteContentUsersWizard + org.alfresco.web.bean.wizard.InviteContentUsersWizard session nodeService diff --git a/source/web/jsp/dialog/document-details.jsp b/source/web/jsp/dialog/document-details.jsp index 0c99bb3f36..10dd7d70ad 100644 --- a/source/web/jsp/dialog/document-details.jsp +++ b/source/web/jsp/dialog/document-details.jsp @@ -164,6 +164,12 @@ + + + + + + <%-- create shortcut --%> diff --git a/source/web/jsp/roles/edit-content-user-roles.jsp b/source/web/jsp/roles/edit-content-user-roles.jsp new file mode 100644 index 0000000000..6b01e070df --- /dev/null +++ b/source/web/jsp/roles/edit-content-user-roles.jsp @@ -0,0 +1,208 @@ +<%-- + Copyright (C) 2005 Alfresco, Inc. + + Licensed under the Mozilla Public License version 1.1 + with a permitted attribution clause. You may obtain a + copy of the License at + + http://www.alfresco.org/legal/license.txt + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + either express or implied. See the License for the specific + language governing permissions and limitations under the + License. +--%> +<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> +<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %> +<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %> + +<%@ page buffer="32kb" contentType="text/html;charset=UTF-8" %> +<%@ page isELIgnored="false" %> +<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %> + + + + + + <%-- load a bundle of properties with I18N strings --%> + + + + + <%-- Main outer table --%> + + + <%-- Title bar --%> + + + + + <%-- Main area --%> + + <%-- Shelf --%> + + + <%-- Work Area --%> + + +
+ <%@ include file="../parts/titlebar.jsp" %> +
+ <%@ include file="../parts/shelf.jsp" %> + + + <%-- Breadcrumb --%> + <%@ include file="../parts/breadcrumb.jsp" %> + + <%-- Status and Actions --%> + + + + + + + <%-- separator row with gradient shadow --%> + + + + + + + <%-- Details --%> + + + + + + + <%-- Error Messages --%> + + + + + + + <%-- separator row with bottom panel graphics --%> + + + + + + +
+ + <%-- Status and Actions inner contents table --%> + <%-- Generally this consists of an icon, textual summary and actions for the current object --%> + + + + + +
+ +
+
+ + '' +
+
+
+ +
+ + + + + + +
+ <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %> + + + + + + + + + + + + + + + + + + + + + + +
1. 
+ + + +
+ 2.  +
+ + + + + + + + + + + + + + + + + + + +
+
+
+ <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %> +
+ <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %> + + + + + + + +
+ +
+ +
+ <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %> +
+
+ <%-- messages tag to show messages not handled by other specific message tags --%> + +
+
+ +
+ +
+ +
\ No newline at end of file diff --git a/source/web/jsp/roles/edit-user-roles.jsp b/source/web/jsp/roles/edit-user-roles.jsp index a7b8cee0e3..e21287a968 100644 --- a/source/web/jsp/roles/edit-user-roles.jsp +++ b/source/web/jsp/roles/edit-user-roles.jsp @@ -72,7 +72,7 @@
- '' + ''
@@ -109,13 +109,13 @@ - + - 2.  + 2.  @@ -124,11 +124,11 @@ - + rendered="#{SpaceUsersBean.personRolesDataModel.rowCount != 0}"> @@ -136,11 +136,11 @@ - - + @@ -162,7 +162,7 @@
diff --git a/source/web/jsp/roles/manage-content-users.jsp b/source/web/jsp/roles/manage-content-users.jsp new file mode 100644 index 0000000000..69619804ff --- /dev/null +++ b/source/web/jsp/roles/manage-content-users.jsp @@ -0,0 +1,235 @@ +<%-- + Copyright (C) 2005 Alfresco, Inc. + + Licensed under the Mozilla Public License version 1.1 + with a permitted attribution clause. You may obtain a + copy of the License at + + http://www.alfresco.org/legal/license.txt + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + either express or implied. See the License for the specific + language governing permissions and limitations under the + License. +--%> +<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> +<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %> +<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %> + +<%@ page buffer="32kb" contentType="text/html;charset=UTF-8" %> +<%@ page isELIgnored="false" %> +<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %> + + + + + + <%-- load a bundle of properties with I18N strings --%> + + + + + <%-- Main outer table --%> +
- +
+ + <%-- Title bar --%> + + + + + <%-- Main area --%> + + <%-- Shelf --%> + + + <%-- Work Area --%> + + +
+ <%@ include file="../parts/titlebar.jsp" %> +
+ <%@ include file="../parts/shelf.jsp" %> + + + <%-- Breadcrumb --%> + <%@ include file="../parts/breadcrumb.jsp" %> + + <%-- Status and Actions --%> + + + + + + + <%-- separator row with gradient shadow --%> + + + + + + + <%-- Details --%> + + + + + + + + + + + + + <%-- Error Messages --%> + + + + + + + <%-- separator row with bottom panel graphics --%> + + + + + + +
+ + <%-- Status and Actions inner contents table --%> + <%-- Generally this consists of an icon, textual summary and actions for the current object --%> + + + + + + + + + +
+ +
+
+
+ + + +
+
+
+ <%-- Current object actions --%> +
+ + + +
+ <%-- View mode settings --%> +
+ + + +
+
+ + + + + + +
+ + + + + + <%-- Primary column with full name --%> + + + + + + + + + + + <%-- Username column --%> + + + + + + + + <%-- Roles column --%> + + + + + + + + <%-- Actions column --%> + + + + + + + + + + + + + + + + + + + <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %> + + + + +
+ +
+ <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %> +
+
+ + + + + + + + +
+ + +   +
+
+ <%-- messages tag to show messages not handled by other specific message tags --%> + +
+
+ + + + + + \ No newline at end of file diff --git a/source/web/jsp/roles/manage-invited-users.jsp b/source/web/jsp/roles/manage-invited-users.jsp index 2d08ba1780..6b09d74464 100644 --- a/source/web/jsp/roles/manage-invited-users.jsp +++ b/source/web/jsp/roles/manage-invited-users.jsp @@ -72,8 +72,8 @@
- - + +
@@ -83,7 +83,7 @@ <%-- Current object actions --%>
- + @@ -117,9 +117,9 @@ - + value="#{SpaceUsersBean.users}" var="r" initialSortColumn="userName" initialSortDescending="true"> <%-- Primary column with full name --%> @@ -153,10 +153,10 @@ - + - + @@ -191,8 +191,8 @@ @@ -101,7 +101,7 @@ @@ -121,7 +121,7 @@
- +   diff --git a/source/web/jsp/roles/remove-content-user.jsp b/source/web/jsp/roles/remove-content-user.jsp new file mode 100644 index 0000000000..bb76dc31f2 --- /dev/null +++ b/source/web/jsp/roles/remove-content-user.jsp @@ -0,0 +1,168 @@ +<%-- + Copyright (C) 2005 Alfresco, Inc. + + Licensed under the Mozilla Public License version 1.1 + with a permitted attribution clause. You may obtain a + copy of the License at + + http://www.alfresco.org/legal/license.txt + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + either express or implied. See the License for the specific + language governing permissions and limitations under the + License. +--%> +<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> +<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %> +<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %> + +<%@ page buffer="32kb" contentType="text/html;charset=UTF-8" %> +<%@ page isELIgnored="false" %> +<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %> + + + + + + <%-- load a bundle of properties with I18N strings --%> + + + <%-- set the form name here --%> + + + <%-- Main outer table --%> + + + <%-- Title bar --%> + + + + + <%-- Main area --%> + + <%-- Shelf --%> + + + <%-- Work Area --%> + + +
+ <%@ include file="../parts/titlebar.jsp" %> +
+ <%@ include file="../parts/shelf.jsp" %> + + + <%-- Breadcrumb --%> + <%@ include file="../parts/breadcrumb.jsp" %> + + <%-- Status and Actions --%> + + + + + + + <%-- separator row with gradient shadow --%> + + + + + + + <%-- Details --%> + + + + + + + <%-- Error Messages --%> + + + + + + + <%-- separator row with bottom panel graphics --%> + + + + + + +
+ + <%-- Status and Actions inner contents table --%> + <%-- Generally this consists of an icon, textual summary and actions for the current object --%> + + + + + +
+ + +
+
''
+
+
+ +
+ + + + + + + +
+ <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %> + + + + + + +
+ + + +
+ <%-- Error Messages --%> + <%-- messages tag to show messages not handled by other specific message tags --%> + + +
+ <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %> +
+ <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %> + + + + + + + + +
+ +
+ +
+ <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %> +
+
+ <%-- messages tag to show messages not handled by other specific message tags --%> + +
+
+ +
+ +
+ +
diff --git a/source/web/jsp/roles/remove-invited-user.jsp b/source/web/jsp/roles/remove-invited-user.jsp index 7c61806042..ecb48780dc 100644 --- a/source/web/jsp/roles/remove-invited-user.jsp +++ b/source/web/jsp/roles/remove-invited-user.jsp @@ -71,7 +71,7 @@
-
''
+
''
- +
diff --git a/source/web/jsp/wizard/invite-content-users/invite.jsp b/source/web/jsp/wizard/invite-content-users/invite.jsp new file mode 100644 index 0000000000..b9f236a7a9 --- /dev/null +++ b/source/web/jsp/wizard/invite-content-users/invite.jsp @@ -0,0 +1,234 @@ +<%-- + Copyright (C) 2005 Alfresco, Inc. + + Licensed under the Mozilla Public License version 1.1 + with a permitted attribution clause. You may obtain a + copy of the License at + + http://www.alfresco.org/legal/license.txt + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + either express or implied. See the License for the specific + language governing permissions and limitations under the + License. +--%> +<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> +<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %> +<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %> + +<%@ page buffer="32kb" contentType="text/html;charset=UTF-8" %> +<%@ page isELIgnored="false" %> +<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %> + + + + + + <%-- load a bundle of properties with I18N strings --%> + + + + + <%-- Main outer table --%> +
- +
+ + <%-- Title bar --%> + + + + + <%-- Main area --%> + + <%-- Shelf --%> + + + <%-- Work Area --%> + + +
+ <%@ include file="../../parts/titlebar.jsp" %> +
+ <%@ include file="../../parts/shelf.jsp" %> + + + <%-- Breadcrumb --%> + <%@ include file="../../parts/breadcrumb.jsp" %> + + <%-- Status and Actions --%> + + + + + + + <%-- separator row with gradient shadow --%> + + + + + + + <%-- Details --%> + + + + + + + <%-- separator row with bottom panel graphics --%> + + + + + + +
+ + <%-- Status and Actions inner contents table --%> + <%-- Generally this consists of an icon, textual summary and actions for the current object --%> + + + + + +
+ +
+
+
+
+ +
+ + + + + + + + +
+ <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %> +
+ + + + + <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %> +
+ + + + <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %> + + + + + + + + + + + + + + + + + <%-- Picker to select Users/Groups --%> + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ 2. +
+ + + + + + + + + + + + + + + + + + + + +
+
+
+ <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %> +
+ <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %> + + + + + + + + +
+ +
+ +
+ <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %> +
+
+
+ + + + + + \ No newline at end of file diff --git a/source/web/jsp/wizard/invite-content-users/notify.jsp b/source/web/jsp/wizard/invite-content-users/notify.jsp new file mode 100644 index 0000000000..fa0e840588 --- /dev/null +++ b/source/web/jsp/wizard/invite-content-users/notify.jsp @@ -0,0 +1,215 @@ +<%-- + Copyright (C) 2005 Alfresco, Inc. + + Licensed under the Mozilla Public License version 1.1 + with a permitted attribution clause. You may obtain a + copy of the License at + + http://www.alfresco.org/legal/license.txt + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + either express or implied. See the License for the specific + language governing permissions and limitations under the + License. +--%> +<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> +<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %> +<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %> + +<%@ page buffer="32kb" contentType="text/html;charset=UTF-8" %> +<%@ page isELIgnored="false" %> +<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %> + + + + + + <%-- load a bundle of properties with I18N strings --%> + + + + + <%-- Main outer table --%> + + + <%-- Title bar --%> + + + + + <%-- Main area --%> + + <%-- Shelf --%> + + + <%-- Work Area --%> + + +
+ <%@ include file="../../parts/titlebar.jsp" %> +
+ <%@ include file="../../parts/shelf.jsp" %> + + + <%-- Breadcrumb --%> + <%@ include file="../../parts/breadcrumb.jsp" %> + + <%-- Status and Actions --%> + + + + + + + <%-- separator row with gradient shadow --%> + + + + + + + <%-- Details --%> + + + + + + + <%-- separator row with bottom panel graphics --%> + + + + + + +
+ + <%-- Status and Actions inner contents table --%> + <%-- Generally this consists of an icon, textual summary and actions for the current object --%> + + + + + +
+ +
+
+
+
+ +
+ + + + + + + + +
+ <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %> +
+ + + + + <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %> +
+ + + + <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
: + +
: + +
+ + + + + +
+ : + + +
+
+ <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %> +
+ <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %> + + + + + + + + + + + +
+ +
+ +
+ +
+ <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %> +
+
+
+ +
+ +
+ +
\ No newline at end of file diff --git a/source/web/jsp/wizard/invite-users/invite.jsp b/source/web/jsp/wizard/invite-users/invite.jsp index 805e0a4b5a..7544d646c7 100644 --- a/source/web/jsp/wizard/invite-users/invite.jsp +++ b/source/web/jsp/wizard/invite-users/invite.jsp @@ -70,8 +70,8 @@
-
-
+
+
@@ -111,10 +111,10 @@ <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %> - + - + @@ -126,7 +126,7 @@ <%-- Picker to select Users/Groups --%> - + @@ -135,7 +135,7 @@ @@ -144,7 +144,7 @@ @@ -154,11 +154,11 @@
- +
- 2. + 2.
- + rendered="#{InviteSpaceUsersWizard.userRolesDataModel.rowCount != 0}"> @@ -166,12 +166,12 @@ - - + @@ -186,7 +186,7 @@ - +
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %> @@ -197,13 +197,13 @@
- +
- +
diff --git a/source/web/jsp/wizard/invite-users/notify.jsp b/source/web/jsp/wizard/invite-users/notify.jsp index 302c20bd19..5e3685c817 100644 --- a/source/web/jsp/wizard/invite-users/notify.jsp +++ b/source/web/jsp/wizard/invite-users/notify.jsp @@ -70,8 +70,8 @@
-
-
+
+
@@ -111,10 +111,10 @@ <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %> - + - + @@ -123,7 +123,7 @@ @@ -153,7 +153,7 @@ :
- + @@ -133,14 +133,14 @@
: - +
: - +
- +
@@ -162,7 +162,7 @@ - + <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %> @@ -173,18 +173,18 @@
- +
- +
- +