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
This commit is contained in:
Gavin Cornwell 2006-01-16 14:09:01 +00:00
parent e9c3ca1be4
commit fd5330fe56
30 changed files with 1584 additions and 180 deletions

View File

@ -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

View File

@ -118,6 +118,9 @@
<!-- the type of edit link to use, NOTE: inline editable will always take precedence -->
<!-- can be: http|webdav|cifs -->
<edit-link-type>http</edit-link-type>
<!-- the from address to use when sending emails from the client -->
<from-email-address>alfresco@alfresco.org</from-email-address>
</client>
</config>

View File

@ -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
*

View File

@ -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;
}

View File

@ -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);

View File

@ -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);

View File

@ -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();
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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<PermissionWrapper> 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<String, List<String>> permissionMap = new HashMap<String, List<String>>(13, 1.0f);
Set<AccessPermission> permissions = permissionService.getAllSetPermissions(getSpace().getNodeRef());
Set<AccessPermission> 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<String, Object> 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<PermissionWrapper> userPermissions = new ArrayList<PermissionWrapper>(4);
Set<AccessPermission> permissions = permissionService.getAllSetPermissions(getSpace().getNodeRef());
Set<AccessPermission> 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

View File

@ -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<String> 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<String> 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();
}
}

View File

@ -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<String> 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<String> getPermissionsForType()
{
if (this.folderPermissions == null)
{
this.folderPermissions = this.permissionService.getSettablePermissions(ContentModel.TYPE_FOLDER);
}
return this.folderPermissions;
}
@Override
protected Node getNode()
{
return this.browseBean.getActionSpace();
}
}

View File

@ -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<UserGroupRole> userGroupRoles = null;
/** Cache of available folder permissions */
Set<String> 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<String> 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<this.userGroupRoles.size(); i++)
@ -200,13 +208,13 @@ public class InviteUsersWizard extends AbstractWizardBean
String authority = userGroupRole.getAuthority();
// find the selected permission ref from it's name and apply for the specified user
Set<String> perms = getFolderPermissions();
Set<String> 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<String> perms = getFolderPermissions();
Set<String> 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<String> 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

View File

