diff --git a/source/java/org/alfresco/web/app/servlet/ExternalAccessServlet.java b/source/java/org/alfresco/web/app/servlet/ExternalAccessServlet.java index 576f15470a..eaa8781102 100644 --- a/source/java/org/alfresco/web/app/servlet/ExternalAccessServlet.java +++ b/source/java/org/alfresco/web/app/servlet/ExternalAccessServlet.java @@ -26,6 +26,7 @@ package org.alfresco.web.app.servlet; import java.io.IOException; import java.text.MessageFormat; +import java.util.Stack; import java.util.StringTokenizer; import javax.faces.application.NavigationHandler; @@ -132,6 +133,16 @@ public class ExternalAccessServlet extends BaseServlet ServiceRegistry serviceRegistry = getServiceRegistry(getServletContext()); PermissionService permissionService = serviceRegistry.getPermissionService(); + // as we are potentially coming in from an external app reset the view stack + Stack viewStack = (Stack)fc.getExternalContext().getSessionMap().get("_alfViewStack"); + if (viewStack != null) + { + viewStack.clear(); + + if (logger.isDebugEnabled()) + logger.debug("Cleared view stack"); + } + // setup is required for certain outcome requests if (OUTCOME_DOCDETAILS.equals(outcome)) { diff --git a/source/java/org/alfresco/web/app/servlet/FacesHelper.java b/source/java/org/alfresco/web/app/servlet/FacesHelper.java index 698504d868..8ea1429755 100644 --- a/source/java/org/alfresco/web/app/servlet/FacesHelper.java +++ b/source/java/org/alfresco/web/app/servlet/FacesHelper.java @@ -24,8 +24,6 @@ */ package org.alfresco.web.app.servlet; -import java.util.regex.Pattern; - import javax.faces.FactoryFinder; import javax.faces.component.UIComponent; import javax.faces.component.UIViewRoot; @@ -142,8 +140,9 @@ public final class FacesHelper // set a new viewRoot, otherwise context.getViewRoot returns null if (viewRoot == null) { - viewRoot = "/jsp/close.jsp"; + viewRoot = "/jsp/browse/browse.jsp"; } + UIViewRoot view = facesContext.getApplication().getViewHandler().createView(facesContext, viewRoot); facesContext.setViewRoot(view); diff --git a/source/java/org/alfresco/web/app/servlet/command/EditContentPropertiesCommand.java b/source/java/org/alfresco/web/app/servlet/command/EditContentPropertiesCommand.java index ba7c6a860f..a879ff9024 100644 --- a/source/java/org/alfresco/web/app/servlet/command/EditContentPropertiesCommand.java +++ b/source/java/org/alfresco/web/app/servlet/command/EditContentPropertiesCommand.java @@ -63,7 +63,7 @@ public class EditContentPropertiesCommand extends BaseUIActionCommand ServletContext sc = (ServletContext)properties.get(PROP_SERVLETCONTEXT); ServletRequest req = (ServletRequest)properties.get(PROP_REQUEST); ServletResponse res = (ServletResponse)properties.get(PROP_RESPONSE); - FacesContext fc = FacesHelper.getFacesContext(req, res, sc, "/jsp/return.jsp"); + FacesContext fc = FacesHelper.getFacesContext(req, res, sc, "/jsp/close.jsp"); BrowseBean browseBean = (BrowseBean)FacesHelper.getManagedBean(fc, BrowseBean.BEAN_NAME); // setup context from url args in properties map diff --git a/source/java/org/alfresco/web/app/servlet/command/UserProfileDialogCommand.java b/source/java/org/alfresco/web/app/servlet/command/UserProfileDialogCommand.java index acf28d79d0..5241ee67a9 100644 --- a/source/java/org/alfresco/web/app/servlet/command/UserProfileDialogCommand.java +++ b/source/java/org/alfresco/web/app/servlet/command/UserProfileDialogCommand.java @@ -61,7 +61,7 @@ public class UserProfileDialogCommand extends BaseUIActionCommand ServletContext sc = (ServletContext)properties.get(PROP_SERVLETCONTEXT); ServletRequest req = (ServletRequest)properties.get(PROP_REQUEST); ServletResponse res = (ServletResponse)properties.get(PROP_RESPONSE); - FacesContext fc = FacesHelper.getFacesContext(req, res, sc, "/jsp/return.jsp"); + FacesContext fc = FacesHelper.getFacesContext(req, res, sc, "/jsp/close.jsp"); UsersDialog dialog = (UsersDialog)FacesHelper.getManagedBean(fc, UsersDialog.BEAN_NAME); // setup dialog context from url args in properties map diff --git a/source/java/org/alfresco/web/bean/users/UserMembersBean.java b/source/java/org/alfresco/web/bean/users/UserMembersBean.java index 07a3dc87bb..02d4f13624 100644 --- a/source/java/org/alfresco/web/bean/users/UserMembersBean.java +++ b/source/java/org/alfresco/web/bean/users/UserMembersBean.java @@ -60,18 +60,23 @@ import org.alfresco.web.app.servlet.FacesHelper; import org.alfresco.web.bean.BrowseBean; import org.alfresco.web.bean.NavigationBean; import org.alfresco.web.bean.dialog.BaseDialogBean; +import org.alfresco.web.bean.dialog.FilterViewSupport; 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.ui.common.Utils; import org.alfresco.web.ui.common.component.UIActionLink; +import org.alfresco.web.ui.common.component.UIListItem; +import org.alfresco.web.ui.common.component.UIModeList; import org.alfresco.web.ui.common.component.data.UIRichList; import org.alfresco.web.ui.repo.WebResources; /** + * Bean backing the Manage Space/Content Permission pages. + * * @author Kevin Roast */ -public abstract class UserMembersBean extends BaseDialogBean implements IContextListener +public abstract class UserMembersBean extends BaseDialogBean implements IContextListener, FilterViewSupport { private static final String MSG_SUCCESS_INHERIT_NOT = "success_not_inherit_permissions"; private static final String MSG_SUCCESS_INHERIT = "success_inherit_permissions"; @@ -80,6 +85,13 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext private static final String OUTCOME_FINISH = "finish"; + private static final String LOCAL = "local"; + private static final String INHERITED = "inherited"; + + private final static String MSG_CLOSE = "close"; + + private String filterMode = LOCAL; + /** NodeService bean reference */ transient private NodeService nodeService; @@ -337,6 +349,8 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext { FacesContext context = FacesContext.getCurrentInstance(); + boolean includeInherited = (this.filterMode.equals(INHERITED)); + List personNodes = null; UserTransaction tx = null; @@ -359,17 +373,20 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext permission.getAuthorityType() == AuthorityType.GUEST || permission.getAuthorityType() == AuthorityType.EVERYONE)) { - String authority = permission.getAuthority(); - - List userPermissions = permissionMap.get(authority); - if (userPermissions == null) + if (includeInherited || permission.isSetDirectly()) { - // create for first time - userPermissions = new ArrayList(4); - permissionMap.put(authority, userPermissions); + String authority = permission.getAuthority(); + + List userPermissions = permissionMap.get(authority); + if (userPermissions == null) + { + // create for first time + userPermissions = new ArrayList(4); + permissionMap.put(authority, userPermissions); + } + // add the permission name for this authority + userPermissions.add(permission.getPermission()); } - // add the permission name for this authority - userPermissions.add(permission.getPermission()); } } @@ -396,6 +413,7 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext props.put("roles", roleListToString(context, permissionMap.get(authority))); props.put("icon", WebResources.IMAGE_PERSON); props.put("isGroup", Boolean.FALSE); + props.put("inherited", includeInherited); personNodes.add(node); } @@ -403,7 +421,7 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext else { // need a map (dummy node) to represent props for this Group Authority - Map node = new HashMap(5, 1.0f); + Map node = new HashMap(8, 1.0f); if (authority.startsWith(PermissionService.GROUP_PREFIX) == true) { node.put("fullName", authority.substring(PermissionService.GROUP_PREFIX.length())); @@ -417,6 +435,8 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext node.put("roles", roleListToString(context, permissionMap.get(authority))); node.put("icon", WebResources.IMAGE_GROUP); node.put("isGroup", Boolean.TRUE); + node.put("inherited", includeInherited); + personNodes.add(node); } } @@ -501,6 +521,65 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext // nothing to do } + + // ------------------------------------------------------------------------------ + // FilterViewSupport implementation + + /** + * @see org.alfresco.web.bean.dialog.FilterViewSupport#filterModeChanged(javax.faces.event.ActionEvent) + */ + public void filterModeChanged(ActionEvent event) + { + UIModeList viewList = (UIModeList) event.getComponent(); + setFilterMode(viewList.getValue().toString()); + // force the list to be re-queried when the page is refreshed + if (this.usersRichList != null) + { + this.usersRichList.setValue(null); + } + } + + /** + * @see org.alfresco.web.bean.dialog.FilterViewSupport#getFilterItems() + */ + public List getFilterItems() + { + FacesContext context = FacesContext.getCurrentInstance(); + List items = new ArrayList(2); + + UIListItem item1 = new UIListItem(); + item1.setValue(INHERITED); + item1.setLabel(Application.getMessage(context, INHERITED)); + items.add(item1); + + UIListItem item2 = new UIListItem(); + item2.setValue(LOCAL); + item2.setLabel(Application.getMessage(context, LOCAL)); + items.add(item2); + + return items; + } + + /** + * @see org.alfresco.web.bean.dialog.FilterViewSupport#getFilterMode() + */ + public String getFilterMode() + { + return filterMode; + } + + /** + * @see org.alfresco.web.bean.dialog.FilterViewSupport#setFilterMode(java.lang.String) + */ + public void setFilterMode(final String filterMode) + { + this.filterMode = filterMode; + + // clear datalist cache ready to change results based on filter setting + contextUpdated(); + } + + // ------------------------------------------------------------------------------ // Action event handlers diff --git a/source/java/org/alfresco/web/bean/wcm/ManagePermissionsDialog.java b/source/java/org/alfresco/web/bean/wcm/ManagePermissionsDialog.java index 9cd4cae4bf..d94fe8b9a0 100644 --- a/source/java/org/alfresco/web/bean/wcm/ManagePermissionsDialog.java +++ b/source/java/org/alfresco/web/bean/wcm/ManagePermissionsDialog.java @@ -51,14 +51,12 @@ import org.alfresco.web.ui.repo.WebResources; */ public class ManagePermissionsDialog extends BasePermissionsDialog implements IContextListener, FilterViewSupport { - private static final long serialVersionUID = -6980134441634707541L; private static final String MSG_MANAGE_PERMS_FOR = "manage_permissions_title"; private static final String MSG_VIEW_PERMS_FOR = "view_permissions_title"; private static final String LOCAL = "local"; - private static final String INHERITED = "inherited"; private final static String MSG_CLOSE = "close"; @@ -73,6 +71,7 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC private boolean inheritParenSpacePermissions; + /** * @param personService The personService to set. */ @@ -122,7 +121,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC */ public List getUsers() { - boolean includeInherited = true; if (this.filterMode.equals(LOCAL)) @@ -146,7 +144,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC // found. NodeRef actionNode = getAvmBrowseBean().getAvmActionNode().getNodeRef(); - // getPermissionService().setInheritParentPermissions(actionNode, inheritParenSpacePermissions); Map> permissionMap; Map> parentPermissionMap; @@ -156,13 +153,10 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC permissionMap = getPerson(permissions, permsToDisplay); NodeRef parentRef = getNodeService().getPrimaryParent(actionNode).getParentRef(); - // getPermissionService().getAllSetPermissions(parentRef); parentPermissionMap = getPerson(getPermissionService().getAllSetPermissions(parentRef), permsToDisplay); - // for each authentication (username/group key) found we get the - // Person - // node represented by it and use that for our list databinding - // object + // for each authentication (username/group key) found we get the Person + // node represented by it and use that for our list databinding object personNodes = new ArrayList(permissionMap.size()); List local = new ArrayList(); List inh = new ArrayList(); @@ -392,7 +386,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC public void areaChanged() { // nothing to do - } /* @@ -406,7 +399,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC { this.usersRichList.setValue(null); } - } /* @@ -417,7 +409,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC public void spaceChanged() { // nothing to do - } /* @@ -428,14 +419,12 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC public void filterModeChanged(ActionEvent event) { UIModeList viewList = (UIModeList) event.getComponent(); - // this.filterModeMode = viewList.getValue().toString(); setFilterMode(viewList.getValue().toString()); // force the list to be re-queried when the page is refreshed if (this.usersRichList != null) { this.usersRichList.setValue(null); } - } /* @@ -506,7 +495,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC } - /* * (non-Javadoc) * @@ -538,7 +526,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC @Override public boolean getFinishButtonDisabled() { - return false; } @@ -559,7 +546,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC FacesContext fc = FacesContext.getCurrentInstance(); String pattern = Application.getMessage(fc, isRendered() ? MSG_MANAGE_PERMS_FOR : MSG_VIEW_PERMS_FOR); - // avmBrowseBean.getAvmActionNode().getNodePath().toDisplayPath(getNodeService(), getPermissionService()); return MessageFormat.format(pattern, getAvmBrowseBean().getAvmActionNode().getName()); } @@ -605,5 +591,4 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC boolean inheritPermissions = (Boolean)event.getNewValue(); setInheritParenSpacePermissions(inheritPermissions); } - } diff --git a/source/java/org/alfresco/web/bean/workflow/StartWorkflowWizard.java b/source/java/org/alfresco/web/bean/workflow/StartWorkflowWizard.java index 4d4d605392..316e18b577 100644 --- a/source/java/org/alfresco/web/bean/workflow/StartWorkflowWizard.java +++ b/source/java/org/alfresco/web/bean/workflow/StartWorkflowWizard.java @@ -567,7 +567,8 @@ public class StartWorkflowWizard extends BaseWizardBean for (WorkflowDefinition workflowDef : workflowDefs) { String name = workflowDef.name; - if (configuredWcmWorkflows.containsKey(name) == false) + if (configuredWcmWorkflows.containsKey(name) == false && + "jbpm$wf:invite".equals(name) == false) { // add the workflow if it is not a WCM specific workflow String label = workflowDef.title; @@ -580,13 +581,8 @@ public class StartWorkflowWizard extends BaseWizardBean } } - // set the initial selected workflow to the first in the list, unless there are no - // workflows, in which disable the next button - if (this.availableWorkflows.size() > 0) - { - this.selectedWorkflow = (String)this.availableWorkflows.get(0).getValue(); - } - else + // disable the next button if there are no workflows + if (this.availableWorkflows.size() == 0) { this.nextButtonDisabled = true; } @@ -610,6 +606,12 @@ public class StartWorkflowWizard extends BaseWizardBean QuickSort sorter = new QuickSort(availableWorkflows, "label", true, IDataContainer.SORT_CASEINSENSITIVE); sorter.sort(); + // select the first workflow in the list + if (this.availableWorkflows.size() > 0) + { + this.selectedWorkflow = (String)this.availableWorkflows.get(0).getValue(); + } + return availableWorkflows; } diff --git a/source/web/jsp/roles/manage-content-users.jsp b/source/web/jsp/roles/manage-content-users.jsp index 2f64db106c..8a880dea5a 100644 --- a/source/web/jsp/roles/manage-content-users.jsp +++ b/source/web/jsp/roles/manage-content-users.jsp @@ -36,7 +36,7 @@ <%-- Details --%> - + - + - + - +
@@ -46,61 +46,63 @@ - <%-- Primary column with full name --%> - - - - - - - - - - - - - - <%-- Username column --%> - - - - - - - - <%-- Roles column --%> - - - - - - - - <%-- Actions column --%> - - - - - - - - - - - - - - + <%-- Primary column with full name --%> + + + + + + + + + + + + + + <%-- Username column --%> + + + + + + + + <%-- Roles column --%> + + + + + + + + <%-- Actions column --%> + + + + + + + + + + + + + + + +
@@ -111,7 +113,7 @@
\ 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 668ffbae59..af91d6551f 100644 --- a/source/web/jsp/roles/manage-invited-users.jsp +++ b/source/web/jsp/roles/manage-invited-users.jsp @@ -38,7 +38,7 @@ <%-- Details --%> - + @@ -48,61 +48,63 @@ - <%-- Primary column with full name --%> - - - - - - - - - - - - - - <%-- Username column --%> - - - - - - - - <%-- Roles column --%> - - - - - - - - <%-- Actions column --%> - - - - - - - - - - - - - - + <%-- Primary column with full name --%> + + + + + + + + + + + + + + <%-- Username column --%> + + + + + + + + <%-- Roles column --%> + + + + + + + + <%-- Actions column --%> + + + + + + + + + + + + + + + +
- + - + @@ -112,10 +114,8 @@
- + - - - + \ No newline at end of file diff --git a/source/web/scripts/ajax/xforms.js b/source/web/scripts/ajax/xforms.js index 0cc514df92..f213aa51f4 100644 --- a/source/web/scripts/ajax/xforms.js +++ b/source/web/scripts/ajax/xforms.js @@ -4287,9 +4287,12 @@ alfresco.xforms.XForm = new Class({ var clone = prototypeClones.pop(); // walk all nodes of the clone and ensure that they have generated ids. // those that do not are nested repeats that should not be added - assert(clone.getAttribute("id") in generatedIds, - "expected clone id " + clone.getAttribute("id") + - " to be a generated id"); + if ((clone.getAttribute("id") in generatedIds) == false) + { + throw new Error("expected clone id " + clone.getAttribute("id") + + " to be a generated id"); + } + function _removeNonGeneratedChildNodes(node, ids) { var child = node.firstChild;