mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V3.0 to HEAD
11509: ETHREEOH-394: Incorrect message in activity feed when user accepts an invitation to a site 11510: Fix to set position 11511: Fix for ETHREEOH-533: Dialogs access via ExternalAccessServlet return to blank empty container.jsp page when Close button is clicked 11512: Fix DM ACL deletion after merge forward for shared and defining ACLs. 11513: Merged V2.2 to V3.0 11501: Expose if set permissions are inherited or not and fix relatd behaviour for import/copy 11514: Fix for ETHREEOH-476 (Impossible to create Site Invite Workflow) & ETHREEOH-254 (Default value at 'Start Advanced Workflow Wizard' page) 11515: Fix for ETHREEOH-446 and ETHREEOH-447 11517: Fix for ETHREEOH-225: Web Forms with repeating elements don't work 11518: Merged V2.2 to V3.0 11343: ACL upgrades may require a COW - it now warns when this happens. 11369: Always lock against staging - ETWOTWO-763 11519: Merged V2.2 to V3.0 11467: Fixed ETWOTWO-774: CreateVersionTxnListener.afterCommit() throws NPE 11468: More defensive coding on AVM txn listeners (avoid NPEs) 11475: More defensive checks to avoid NPE 11520: Merged V2.2 to V3.0 11478: Keep creator and owner as orihinally set in AVM - Fix for ETWOTWO-604 11521: RuntimeExec: Added optional directive SPLIT: to force argument tokenization 11522: Limited tests to just check the command format not execute it for "dir . .." 11523: Undid revision 11520 (Merged V2.2 11478) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@12449 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -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))
|
||||
{
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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<Map> personNodes = null;
|
||||
|
||||
UserTransaction tx = null;
|
||||
@@ -358,6 +372,8 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext
|
||||
permission.getAuthorityType() == AuthorityType.GROUP ||
|
||||
permission.getAuthorityType() == AuthorityType.GUEST ||
|
||||
permission.getAuthorityType() == AuthorityType.EVERYONE))
|
||||
{
|
||||
if (includeInherited || permission.isSetDirectly())
|
||||
{
|
||||
String authority = permission.getAuthority();
|
||||
|
||||
@@ -372,6 +388,7 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext
|
||||
userPermissions.add(permission.getPermission());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// for each authentication (username/group key) found we get the Person
|
||||
// node represented by it and use that for our list databinding object
|
||||
@@ -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<String, Object> node = new HashMap<String, Object>(5, 1.0f);
|
||||
Map<String, Object> node = new HashMap<String, Object>(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<UIListItem> getFilterItems()
|
||||
{
|
||||
FacesContext context = FacesContext.getCurrentInstance();
|
||||
List<UIListItem> items = new ArrayList<UIListItem>(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
|
||||
|
||||
|
@@ -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<Map> 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<String, List<String>> permissionMap;
|
||||
Map<String, List<String>> 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<Map>(permissionMap.size());
|
||||
List<String> local = new ArrayList<String>();
|
||||
List<String> inh = new ArrayList<String>();
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -81,12 +81,14 @@
|
||||
<f:facet name="header">
|
||||
<h:outputText value="#{msg.actions}"/>
|
||||
</f:facet>
|
||||
<a:booleanEvaluator value="#{!r.inherited}">
|
||||
<a:actionLink value="#{msg.change_roles}" image="/images/icons/edituser.gif" showLink="false" action="dialog:editContentUserRoles" actionListener="#{EditContentUserRolesDialog.setupUserAction}">
|
||||
<f:param name="userName" value="#{r.userName}" />
|
||||
</a:actionLink>
|
||||
<a:actionLink value="#{msg.remove}" image="/images/icons/delete_person.gif" showLink="false" action="dialog:removeContentUser" actionListener="#{RemoveContentUserDialog.setupUserAction}">
|
||||
<f:param name="userName" value="#{r.userName}" />
|
||||
</a:actionLink>
|
||||
</a:booleanEvaluator>
|
||||
</a:column>
|
||||
|
||||
<a:dataPager styleClass="pager" />
|
||||
|
@@ -83,12 +83,14 @@
|
||||
<f:facet name="header">
|
||||
<h:outputText value="#{msg.actions}"/>
|
||||
</f:facet>
|
||||
<a:booleanEvaluator value="#{!r.inherited}">
|
||||
<a:actionLink value="#{msg.change_roles}" image="/images/icons/edituser.gif" showLink="false" action="dialog:editUserRoles" actionListener="#{EditUserRolesDialog.setupUserAction}">
|
||||
<f:param name="userName" value="#{r.userName}" />
|
||||
</a:actionLink>
|
||||
<a:actionLink value="#{msg.remove}" image="/images/icons/delete_person.gif" showLink="false" action="dialog:removeInvitedUser" actionListener="#{RemoveInvitedUserDialog.setupUserAction}">
|
||||
<f:param name="userName" value="#{r.userName}" />
|
||||
</a:actionLink>
|
||||
</a:booleanEvaluator>
|
||||
</a:column>
|
||||
|
||||
<a:dataPager styleClass="pager" />
|
||||
@@ -115,7 +117,5 @@
|
||||
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
</table>
|
||||
</f:verbatim>
|
@@ -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") +
|
||||
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;
|
||||
|
Reference in New Issue
Block a user