@ -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<String> views = new ArrayList<String>(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.
*/

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -146,6 +146,10 @@
<from-outcome>manageInvitedUsers</from-outcome>
<to-view-id>/jsp/roles/manage-invited-users.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>manageContentUsers</from-outcome>
<to-view-id>/jsp/roles/manage-content-users.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>manageRules</from-outcome>
<to-view-id>/jsp/dialog/rules.jsp</to-view-id>
@ -363,6 +367,10 @@
<from-outcome>showForum</from-outcome>
<to-view-id>/jsp/forums/forum.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>manageContentUsers</from-outcome>
<to-view-id>/jsp/roles/manage-content-users.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
@ -434,18 +442,6 @@
</navigation-rule>
<!-- Manage Invited Users navigation -->
<navigation-rule>
<from-view-id>/jsp/roles/*</from-view-id>
<navigation-case>
<from-outcome>cancel</from-outcome>
<to-view-id>/jsp/roles/manage-invited-users.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>finish</from-outcome>
<to-view-id>/jsp/roles/manage-invited-users.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/jsp/roles/manage-invited-users.jsp</from-view-id>
<navigation-case>
@ -462,6 +458,70 @@
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/jsp/roles/edit-user-roles.jsp</from-view-id>
<navigation-case>
<from-outcome>cancel</from-outcome>
<to-view-id>/jsp/roles/manage-invited-users.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>finish</from-outcome>
<to-view-id>/jsp/roles/manage-invited-users.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/jsp/roles/remove-invited-user.jsp</from-view-id>
<navigation-case>
<from-outcome>cancel</from-outcome>
<to-view-id>/jsp/roles/manage-invited-users.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>finish</from-outcome>
<to-view-id>/jsp/roles/manage-invited-users.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/jsp/roles/manage-content-users.jsp</from-view-id>
<navigation-case>
<from-outcome>inviteUsers</from-outcome>
<to-view-id>/jsp/wizard/invite-content-users/invite.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>editRoles</from-outcome>
<to-view-id>/jsp/roles/edit-content-user-roles.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>removeUser</from-outcome>
<to-view-id>/jsp/roles/remove-content-user.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/jsp/roles/edit-content-user-roles.jsp</from-view-id>
<navigation-case>
<from-outcome>cancel</from-outcome>
<to-view-id>/jsp/roles/manage-content-users.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>finish</from-outcome>
<to-view-id>/jsp/roles/manage-content-users.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/jsp/roles/remove-content-user.jsp</from-view-id>
<navigation-case>
<from-outcome>cancel</from-outcome>
<to-view-id>/jsp/roles/manage-content-users.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>finish</from-outcome>
<to-view-id>/jsp/roles/manage-content-users.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<!-- navigation rules for the Invite Users wizard -->
<navigation-rule>
<from-view-id>/jsp/wizard/invite-users/*</from-view-id>
@ -483,6 +543,27 @@
</navigation-case>
</navigation-rule>
<!-- navigation rules for the Invite Content Users wizard -->
<navigation-rule>
<from-view-id>/jsp/wizard/invite-content-users/*</from-view-id>
<navigation-case>
<from-outcome>invite</from-outcome>
<to-view-id>/jsp/wizard/invite-content-users/invite.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>notify</from-outcome>
<to-view-id>/jsp/wizard/invite-content-users/notify.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>cancel</from-outcome>
<to-view-id>/jsp/roles/manage-content-users.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>finish</from-outcome>
<to-view-id>/jsp/roles/manage-content-users.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<!-- System User Management navigation -->
<navigation-rule>
<from-view-id>/jsp/users/*</from-view-id>

View File

@ -584,8 +584,41 @@
<description>
The bean that backs up the Manage Invited Users screens
</description>
<managed-bean-name>UserMembersBean</managed-bean-name>
<managed-bean-class>org.alfresco.web.bean.users.UserMembersBean</managed-bean-class>
<managed-bean-name>SpaceUsersBean</managed-bean-name>
<managed-bean-class>org.alfresco.web.bean.users.SpaceUsersBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>nodeService</property-name>
<value>#{NodeService}</value>
</managed-property>
<managed-property>
<property-name>searchService</property-name>
<value>#{SearchService}</value>
</managed-property>
<managed-property>
<property-name>browseBean</property-name>
<value>#{BrowseBean}</value>
</managed-property>
<managed-property>
<property-name>permissionService</property-name>
<value>#{PermissionService}</value>
</managed-property>
<managed-property>
<property-name>ownableService</property-name>
<value>#{OwnableService}</value>
</managed-property>
<managed-property>
<property-name>personService</property-name>
<value>#{personService}</value>
</managed-property>
</managed-bean>
<managed-bean>
<description>
The bean that backs up the Manage Content Users screens
</description>
<managed-bean-name>ContentUsersBean</managed-bean-name>
<managed-bean-class>org.alfresco.web.bean.users.ContentUsersBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>nodeService</property-name>
@ -617,8 +650,53 @@
<description>
The bean that backs up the Invite Users Wizard
</description>
<managed-bean-name>InviteUsersWizard</managed-bean-name>
<managed-bean-class>org.alfresco.web.bean.wizard.InviteUsersWizard</managed-bean-class>
<managed-bean-name>InviteSpaceUsersWizard</managed-bean-name>
<managed-bean-class>org.alfresco.web.bean.wizard.InviteSpaceUsersWizard</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>nodeService</property-name>
<value>#{NodeService}</value>
</managed-property>
<managed-property>
<property-name>searchService</property-name>
<value>#{SearchService}</value>
</managed-property>
<managed-property>
<property-name>namespaceService</property-name>
<value>#{NamespaceService}</value>
</managed-property>
<managed-property>
<property-name>permissionService</property-name>
<value>#{PermissionService}</value>
</managed-property>
<managed-property>
<property-name>personService</property-name>
<value>#{personService}</value>
</managed-property>
<managed-property>
<property-name>navigator</property-name>
<value>#{NavigationBean}</value>
</managed-property>
<managed-property>
<property-name>browseBean</property-name>
<value>#{BrowseBean}</value>
</managed-property>
<managed-property>
<property-name>mailSender</property-name>
<value>#{mailService}</value>
</managed-property>
<managed-property>
<property-name>authorityService</property-name>
<value>#{AuthorityService}</value>
</managed-property>
</managed-bean>
<managed-bean>
<description>
The bean that backs up the Invite Content Users Wizard
</description>
<managed-bean-name>InviteContentUsersWizard</managed-bean-name>
<managed-bean-class>org.alfresco.web.bean.wizard.InviteContentUsersWizard</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>nodeService</property-name>

View File

@ -164,6 +164,12 @@
<a:actionLink value="#{msg.take_ownership}" image="/images/icons/take_ownership.gif" actionListener="#{DocumentDetailsBean.takeOwnership}" id="takeOwnership" />
</r:permissionEvaluator>
<r:permissionEvaluator value="#{DocumentDetailsBean.document}" allow="ChangePermissions">
<a:actionLink value="#{msg.manage_content_users}" image="/images/icons/invite.gif" action="dialog:manageContentUsers" actionListener="#{BrowseBean.setupContentAction}">
<f:param name="id" value="#{DocumentDetailsBean.id}" />
</a:actionLink>
</r:permissionEvaluator>
<%-- create shortcut --%>
<a:actionLink value="#{msg.create_shortcut}" image="/images/icons/shortcut.gif" actionListener="#{UserShortcutsBean.createShortcut}">
<f:param name="id" value="#{DocumentDetailsBean.id}" />

View File

@ -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" %>
<r:page titleId="title_change_user_roles">
<f:view>
<%-- load a bundle of properties with I18N strings --%>
<f:loadBundle basename="alfresco.messages.webclient" var="msg"/>
<h:form acceptCharset="UTF-8" id="invite-users">
<%-- Main outer table --%>
<table cellspacing="0" cellpadding="2">
<%-- Title bar --%>
<tr>
<td colspan="2">
<%@ include file="../parts/titlebar.jsp" %>
</td>
</tr>
<%-- Main area --%>
<tr valign="top">
<%-- Shelf --%>
<td>
<%@ include file="../parts/shelf.jsp" %>
</td>
<%-- Work Area --%>
<td width="100%">
<table cellspacing="0" cellpadding="0" width="100%">
<%-- Breadcrumb --%>
<%@ include file="../parts/breadcrumb.jsp" %>
<%-- Status and Actions --%>
<tr>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_4.gif)" width="4"></td>
<td bgcolor="#EEEEEE">
<%-- Status and Actions inner contents table --%>
<%-- Generally this consists of an icon, textual summary and actions for the current object --%>
<table cellspacing="4" cellpadding="0" width="100%">
<tr valign="top">
<td width="32">
<h:graphicImage id="wizard-logo" url="/images/icons/edituser_large.gif" />
</td>
<td>
<div class="mainSubTitle"><h:outputText value='#{BrowseBean.document.name}' /></div>
<div class="mainTitle">
<h:outputText value="#{msg.modify_user_roles}" />
'<h:outputText value="#{ContentUsersBean.personName}" />'
</div>
<div class="mainSubText"><h:outputText value="#{msg.modify_content_user_roles_description}" /></div>
</td>
</tr>
</table>
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_6.gif)" width="4"></td>
</tr>
<%-- separator row with gradient shadow --%>
<tr>
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_7.gif" width="4" height="9"></td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_8.gif)"></td>
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_9.gif" width="4" height="9"></td>
</tr>
<%-- Details --%>
<tr valign=top>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
<td>
<table cellspacing="0" cellpadding="3" border="0" width="100%">
<tr>
<td width="100%" valign="top">
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %>
<table cellpadding="2" cellspacing="2" border="0" width="100%">
<tr>
<td class="mainSubTitle"><h:outputText value="#{msg.change_user_roles}" /></td>
</tr>
<tr><td class="paddingRow"></td></tr>
<tr>
<td>1.&nbsp;<h:outputText value="#{msg.select_role}" /></td>
</tr>
<tr>
<td>
<h:selectOneListbox id="roles" style="width:250px" size="5">
<f:selectItems value="#{InviteContentUsersWizard.roles}" />
</h:selectOneListbox>
</td>
</tr>
<tr>
<td>
2.&nbsp;<h:commandButton value="#{msg.add_to_list_button}" actionListener="#{ContentUsersBean.addRole}" />
</td>
</tr>
<tr><td class="paddingRow"></td></tr>
<tr>
<td><h:outputText value="#{msg.selected_roles}" /></td>
</tr>
<tr>
<td>
<h:dataTable value="#{ContentUsersBean.personRolesDataModel}" var="row"
rowClasses="selectedItemsRow,selectedItemsRowAlt"
styleClass="selectedItems" headerClass="selectedItemsHeader"
cellspacing="0" cellpadding="4"
rendered="#{ContentUsersBean.personRolesDataModel.rowCount != 0}">
<h:column>
<f:facet name="header">
<h:outputText value="#{msg.name}" />
</f:facet>
<h:outputText value="#{row.role}" />
</h:column>
<h:column>
<a:actionLink actionListener="#{ContentUsersBean.removeRole}" image="/images/icons/delete.gif"
value="#{msg.remove}" showLink="false" style="padding-left:6px" />
</h:column>
</h:dataTable>
<a:panel id="no-items" rendered="#{ContentUsersBean.personRolesDataModel.rowCount == 0}">
<table cellspacing='0' cellpadding='2' border='0' class='selectedItems'>
<tr>
<td colspan='2' class='selectedItemsHeader'><h:outputText id="no-items-name" value="#{msg.name}" /></td>
</tr>
<tr>
<td class='selectedItemsRow'><h:outputText id="no-items-msg" value="#{msg.no_selected_items}" /></td>
</tr>
</table>
</a:panel>
</td>
</tr>
<tr><td colspan=2 class="paddingRow"></td></tr>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %>
</td>
<td valign="top">
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %>
<table cellpadding="1" cellspacing="1" border="0">
<tr>
<td align="center">
<h:commandButton value="#{msg.ok}" action="#{ContentUsersBean.finishOK}" styleClass="wizardButton" />
</td>
</tr>
<tr>
<td align="center">
<h:commandButton value="#{msg.cancel_button}" action="cancel" styleClass="wizardButton" />
</td>
</tr>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %>
</td>
</tr>
</table>
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
</tr>
<%-- Error Messages --%>
<tr valign="top">
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
<td>
<%-- messages tag to show messages not handled by other specific message tags --%>
<h:messages globalOnly="true" styleClass="errorMessage" layout="table" />
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
</tr>
<%-- separator row with bottom panel graphics --%>
<tr>
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_7.gif" width="4" height="4"></td>
<td width="100%" align="center" style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_8.gif)"></td>
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_9.gif" width="4" height="4"></td>
</tr>
</table>
</td>
</tr>
</table>
</h:form>
</f:view>
</r:page>

View File

@ -72,7 +72,7 @@
<div class="mainSubTitle"><h:outputText value='#{BrowseBean.actionSpace.name}' /></div>
<div class="mainTitle">
<h:outputText value="#{msg.modify_user_roles}" />
'<h:outputText value="#{UserMembersBean.personName}" />'
'<h:outputText value="#{SpaceUsersBean.personName}" />'
</div>
<div class="mainSubText"><h:outputText value="#{msg.modify_user_roles_description}" /></div>
</td>
@ -109,13 +109,13 @@
<tr>
<td>
<h:selectOneListbox id="roles" style="width:250px" size="5">
<f:selectItems value="#{InviteUsersWizard.roles}" />
<f:selectItems value="#{InviteSpaceUsersWizard.roles}" />
</h:selectOneListbox>
</td>
</tr>
<tr>
<td>
2.&nbsp;<h:commandButton value="#{msg.add_to_list_button}" actionListener="#{UserMembersBean.addRole}" />
2.&nbsp;<h:commandButton value="#{msg.add_to_list_button}" actionListener="#{SpaceUsersBean.addRole}" />
</td>
</tr>
<tr><td class="paddingRow"></td></tr>
@ -124,11 +124,11 @@
</tr>
<tr>
<td>
<h:dataTable value="#{UserMembersBean.personRolesDataModel}" var="row"
<h:dataTable value="#{SpaceUsersBean.personRolesDataModel}" var="row"
rowClasses="selectedItemsRow,selectedItemsRowAlt"
styleClass="selectedItems" headerClass="selectedItemsHeader"
cellspacing="0" cellpadding="4"
rendered="#{UserMembersBean.personRolesDataModel.rowCount != 0}">
rendered="#{SpaceUsersBean.personRolesDataModel.rowCount != 0}">
<h:column>
<f:facet name="header">
<h:outputText value="#{msg.name}" />
@ -136,11 +136,11 @@
<h:outputText value="#{row.role}" />
</h:column>
<h:column>
<a:actionLink actionListener="#{UserMembersBean.removeRole}" image="/images/icons/delete.gif"
<a:actionLink actionListener="#{SpaceUsersBean.removeRole}" image="/images/icons/delete.gif"
value="#{msg.remove}" showLink="false" style="padding-left:6px" />
</h:column>
</h:dataTable>
<a:panel id="no-items" rendered="#{UserMembersBean.personRolesDataModel.rowCount == 0}">
<a:panel id="no-items" rendered="#{SpaceUsersBean.personRolesDataModel.rowCount == 0}">
<table cellspacing='0' cellpadding='2' border='0' class='selectedItems'>
<tr>
<td colspan='2' class='selectedItemsHeader'><h:outputText id="no-items-name" value="#{msg.name}" /></td>
@ -162,7 +162,7 @@
<table cellpadding="1" cellspacing="1" border="0">
<tr>
<td align="center">
<h:commandButton value="#{msg.ok}" action="#{UserMembersBean.finishOK}" styleClass="wizardButton" />
<h:commandButton value="#{msg.ok}" action="#{SpaceUsersBean.finishOK}" styleClass="wizardButton" />
</td>
</tr>
<tr>

View File

@ -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" %>
<r:page titleId="title_content_users">
<f:view>
<%-- load a bundle of properties with I18N strings --%>
<f:loadBundle basename="alfresco.messages.webclient" var="msg"/>
<h:form acceptCharset="UTF-8" id="users">
<%-- Main outer table --%>
<table cellspacing="0" cellpadding="2">
<%-- Title bar --%>
<tr>
<td colspan="2">
<%@ include file="../parts/titlebar.jsp" %>
</td>
</tr>
<%-- Main area --%>
<tr valign="top">
<%-- Shelf --%>
<td>
<%@ include file="../parts/shelf.jsp" %>
</td>
<%-- Work Area --%>
<td width="100%">
<table cellspacing="0" cellpadding="0" width="100%">
<%-- Breadcrumb --%>
<%@ include file="../parts/breadcrumb.jsp" %>
<%-- Status and Actions --%>
<tr>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_4.gif)" width="4"></td>
<td bgcolor="#EEEEEE">
<%-- Status and Actions inner contents table --%>
<%-- Generally this consists of an icon, textual summary and actions for the current object --%>
<table cellspacing="4" cellpadding="0" width="100%">
<tr valign="top">
<td width="32">
<h:graphicImage id="wizard-logo" url="/images/icons/users_large.gif" />
</td>
<td>
<div class="mainSubTitle"><h:outputText value='#{BrowseBean.document.name}' /></div>
<div class="mainTitle"><h:outputText value="#{msg.manage_content_users}" /></div>
<div class="mainSubText">
<h:outputFormat value="#{msg.content_owner}" rendered="#{ContentUsersBean.owner != null}">
<f:param value="#{ContentUsersBean.owner}" />
</h:outputFormat>
</div>
<div class="mainSubText"><h:outputText value="#{msg.manage_content_users_description}" /></div>
</td>
<td bgcolor="#465F7D" width=1></td>
<td width=100 style="padding-left:2px">
<%-- Current object actions --%>
<h:outputText style="padding-left:20px;" styleClass="mainSubTitle" value="#{msg.actions}" /><br/>
<r:permissionEvaluator value="#{BrowseBean.document}" allow="ChangePermissions">
<a:actionLink value="#{msg.invite}" image="/images/icons/invite.gif" padding="4" action="inviteUsers" actionListener="#{InviteContentUsersWizard.startWizard}" />
</r:permissionEvaluator>
</td>
<td bgcolor="#465F7D" width=1></td>
<td width=100 style="padding-left:2px">
<%-- View mode settings --%>
<h:outputText style="padding-left:26px" styleClass="mainSubTitle" value="#{msg.view}"/><br>
<a:modeList itemSpacing="3" iconColumnWidth="20" selectedStyleClass="statusListHighlight" selectedImage="/images/icons/Details.gif" value="0">
<a:listItem value="0" label="#{msg.user_details}" />
</a:modeList>
</td>
</tr>
</table>
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_6.gif)" width="4"></td>
</tr>
<%-- separator row with gradient shadow --%>
<tr>
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_7.gif" width="4" height="9"></td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_8.gif)"></td>
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_9.gif" width="4" height="9"></td>
</tr>
<%-- Details --%>
<tr valign=top>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
<td>
<table cellspacing="2" cellpadding="2" border="0" width="100%">
<tr>
<td width="100%" valign="top">
<a:panel id="users-panel" border="white" bgcolor="white" titleBorder="blue" titleBgcolor="#D3E6FE" styleClass="mainSubTitle" label="#{msg.users_and_groups}">
<a:richList id="users-list" binding="#{ContentUsersBean.usersRichList}" viewMode="details" pageSize="10"
styleClass="recordSet" headerStyleClass="recordSetHeader" rowStyleClass="recordSetRow" altRowStyleClass="recordSetRowAlt" width="100%"
value="#{ContentUsersBean.users}" var="r" initialSortColumn="userName" initialSortDescending="true">
<%-- Primary column with full name --%>
<a:column primary="true" width="200" style="padding:2px;text-align:left">
<f:facet name="header">
<a:sortLink label="#{msg.name}" value="fullName" mode="case-insensitive" styleClass="header"/>
</f:facet>
<f:facet name="small-icon">
<h:graphicImage url="#{r.icon}" />
</f:facet>
<h:outputText value="#{r.fullName}" />
</a:column>
<%-- Username column --%>
<a:column width="120" style="text-align:left">
<f:facet name="header">
<a:sortLink label="#{msg.authority}" value="userName" styleClass="header"/>
</f:facet>
<h:outputText value="#{r.userName}" />
</a:column>
<%-- Roles column --%>
<a:column style="text-align:left">
<f:facet name="header">
<a:sortLink label="#{msg.roles}" value="roles" styleClass="header"/>
</f:facet>
<h:outputText value="#{r.roles}" />
</a:column>
<%-- Actions column --%>
<a:column actions="true" style="text-align:left">
<f:facet name="header">
<h:outputText value="#{msg.actions}"/>
</f:facet>
<a:actionLink value="#{msg.change_roles}" image="/images/icons/edituser.gif" showLink="false" action="editRoles" actionListener="#{ContentUsersBean.setupUserAction}">
<f:param name="userName" value="#{r.userName}" />
</a:actionLink>
<a:actionLink value="#{msg.remove}" image="/images/icons/delete_person.gif" showLink="false" action="removeUser" actionListener="#{ContentUsersBean.setupUserAction}">
<f:param name="userName" value="#{r.userName}" />
</a:actionLink>
</a:column>
<a:dataPager styleClass="pager" />
</a:richList>
</a:panel>
</td>
<td valign="top">
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %>
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td align="center">
<h:commandButton value="#{msg.close}" action="dialog:close" styleClass="wizardButton" />
</td>
</tr>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %>
</td>
</tr>
</table>
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
</tr>
<tr>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
<td>
<table cellspacing="2" cellpadding="0" border="0" width="100%">
<tr>
<td>
<h:selectBooleanCheckbox id="chkPermissions" value="#{ContentUsersBean.inheritPermissions}" valueChangeListener="#{ContentUsersBean.inheritPermissionsValueChanged}"
onchange="document.forms['users'].submit(); return true;" disabled="#{!ContentUsersBean.hasChangePermissions}" />
</td>
<td width=100%>
&nbsp;<h:outputText value="#{msg.inherit_permissions}" />
</td>
</tr>
<tr>
<td colspan=2><h:message for="chkPermissions" styleClass="statusMessage" /></td>
</tr>
</table>
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
</tr>
<%-- Error Messages --%>
<tr valign="top">
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
<td>
<%-- messages tag to show messages not handled by other specific message tags --%>
<h:messages globalOnly="true" styleClass="errorMessage" layout="table" />
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
</tr>
<%-- separator row with bottom panel graphics --%>
<tr>
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_7.gif" width="4" height="4"></td>
<td width="100%" align="center" style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_8.gif)"></td>
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_9.gif" width="4" height="4"></td>
</tr>
</table>
</td>
</tr>
</table>
</h:form>
</f:view>
</r:page>

View File

@ -72,8 +72,8 @@
<div class="mainSubTitle"><h:outputText value='#{BrowseBean.actionSpace.name}' /></div>
<div class="mainTitle"><h:outputText value="#{msg.manage_invited_users}" /></div>
<div class="mainSubText">
<h:outputFormat value="#{msg.space_owner}" rendered="#{UserMembersBean.owner != null}">
<f:param value="#{UserMembersBean.owner}" />
<h:outputFormat value="#{msg.space_owner}" rendered="#{SpaceUsersBean.owner != null}">
<f:param value="#{SpaceUsersBean.owner}" />
</h:outputFormat>
</div>
<div class="mainSubText"><h:outputText value="#{msg.manage_invited_users_description}" /></div>
@ -83,7 +83,7 @@
<%-- Current object actions --%>
<h:outputText style="padding-left:20px;" styleClass="mainSubTitle" value="#{msg.actions}" /><br/>
<r:permissionEvaluator value="#{NavigationBean.currentNode}" allow="ChangePermissions">
<a:actionLink value="#{msg.invite}" image="/images/icons/invite.gif" padding="4" action="inviteUsers" actionListener="#{InviteUsersWizard.startWizard}" />
<a:actionLink value="#{msg.invite}" image="/images/icons/invite.gif" padding="4" action="inviteUsers" actionListener="#{InviteSpaceUsersWizard.startWizard}" />
</r:permissionEvaluator>
</td>
<td bgcolor="#465F7D" width=1></td>
@ -117,9 +117,9 @@
<a:panel id="users-panel" border="white" bgcolor="white" titleBorder="blue" titleBgcolor="#D3E6FE" styleClass="mainSubTitle" label="#{msg.users_and_groups}">
<a:richList id="users-list" binding="#{UserMembersBean.usersRichList}" viewMode="details" pageSize="10"
<a:richList id="users-list" binding="#{SpaceUsersBean.usersRichList}" viewMode="details" pageSize="10"
styleClass="recordSet" headerStyleClass="recordSetHeader" rowStyleClass="recordSetRow" altRowStyleClass="recordSetRowAlt" width="100%"
value="#{UserMembersBean.users}" var="r" initialSortColumn="userName" initialSortDescending="true">
value="#{SpaceUsersBean.users}" var="r" initialSortColumn="userName" initialSortDescending="true">
<%-- Primary column with full name --%>
<a:column primary="true" width="200" style="padding:2px;text-align:left">
@ -153,10 +153,10 @@
<f:facet name="header">
<h:outputText value="#{msg.actions}"/>
</f:facet>
<a:actionLink value="#{msg.change_roles}" image="/images/icons/edituser.gif" showLink="false" action="editRoles" actionListener="#{UserMembersBean.setupUserAction}">
<a:actionLink value="#{msg.change_roles}" image="/images/icons/edituser.gif" showLink="false" action="editRoles" actionListener="#{SpaceUsersBean.setupUserAction}">
<f:param name="userName" value="#{r.userName}" />
</a:actionLink>
<a:actionLink value="#{msg.remove}" image="/images/icons/delete_person.gif" showLink="false" action="removeUser" actionListener="#{UserMembersBean.setupUserAction}">
<a:actionLink value="#{msg.remove}" image="/images/icons/delete_person.gif" showLink="false" action="removeUser" actionListener="#{SpaceUsersBean.setupUserAction}">
<f:param name="userName" value="#{r.userName}" />
</a:actionLink>
</a:column>
@ -191,8 +191,8 @@
<table cellspacing="2" cellpadding="0" border="0" width="100%">
<tr>
<td>
<h:selectBooleanCheckbox id="chkPermissions" value="#{UserMembersBean.inheritPermissions}" valueChangeListener="#{UserMembersBean.inheritPermissionsValueChanged}"
onchange="document.forms['users'].submit(); return true;" disabled="#{!UserMembersBean.hasChangePermissions}" />
<h:selectBooleanCheckbox id="chkPermissions" value="#{SpaceUsersBean.inheritPermissions}" valueChangeListener="#{SpaceUsersBean.inheritPermissionsValueChanged}"
onchange="document.forms['users'].submit(); return true;" disabled="#{!SpaceUsersBean.hasChangePermissions}" />
</td>
<td width=100%>
&nbsp;<h:outputText value="#{msg.inherit_permissions}" />

View File

@ -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" %>
<r:page titleId="title_remove_invited_user">
<f:view>
<%-- load a bundle of properties with I18N strings --%>
<f:loadBundle basename="alfresco.messages.webclient" var="msg"/>
<%-- set the form name here --%>
<h:form acceptCharset="UTF-8" id="remove-user">
<%-- Main outer table --%>
<table cellspacing="0" cellpadding="2">
<%-- Title bar --%>
<tr>
<td colspan="2">
<%@ include file="../parts/titlebar.jsp" %>
</td>
</tr>
<%-- Main area --%>
<tr valign="top">
<%-- Shelf --%>
<td>
<%@ include file="../parts/shelf.jsp" %>
</td>
<%-- Work Area --%>
<td width="100%">
<table cellspacing="0" cellpadding="0" width="100%">
<%-- Breadcrumb --%>
<%@ include file="../parts/breadcrumb.jsp" %>
<%-- Status and Actions --%>
<tr>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_4.gif)" width="4"></td>
<td bgcolor="#EEEEEE">
<%-- Status and Actions inner contents table --%>
<%-- Generally this consists of an icon, textual summary and actions for the current object --%>
<table cellspacing="4" cellpadding="0" width="100%">
<tr valign="top">
<td width="32">
<h:graphicImage url="/images/icons/delete_large.gif"/>
</td>
<td>
<div class="mainSubTitle"><h:outputText value="#{BrowseBean.document.name}" /></div>
<div class="mainTitle"><h:outputText value="#{msg.remove_user}" /> '<h:outputText value="#{ContentUsersBean.personName}" />'</div>
<div class="mainSubText"><h:outputText value="#{msg.remove_content_user_info}" /></div>
</td>
</tr>
</table>
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_6.gif)" width="4"></td>
</tr>
<%-- separator row with gradient shadow --%>
<tr>
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_7.gif" width="4" height="9"></td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_8.gif)"></td>
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_9.gif" width="4" height="9"></td>
</tr>
<%-- Details --%>
<tr valign=top>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
<td>
<table cellspacing="0" cellpadding="4" border="0" width="100%">
<tr>
<td width="100%" valign="top">
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %>
<table cellpadding="2" cellspacing="2" border="0">
<tr>
<td class="mainSubTitle">
<h:outputFormat value="#{msg.remove_content_user_confirm}">
<f:param value="#{ContentUsersBean.personName}"/>
</h:outputFormat>
</td>
</tr>
<tr>
<td>
<%-- Error Messages --%>
<%-- messages tag to show messages not handled by other specific message tags --%>
<h:messages globalOnly="true" styleClass="errorMessage" layout="table" />
<td>
</tr>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %>
</td>
<td valign="top">
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %>
<table cellpadding="1" cellspacing="1" border="0">
<tr>
<td align="center">
<h:commandButton value="#{msg.yes}" action="#{ContentUsersBean.removeOK}" styleClass="dialogControls" />
</td>
</tr>
<tr><td class="dialogButtonSpacing"></td></tr>
<tr>
<td align="center">
<h:commandButton value="#{msg.no}" action="cancel" styleClass="dialogControls" />
</td>
</tr>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %>
</td>
</tr>
</table>
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
</tr>
<%-- Error Messages --%>
<tr valign="top">
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
<td>
<%-- messages tag to show messages not handled by other specific message tags --%>
<h:messages globalOnly="true" styleClass="errorMessage" layout="table" />
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
</tr>
<%-- separator row with bottom panel graphics --%>
<tr>
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_7.gif" width="4" height="4"></td>
<td width="100%" align="center" style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_8.gif)"></td>
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_9.gif" width="4" height="4"></td>
</tr>
</table>
</td>
</tr>
</table>
</h:form>
</f:view>
</r:page>

View File

@ -71,7 +71,7 @@
</td>
<td>
<div class="mainSubTitle"><h:outputText value="#{BrowseBean.actionSpace.name}" /></div>
<div class="mainTitle"><h:outputText value="#{msg.remove_user}" /> '<h:outputText value="#{UserMembersBean.personName}" />'</div>
<div class="mainTitle"><h:outputText value="#{msg.remove_user}" /> '<h:outputText value="#{SpaceUsersBean.personName}" />'</div>
<div class="mainSubText"><h:outputText value="#{msg.remove_invited_user_info}" /></div>
</td>
</tr>
@ -101,7 +101,7 @@
<tr>
<td class="mainSubTitle">
<h:outputFormat value="#{msg.remove_invited_user_confirm}">
<f:param value="#{UserMembersBean.personName}"/>
<f:param value="#{SpaceUsersBean.personName}"/>
</h:outputFormat>
</td>
</tr>
@ -121,7 +121,7 @@
<table cellpadding="1" cellspacing="1" border="0">
<tr>
<td align="center">
<h:commandButton value="#{msg.yes}" action="#{UserMembersBean.removeOK}" styleClass="dialogControls" />
<h:commandButton value="#{msg.yes}" action="#{SpaceUsersBean.removeOK}" styleClass="dialogControls" />
</td>
</tr>
<tr><td class="dialogButtonSpacing"></td></tr>

View File

@ -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" %>
<r:page titleId="title_invitecontentusers_invite">
<f:view>
<%-- load a bundle of properties with I18N strings --%>
<f:loadBundle basename="alfresco.messages.webclient" var="msg"/>
<h:form acceptCharset="UTF-8" id="invite-users">
<%-- Main outer table --%>
<table cellspacing="0" cellpadding="2">
<%-- Title bar --%>
<tr>
<td colspan="2">
<%@ include file="../../parts/titlebar.jsp" %>
</td>
</tr>
<%-- Main area --%>
<tr valign="top">
<%-- Shelf --%>
<td>
<%@ include file="../../parts/shelf.jsp" %>
</td>
<%-- Work Area --%>
<td width="100%">
<table cellspacing="0" cellpadding="0" width="100%">
<%-- Breadcrumb --%>
<%@ include file="../../parts/breadcrumb.jsp" %>
<%-- Status and Actions --%>
<tr>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_4.gif)" width="4"></td>
<td bgcolor="#EEEEEE">
<%-- Status and Actions inner contents table --%>
<%-- Generally this consists of an icon, textual summary and actions for the current object --%>
<table cellspacing="4" cellpadding="0" width="100%">
<tr valign="top">
<td width="32">
<h:graphicImage id="wizard-logo" url="/images/icons/users_large.gif" />
</td>
<td>
<div class="mainSubTitle"><h:outputText value='#{BrowseBean.document.name}' /></div>
<div class="mainTitle"><h:outputText value="#{InviteContentUsersWizard.wizardTitle}" /></div>
<div class="mainSubText"><h:outputText value="#{InviteContentUsersWizard.wizardDescription}" /></div>
</td>
</tr>
</table>
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_6.gif)" width="4"></td>
</tr>
<%-- separator row with gradient shadow --%>
<tr>
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_7.gif" width="4" height="9"></td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_8.gif)"></td>
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_9.gif" width="4" height="9"></td>
</tr>
<%-- Details --%>
<tr valign=top>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
<td>
<table cellspacing="0" cellpadding="3" border="0" width="100%">
<tr>
<td width="20%" valign="top">
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %>
<h:outputText styleClass="mainSubTitle" value="#{msg.steps}"/><br>
<a:modeList itemSpacing="3" iconColumnWidth="2" selectedStyleClass="statusListHighlight"
value="1" disabled="true">
<a:listItem value="1" label="1. #{msg.invite_step_1}" />
<a:listItem value="2" label="2. #{msg.invite_step_2}" />
</a:modeList>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %>
</td>
<td width="100%" valign="top">
<a:errors message="#{msg.error_wizard}" styleClass="errorMessage" />
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %>
<table cellpadding="2" cellspacing="2" border="0" width="100%">
<tr>
<td class="mainSubTitle"><h:outputText value="#{InviteContentUsersWizard.stepTitle}" /></td>
</tr>
<tr>
<td class="mainSubText"><h:outputText value="#{InviteContentUsersWizard.stepDescription}" /></td>
</tr>
<tr><td class="paddingRow"></td></tr>
<tr>
<td class="mainSubTitle"><h:outputText value="#{msg.specify_usersgroups}" /></td>
</tr>
<tr>
<td class="mainSubText"><h:outputText value="1. #{msg.select_usersgroups}" /></td>
</tr>
<tr>
<%-- Picker to select Users/Groups --%>
<td><a:genericPicker id="picker" showAddButton="false" filters="#{InviteContentUsersWizard.filters}" queryCallback="#{InviteContentUsersWizard.pickerCallback}" /></td>
</tr>
<tr>
<td><h:outputText value="#{msg.role}" /></td>
</tr>
<tr>
<td>
<div style="padding:4px">
<h:selectOneListbox id="roles" style="width:250px" size="5">
<f:selectItems value="#{InviteContentUsersWizard.roles}" />
</h:selectOneListbox>
</div>
</td>
</tr>
<tr><td class="paddingRow"></td></tr>
<tr>
<td class="mainSubText">
2. <h:commandButton value="#{msg.add_to_list_button}" actionListener="#{InviteContentUsersWizard.addSelection}" styleClass="wizardButton" />
</td>
</tr>
<tr><td class="paddingRow"></td></tr>
<tr>
<td class="mainSubText"><h:outputText value="#{msg.selected_usersgroups}" /></td>
</tr>
<tr>
<td>
<h:dataTable value="#{InviteContentUsersWizard.userRolesDataModel}" var="row"
rowClasses="selectedItemsRow,selectedItemsRowAlt"
styleClass="selectedItems" headerClass="selectedItemsHeader"
cellspacing="0" cellpadding="4"
rendered="#{InviteContentUsersWizard.userRolesDataModel.rowCount != 0}">
<h:column>
<f:facet name="header">
<h:outputText value="#{msg.name}" />
</f:facet>
<h:outputText value="#{row.label}" />
</h:column>
<h:column>
<a:actionLink actionListener="#{InviteContentUsersWizard.removeSelection}" image="/images/icons/delete.gif"
value="#{msg.remove}" showLink="false" style="padding-left:6px" />
</h:column>
</h:dataTable>
<a:panel id="no-items" rendered="#{InviteContentUsersWizard.userRolesDataModel.rowCount == 0}">
<table cellspacing='0' cellpadding='2' border='0' class='selectedItems'>
<tr>
<td colspan='2' class='selectedItemsHeader'><h:outputText id="no-items-name" value="#{msg.name}" /></td>
</tr>
<tr>
<td class='selectedItemsRow'><h:outputText id="no-items-msg" value="#{msg.no_selected_items}" /></td>
</tr>
</table>
</a:panel>
</td>
</tr>
<tr><td class="paddingRow"></td></tr>
<tr>
<td><h:outputText value="#{InviteContentUsersWizard.stepInstructions}" /></td>
</tr>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %>
</td>
<td valign="top">
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %>
<table cellpadding="1" cellspacing="1" border="0">
<tr>
<td align="center">
<h:commandButton value="#{msg.next_button}" action="#{InviteContentUsersWizard.next}" styleClass="wizardButton" />
</td>
</tr>
<tr><td class="wizardButtonSpacing"></td></tr>
<tr>
<td align="center">
<h:commandButton value="#{msg.cancel_button}" action="#{InviteContentUsersWizard.cancel}" styleClass="wizardButton" />
</td>
</tr>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %>
</td>
</tr>
</table>
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
</tr>
<%-- separator row with bottom panel graphics --%>
<tr>
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_7.gif" width="4" height="4"></td>
<td width="100%" align="center" style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_8.gif)"></td>
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_9.gif" width="4" height="4"></td>
</tr>
</table>
</td>
</tr>
</table>
</h:form>
</f:view>
</r:page>

View File

@ -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" %>
<r:page titleId="title_invitecontentusers_notify">
<f:view>
<%-- load a bundle of properties with I18N strings --%>
<f:loadBundle basename="alfresco.messages.webclient" var="msg"/>
<h:form acceptCharset="UTF-8" id="notify-users">
<%-- Main outer table --%>
<table cellspacing="0" cellpadding="2">
<%-- Title bar --%>
<tr>
<td colspan="2">
<%@ include file="../../parts/titlebar.jsp" %>
</td>
</tr>
<%-- Main area --%>
<tr valign="top">
<%-- Shelf --%>
<td>
<%@ include file="../../parts/shelf.jsp" %>
</td>
<%-- Work Area --%>
<td width="100%">
<table cellspacing="0" cellpadding="0" width="100%">
<%-- Breadcrumb --%>
<%@ include file="../../parts/breadcrumb.jsp" %>
<%-- Status and Actions --%>
<tr>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_4.gif)" width="4"></td>
<td bgcolor="#EEEEEE">
<%-- Status and Actions inner contents table --%>
<%-- Generally this consists of an icon, textual summary and actions for the current object --%>
<table cellspacing="4" cellpadding="0" width="100%">
<tr valign="top">
<td width="32">
<h:graphicImage id="wizard-logo" url="/images/icons/users_large.gif" />
</td>
<td>
<div class="mainSubTitle"><h:outputText value='#{BrowseBean.document.name}' /></div>
<div class="mainTitle"><h:outputText value="#{InviteContentUsersWizard.wizardTitle}" /></div>
<div class="mainSubText"><h:outputText value="#{InviteContentUsersWizard.wizardDescription}" /></div>
</td>
</tr>
</table>
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_6.gif)" width="4"></td>
</tr>
<%-- separator row with gradient shadow --%>
<tr>
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_7.gif" width="4" height="9"></td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_8.gif)"></td>
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_9.gif" width="4" height="9"></td>
</tr>
<%-- Details --%>
<tr valign=top>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
<td>
<table cellspacing="0" cellpadding="3" border="0" width="100%">
<tr>
<td width="20%" valign="top">
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %>
<h:outputText styleClass="mainSubTitle" value="#{msg.steps}"/><br>
<a:modeList itemSpacing="3" iconColumnWidth="2" selectedStyleClass="statusListHighlight"
value="2" disabled="true">
<a:listItem value="1" label="1. #{msg.invite_step_1}" />
<a:listItem value="2" label="2. #{msg.invite_step_2}" />
</a:modeList>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %>
</td>
<td width="100%" valign="top">
<a:errors message="#{msg.error_wizard}" styleClass="errorMessage" />
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %>
<table cellpadding="2" cellspacing="2" border="0" width="100%">
<tr>
<td colspan=2 class="mainSubTitle"><h:outputText value="#{InviteContentUsersWizard.stepTitle}" /></td>
</tr>
<tr>
<td colspan=2 class="mainSubText"><h:outputText value="#{InviteContentUsersWizard.stepDescription}" /></td>
</tr>
<tr><td class="paddingRow"></td></tr>
<tr>
<td colspan=2><h:outputText value="#{msg.send_email}" /></td>
</tr>
<tr>
<td colspan=2>
<h:selectOneRadio value="#{InviteContentUsersWizard.notify}">
<f:selectItem itemValue="yes" itemLabel="#{msg.yes}" />
<f:selectItem itemValue="no" itemLabel="#{msg.no}" />
</h:selectOneRadio>
</td>
</tr>
<tr>
<td><h:outputText value="#{msg.subject}" />:</td>
<td>
<h:inputText value="#{InviteContentUsersWizard.subject}" size="50" maxlength="256" />
</td>
</tr>
<tr>
<td><h:outputText value="#{msg.body}" />:</td>
<td>
<h:inputTextarea value="#{InviteContentUsersWizard.body}" rows="2" cols="48" />
</td>
</tr>
<tr><td class="paddingRow"></td></tr>
<tr>
<td colspan=2>
<table border=0 cellspacing=2 cellpadding=0>
<tr valign="top">
<td>
<h:outputText value="#{msg.automatic_text}" />:
</td>
<td>
<h:outputText escape="false" value="#{InviteContentUsersWizard.automaticText}" />
</td>
</tr>
</table>
</td>
</tr>
<tr><td class="paddingRow"></td></tr>
<tr>
<td colspan=2><h:outputText value="#{InviteContentUsersWizard.stepInstructions}" /></td>
</tr>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %>
</td>
<td valign="top">
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %>
<table cellpadding="1" cellspacing="1" border="0">
<tr>
<td align="center">
<h:commandButton value="#{msg.finish_button}" action="#{InviteContentUsersWizard.finish}" styleClass="wizardButton" />
</td>
</tr>
<tr>
<td align="center">
<h:commandButton value="#{msg.back_button}" action="#{InviteContentUsersWizard.back}" styleClass="wizardButton" />
</td>
</tr>
<tr><td class="wizardButtonSpacing"></td></tr>
<tr>
<td align="center">
<h:commandButton value="#{msg.cancel_button}" action="#{InviteContentUsersWizard.cancel}" styleClass="wizardButton" />
</td>
</tr>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %>
</td>
</tr>
</table>
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
</tr>
<%-- separator row with bottom panel graphics --%>
<tr>
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_7.gif" width="4" height="4"></td>
<td width="100%" align="center" style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_8.gif)"></td>
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_9.gif" width="4" height="4"></td>
</tr>
</table>
</td>
</tr>
</table>
</h:form>
</f:view>
</r:page>

View File

@ -70,8 +70,8 @@
</td>
<td>
<div class="mainSubTitle"><h:outputText value='#{BrowseBean.actionSpace.name}' /></div>
<div class="mainTitle"><h:outputText value="#{InviteUsersWizard.wizardTitle}" /></div>
<div class="mainSubText"><h:outputText value="#{InviteUsersWizard.wizardDescription}" /></div>
<div class="mainTitle"><h:outputText value="#{InviteSpaceUsersWizard.wizardTitle}" /></div>
<div class="mainSubText"><h:outputText value="#{InviteSpaceUsersWizard.wizardDescription}" /></div>
</td>
</tr>
</table>
@ -111,10 +111,10 @@
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %>
<table cellpadding="2" cellspacing="2" border="0" width="100%">
<tr>
<td class="mainSubTitle"><h:outputText value="#{InviteUsersWizard.stepTitle}" /></td>
<td class="mainSubTitle"><h:outputText value="#{InviteSpaceUsersWizard.stepTitle}" /></td>
</tr>
<tr>
<td class="mainSubText"><h:outputText value="#{InviteUsersWizard.stepDescription}" /></td>
<td class="mainSubText"><h:outputText value="#{InviteSpaceUsersWizard.stepDescription}" /></td>
</tr>
<tr><td class="paddingRow"></td></tr>
@ -126,7 +126,7 @@
</tr>
<tr>
<%-- Picker to select Users/Groups --%>
<td><a:genericPicker id="picker" showAddButton="false" filters="#{InviteUsersWizard.filters}" queryCallback="#{InviteUsersWizard.pickerCallback}" /></td>
<td><a:genericPicker id="picker" showAddButton="false" filters="#{InviteSpaceUsersWizard.filters}" queryCallback="#{InviteSpaceUsersWizard.pickerCallback}" /></td>
</tr>
<tr>
<td><h:outputText value="#{msg.role}" /></td>
@ -135,7 +135,7 @@
<td>
<div style="padding:4px">
<h:selectOneListbox id="roles" style="width:250px" size="5">
<f:selectItems value="#{InviteUsersWizard.roles}" />
<f:selectItems value="#{InviteSpaceUsersWizard.roles}" />
</h:selectOneListbox>
</div>
</td>
@ -144,7 +144,7 @@
<tr><td class="paddingRow"></td></tr>
<tr>
<td class="mainSubText">
2. <h:commandButton value="#{msg.add_to_list_button}" actionListener="#{InviteUsersWizard.addSelection}" styleClass="wizardButton" />
2. <h:commandButton value="#{msg.add_to_list_button}" actionListener="#{InviteSpaceUsersWizard.addSelection}" styleClass="wizardButton" />
</td>
</tr>
@ -154,11 +154,11 @@
</tr>
<tr>
<td>
<h:dataTable value="#{InviteUsersWizard.userRolesDataModel}" var="row"
<h:dataTable value="#{InviteSpaceUsersWizard.userRolesDataModel}" var="row"
rowClasses="selectedItemsRow,selectedItemsRowAlt"
styleClass="selectedItems" headerClass="selectedItemsHeader"
cellspacing="0" cellpadding="4"
rendered="#{InviteUsersWizard.userRolesDataModel.rowCount != 0}">
rendered="#{InviteSpaceUsersWizard.userRolesDataModel.rowCount != 0}">
<h:column>
<f:facet name="header">
<h:outputText value="#{msg.name}" />
@ -166,12 +166,12 @@
<h:outputText value="#{row.label}" />
</h:column>
<h:column>
<a:actionLink actionListener="#{InviteUsersWizard.removeSelection}" image="/images/icons/delete.gif"
<a:actionLink actionListener="#{InviteSpaceUsersWizard.removeSelection}" image="/images/icons/delete.gif"
value="#{msg.remove}" showLink="false" style="padding-left:6px" />
</h:column>
</h:dataTable>
<a:panel id="no-items" rendered="#{InviteUsersWizard.userRolesDataModel.rowCount == 0}">
<a:panel id="no-items" rendered="#{InviteSpaceUsersWizard.userRolesDataModel.rowCount == 0}">
<table cellspacing='0' cellpadding='2' border='0' class='selectedItems'>
<tr>
<td colspan='2' class='selectedItemsHeader'><h:outputText id="no-items-name" value="#{msg.name}" /></td>
@ -186,7 +186,7 @@
<tr><td class="paddingRow"></td></tr>
<tr>
<td><h:outputText value="#{InviteUsersWizard.stepInstructions}" /></td>
<td><h:outputText value="#{InviteSpaceUsersWizard.stepInstructions}" /></td>
</tr>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %>
@ -197,13 +197,13 @@
<table cellpadding="1" cellspacing="1" border="0">
<tr>
<td align="center">
<h:commandButton value="#{msg.next_button}" action="#{InviteUsersWizard.next}" styleClass="wizardButton" />
<h:commandButton value="#{msg.next_button}" action="#{InviteSpaceUsersWizard.next}" styleClass="wizardButton" />
</td>
</tr>
<tr><td class="wizardButtonSpacing"></td></tr>
<tr>
<td align="center">
<h:commandButton value="#{msg.cancel_button}" action="#{InviteUsersWizard.cancel}" styleClass="wizardButton" />
<h:commandButton value="#{msg.cancel_button}" action="#{InviteSpaceUsersWizard.cancel}" styleClass="wizardButton" />
</td>
</tr>
</table>

View File

@ -70,8 +70,8 @@
</td>
<td>
<div class="mainSubTitle"><h:outputText value='#{BrowseBean.actionSpace.name}' /></div>
<div class="mainTitle"><h:outputText value="#{InviteUsersWizard.wizardTitle}" /></div>
<div class="mainSubText"><h:outputText value="#{InviteUsersWizard.wizardDescription}" /></div>
<div class="mainTitle"><h:outputText value="#{InviteSpaceUsersWizard.wizardTitle}" /></div>
<div class="mainSubText"><h:outputText value="#{InviteSpaceUsersWizard.wizardDescription}" /></div>
</td>
</tr>
</table>
@ -111,10 +111,10 @@
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %>
<table cellpadding="2" cellspacing="2" border="0" width="100%">
<tr>
<td colspan=2 class="mainSubTitle"><h:outputText value="#{InviteUsersWizard.stepTitle}" /></td>
<td colspan=2 class="mainSubTitle"><h:outputText value="#{InviteSpaceUsersWizard.stepTitle}" /></td>
</tr>
<tr>
<td colspan=2 class="mainSubText"><h:outputText value="#{InviteUsersWizard.stepDescription}" /></td>
<td colspan=2 class="mainSubText"><h:outputText value="#{InviteSpaceUsersWizard.stepDescription}" /></td>
</tr>
<tr><td class="paddingRow"></td></tr>
@ -123,7 +123,7 @@
</tr>
<tr>
<td colspan=2>
<h:selectOneRadio value="#{InviteUsersWizard.notify}">
<h:selectOneRadio value="#{InviteSpaceUsersWizard.notify}">
<f:selectItem itemValue="yes" itemLabel="#{msg.yes}" />
<f:selectItem itemValue="no" itemLabel="#{msg.no}" />
</h:selectOneRadio>
@ -133,14 +133,14 @@
<tr>
<td><h:outputText value="#{msg.subject}" />:</td>
<td>
<h:inputText value="#{InviteUsersWizard.subject}" size="50" maxlength="256" />
<h:inputText value="#{InviteSpaceUsersWizard.subject}" size="50" maxlength="256" />
</td>
</tr>
<tr>
<td><h:outputText value="#{msg.body}" />:</td>
<td>
<h:inputTextarea value="#{InviteUsersWizard.body}" rows="2" cols="48" />
<h:inputTextarea value="#{InviteSpaceUsersWizard.body}" rows="2" cols="48" />
</td>
</tr>
@ -153,7 +153,7 @@
<h:outputText value="#{msg.automatic_text}" />:
</td>
<td>
<h:outputText escape="false" value="#{InviteUsersWizard.automaticText}" />
<h:outputText escape="false" value="#{InviteSpaceUsersWizard.automaticText}" />
</td>
</tr>
</table>
@ -162,7 +162,7 @@
<tr><td class="paddingRow"></td></tr>
<tr>
<td colspan=2><h:outputText value="#{InviteUsersWizard.stepInstructions}" /></td>
<td colspan=2><h:outputText value="#{InviteSpaceUsersWizard.stepInstructions}" /></td>
</tr>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %>
@ -173,18 +173,18 @@
<table cellpadding="1" cellspacing="1" border="0">
<tr>
<td align="center">
<h:commandButton value="#{msg.finish_button}" action="#{InviteUsersWizard.finish}" styleClass="wizardButton" />
<h:commandButton value="#{msg.finish_button}" action="#{InviteSpaceUsersWizard.finish}" styleClass="wizardButton" />
</td>
</tr>
<tr>
<td align="center">
<h:commandButton value="#{msg.back_button}" action="#{InviteUsersWizard.back}" styleClass="wizardButton" />
<h:commandButton value="#{msg.back_button}" action="#{InviteSpaceUsersWizard.back}" styleClass="wizardButton" />
</td>
</tr>
<tr><td class="wizardButtonSpacing"></td></tr>
<tr>
<td align="center">
<h:commandButton value="#{msg.cancel_button}" action="#{InviteUsersWizard.cancel}" styleClass="wizardButton" />
<h:commandButton value="#{msg.cancel_button}" action="#{InviteSpaceUsersWizard.cancel}" styleClass="wizardButton" />
</td>
</tr>
</table>