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:
Kevin Roast
2008-12-17 14:24:08 +00:00
parent 992adcfec7
commit 9b736530c7
10 changed files with 227 additions and 146 deletions

View File

@@ -26,6 +26,7 @@ package org.alfresco.web.app.servlet;
import java.io.IOException; import java.io.IOException;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.Stack;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import javax.faces.application.NavigationHandler; import javax.faces.application.NavigationHandler;
@@ -132,6 +133,16 @@ public class ExternalAccessServlet extends BaseServlet
ServiceRegistry serviceRegistry = getServiceRegistry(getServletContext()); ServiceRegistry serviceRegistry = getServiceRegistry(getServletContext());
PermissionService permissionService = serviceRegistry.getPermissionService(); 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 // setup is required for certain outcome requests
if (OUTCOME_DOCDETAILS.equals(outcome)) if (OUTCOME_DOCDETAILS.equals(outcome))
{ {

View File

@@ -24,8 +24,6 @@
*/ */
package org.alfresco.web.app.servlet; package org.alfresco.web.app.servlet;
import java.util.regex.Pattern;
import javax.faces.FactoryFinder; import javax.faces.FactoryFinder;
import javax.faces.component.UIComponent; import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot; import javax.faces.component.UIViewRoot;
@@ -142,8 +140,9 @@ public final class FacesHelper
// set a new viewRoot, otherwise context.getViewRoot returns null // set a new viewRoot, otherwise context.getViewRoot returns null
if (viewRoot == null) if (viewRoot == null)
{ {
viewRoot = "/jsp/close.jsp"; viewRoot = "/jsp/browse/browse.jsp";
} }
UIViewRoot view = facesContext.getApplication().getViewHandler().createView(facesContext, viewRoot); UIViewRoot view = facesContext.getApplication().getViewHandler().createView(facesContext, viewRoot);
facesContext.setViewRoot(view); facesContext.setViewRoot(view);

View File

@@ -63,7 +63,7 @@ public class EditContentPropertiesCommand extends BaseUIActionCommand
ServletContext sc = (ServletContext)properties.get(PROP_SERVLETCONTEXT); ServletContext sc = (ServletContext)properties.get(PROP_SERVLETCONTEXT);
ServletRequest req = (ServletRequest)properties.get(PROP_REQUEST); ServletRequest req = (ServletRequest)properties.get(PROP_REQUEST);
ServletResponse res = (ServletResponse)properties.get(PROP_RESPONSE); 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); BrowseBean browseBean = (BrowseBean)FacesHelper.getManagedBean(fc, BrowseBean.BEAN_NAME);
// setup context from url args in properties map // setup context from url args in properties map

View File

@@ -61,7 +61,7 @@ public class UserProfileDialogCommand extends BaseUIActionCommand
ServletContext sc = (ServletContext)properties.get(PROP_SERVLETCONTEXT); ServletContext sc = (ServletContext)properties.get(PROP_SERVLETCONTEXT);
ServletRequest req = (ServletRequest)properties.get(PROP_REQUEST); ServletRequest req = (ServletRequest)properties.get(PROP_REQUEST);
ServletResponse res = (ServletResponse)properties.get(PROP_RESPONSE); 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); UsersDialog dialog = (UsersDialog)FacesHelper.getManagedBean(fc, UsersDialog.BEAN_NAME);
// setup dialog context from url args in properties map // setup dialog context from url args in properties map

View File

@@ -60,18 +60,23 @@ import org.alfresco.web.app.servlet.FacesHelper;
import org.alfresco.web.bean.BrowseBean; import org.alfresco.web.bean.BrowseBean;
import org.alfresco.web.bean.NavigationBean; import org.alfresco.web.bean.NavigationBean;
import org.alfresco.web.bean.dialog.BaseDialogBean; 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.MapNode;
import org.alfresco.web.bean.repository.Node; import org.alfresco.web.bean.repository.Node;
import org.alfresco.web.bean.repository.Repository; import org.alfresco.web.bean.repository.Repository;
import org.alfresco.web.ui.common.Utils; import org.alfresco.web.ui.common.Utils;
import org.alfresco.web.ui.common.component.UIActionLink; 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.common.component.data.UIRichList;
import org.alfresco.web.ui.repo.WebResources; import org.alfresco.web.ui.repo.WebResources;
/** /**
* Bean backing the Manage Space/Content Permission pages.
*
* @author Kevin Roast * @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_NOT = "success_not_inherit_permissions";
private static final String MSG_SUCCESS_INHERIT = "success_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 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 */ /** NodeService bean reference */
transient private NodeService nodeService; transient private NodeService nodeService;
@@ -337,6 +349,8 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext
{ {
FacesContext context = FacesContext.getCurrentInstance(); FacesContext context = FacesContext.getCurrentInstance();
boolean includeInherited = (this.filterMode.equals(INHERITED));
List<Map> personNodes = null; List<Map> personNodes = null;
UserTransaction tx = null; UserTransaction tx = null;
@@ -358,6 +372,8 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext
permission.getAuthorityType() == AuthorityType.GROUP || permission.getAuthorityType() == AuthorityType.GROUP ||
permission.getAuthorityType() == AuthorityType.GUEST || permission.getAuthorityType() == AuthorityType.GUEST ||
permission.getAuthorityType() == AuthorityType.EVERYONE)) permission.getAuthorityType() == AuthorityType.EVERYONE))
{
if (includeInherited || permission.isSetDirectly())
{ {
String authority = permission.getAuthority(); String authority = permission.getAuthority();
@@ -372,6 +388,7 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext
userPermissions.add(permission.getPermission()); userPermissions.add(permission.getPermission());
} }
} }
}
// for each authentication (username/group key) found we get the Person // for each authentication (username/group key) found we get the Person
// node represented by it and use that for our list databinding object // 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("roles", roleListToString(context, permissionMap.get(authority)));
props.put("icon", WebResources.IMAGE_PERSON); props.put("icon", WebResources.IMAGE_PERSON);
props.put("isGroup", Boolean.FALSE); props.put("isGroup", Boolean.FALSE);
props.put("inherited", includeInherited);
personNodes.add(node); personNodes.add(node);
} }
@@ -403,7 +421,7 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext
else else
{ {
// need a map (dummy node) to represent props for this Group Authority // 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) if (authority.startsWith(PermissionService.GROUP_PREFIX) == true)
{ {
node.put("fullName", authority.substring(PermissionService.GROUP_PREFIX.length())); 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("roles", roleListToString(context, permissionMap.get(authority)));
node.put("icon", WebResources.IMAGE_GROUP); node.put("icon", WebResources.IMAGE_GROUP);
node.put("isGroup", Boolean.TRUE); node.put("isGroup", Boolean.TRUE);
node.put("inherited", includeInherited);
personNodes.add(node); personNodes.add(node);
} }
} }
@@ -501,6 +521,65 @@ public abstract class UserMembersBean extends BaseDialogBean implements IContext
// nothing to do // 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 // Action event handlers

View File

@@ -51,14 +51,12 @@ import org.alfresco.web.ui.repo.WebResources;
*/ */
public class ManagePermissionsDialog extends BasePermissionsDialog implements IContextListener, FilterViewSupport public class ManagePermissionsDialog extends BasePermissionsDialog implements IContextListener, FilterViewSupport
{ {
private static final long serialVersionUID = -6980134441634707541L; private static final long serialVersionUID = -6980134441634707541L;
private static final String MSG_MANAGE_PERMS_FOR = "manage_permissions_title"; 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 MSG_VIEW_PERMS_FOR = "view_permissions_title";
private static final String LOCAL = "local"; private static final String LOCAL = "local";
private static final String INHERITED = "inherited"; private static final String INHERITED = "inherited";
private final static String MSG_CLOSE = "close"; private final static String MSG_CLOSE = "close";
@@ -73,6 +71,7 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC
private boolean inheritParenSpacePermissions; private boolean inheritParenSpacePermissions;
/** /**
* @param personService The personService to set. * @param personService The personService to set.
*/ */
@@ -122,7 +121,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC
*/ */
public List<Map> getUsers() public List<Map> getUsers()
{ {
boolean includeInherited = true; boolean includeInherited = true;
if (this.filterMode.equals(LOCAL)) if (this.filterMode.equals(LOCAL))
@@ -146,7 +144,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC
// found. // found.
NodeRef actionNode = getAvmBrowseBean().getAvmActionNode().getNodeRef(); NodeRef actionNode = getAvmBrowseBean().getAvmActionNode().getNodeRef();
// getPermissionService().setInheritParentPermissions(actionNode, inheritParenSpacePermissions);
Map<String, List<String>> permissionMap; Map<String, List<String>> permissionMap;
Map<String, List<String>> parentPermissionMap; Map<String, List<String>> parentPermissionMap;
@@ -156,13 +153,10 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC
permissionMap = getPerson(permissions, permsToDisplay); permissionMap = getPerson(permissions, permsToDisplay);
NodeRef parentRef = getNodeService().getPrimaryParent(actionNode).getParentRef(); NodeRef parentRef = getNodeService().getPrimaryParent(actionNode).getParentRef();
// getPermissionService().getAllSetPermissions(parentRef);
parentPermissionMap = getPerson(getPermissionService().getAllSetPermissions(parentRef), permsToDisplay); parentPermissionMap = getPerson(getPermissionService().getAllSetPermissions(parentRef), permsToDisplay);
// for each authentication (username/group key) found we get the // for each authentication (username/group key) found we get the Person
// Person // node represented by it and use that for our list databinding object
// node represented by it and use that for our list databinding
// object
personNodes = new ArrayList<Map>(permissionMap.size()); personNodes = new ArrayList<Map>(permissionMap.size());
List<String> local = new ArrayList<String>(); List<String> local = new ArrayList<String>();
List<String> inh = new ArrayList<String>(); List<String> inh = new ArrayList<String>();
@@ -392,7 +386,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC
public void areaChanged() public void areaChanged()
{ {
// nothing to do // nothing to do
} }
/* /*
@@ -406,7 +399,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC
{ {
this.usersRichList.setValue(null); this.usersRichList.setValue(null);
} }
} }
/* /*
@@ -417,7 +409,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC
public void spaceChanged() public void spaceChanged()
{ {
// nothing to do // nothing to do
} }
/* /*
@@ -428,14 +419,12 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC
public void filterModeChanged(ActionEvent event) public void filterModeChanged(ActionEvent event)
{ {
UIModeList viewList = (UIModeList) event.getComponent(); UIModeList viewList = (UIModeList) event.getComponent();
// this.filterModeMode = viewList.getValue().toString();
setFilterMode(viewList.getValue().toString()); setFilterMode(viewList.getValue().toString());
// force the list to be re-queried when the page is refreshed // force the list to be re-queried when the page is refreshed
if (this.usersRichList != null) if (this.usersRichList != null)
{ {
this.usersRichList.setValue(null); this.usersRichList.setValue(null);
} }
} }
/* /*
@@ -506,7 +495,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC
} }
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
@@ -538,7 +526,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC
@Override @Override
public boolean getFinishButtonDisabled() public boolean getFinishButtonDisabled()
{ {
return false; return false;
} }
@@ -559,7 +546,6 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC
FacesContext fc = FacesContext.getCurrentInstance(); FacesContext fc = FacesContext.getCurrentInstance();
String pattern = Application.getMessage(fc, isRendered() ? MSG_MANAGE_PERMS_FOR : MSG_VIEW_PERMS_FOR); 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()); return MessageFormat.format(pattern, getAvmBrowseBean().getAvmActionNode().getName());
} }
@@ -605,5 +591,4 @@ public class ManagePermissionsDialog extends BasePermissionsDialog implements IC
boolean inheritPermissions = (Boolean)event.getNewValue(); boolean inheritPermissions = (Boolean)event.getNewValue();
setInheritParenSpacePermissions(inheritPermissions); setInheritParenSpacePermissions(inheritPermissions);
} }
} }

View File

@@ -567,7 +567,8 @@ public class StartWorkflowWizard extends BaseWizardBean
for (WorkflowDefinition workflowDef : workflowDefs) for (WorkflowDefinition workflowDef : workflowDefs)
{ {
String name = workflowDef.name; 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 // add the workflow if it is not a WCM specific workflow
String label = workflowDef.title; 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 // disable the next button if there are no workflows
// workflows, in which disable the next button if (this.availableWorkflows.size() == 0)
if (this.availableWorkflows.size() > 0)
{
this.selectedWorkflow = (String)this.availableWorkflows.get(0).getValue();
}
else
{ {
this.nextButtonDisabled = true; this.nextButtonDisabled = true;
} }
@@ -610,6 +606,12 @@ public class StartWorkflowWizard extends BaseWizardBean
QuickSort sorter = new QuickSort(availableWorkflows, "label", true, IDataContainer.SORT_CASEINSENSITIVE); QuickSort sorter = new QuickSort(availableWorkflows, "label", true, IDataContainer.SORT_CASEINSENSITIVE);
sorter.sort(); sorter.sort();
// select the first workflow in the list
if (this.availableWorkflows.size() > 0)
{
this.selectedWorkflow = (String)this.availableWorkflows.get(0).getValue();
}
return availableWorkflows; return availableWorkflows;
} }

View File

@@ -81,12 +81,14 @@
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{msg.actions}"/> <h:outputText value="#{msg.actions}"/>
</f:facet> </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}"> <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}" /> <f:param name="userName" value="#{r.userName}" />
</a:actionLink> </a:actionLink>
<a:actionLink value="#{msg.remove}" image="/images/icons/delete_person.gif" showLink="false" action="dialog:removeContentUser" actionListener="#{RemoveContentUserDialog.setupUserAction}"> <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}" /> <f:param name="userName" value="#{r.userName}" />
</a:actionLink> </a:actionLink>
</a:booleanEvaluator>
</a:column> </a:column>
<a:dataPager styleClass="pager" /> <a:dataPager styleClass="pager" />

View File

@@ -83,12 +83,14 @@
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{msg.actions}"/> <h:outputText value="#{msg.actions}"/>
</f:facet> </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}"> <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}" /> <f:param name="userName" value="#{r.userName}" />
</a:actionLink> </a:actionLink>
<a:actionLink value="#{msg.remove}" image="/images/icons/delete_person.gif" showLink="false" action="dialog:removeInvitedUser" actionListener="#{RemoveInvitedUserDialog.setupUserAction}"> <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}" /> <f:param name="userName" value="#{r.userName}" />
</a:actionLink> </a:actionLink>
</a:booleanEvaluator>
</a:column> </a:column>
<a:dataPager styleClass="pager" /> <a:dataPager styleClass="pager" />
@@ -115,7 +117,5 @@
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td> <td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
</tr> </tr>
</table> </table>
</f:verbatim> </f:verbatim>

View File

@@ -4287,9 +4287,12 @@ alfresco.xforms.XForm = new Class({
var clone = prototypeClones.pop(); var clone = prototypeClones.pop();
// walk all nodes of the clone and ensure that they have generated ids. // 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 // those that do not are nested repeats that should not be added
assert(clone.getAttribute("id") in generatedIds, if ((clone.getAttribute("id") in generatedIds) == false)
"expected clone id " + clone.getAttribute("id") + {
throw new Error("expected clone id " + clone.getAttribute("id") +
" to be a generated id"); " to be a generated id");
}
function _removeNonGeneratedChildNodes(node, ids) function _removeNonGeneratedChildNodes(node, ids)
{ {
var child = node.firstChild; var child = node.firstChild;