From d7f85f04bfc7a5236310b129f425367dbf5df402 Mon Sep 17 00:00:00 2001 From: jensp Date: Wed, 3 Apr 2013 11:37:00 +0000 Subject: [PATCH] =?UTF-8?q?Edit=20links=20werden=20jetzt=20auch=20in=20Obj?= =?UTF-8?q?ectLists=20angezeigt=20(Vorbereitung=20f=C3=BCr=20Ticket=20#167?= =?UTF-8?q?0).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.libreccm.org/ccm/trunk@2112 8810af33-2d31-482b-a856-94f89814c4df --- .../cms/dispatcher/SimpleXMLGenerator.java | 3 +- .../navigation/DataCollectionRenderer.java | 50 ++++++++++++++----- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java b/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java index a3da3e224..33d1070dc 100755 --- a/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java +++ b/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java @@ -152,11 +152,12 @@ public class SimpleXMLGenerator implements XMLGenerator { // // Note that the xml that is generated is only of use if you DO NOT CACHE content pages. // cg. - final PermissionDescriptor edit = new PermissionDescriptor( PrivilegeDescriptor.get(SecurityManager.CMS_EDIT_ITEM), item, currentParty); if (PermissionService.checkPermission(edit)) { parent.addAttribute("canEdit", "true"); + final Element canEditElem = parent.newChildElement("canEdit"); + canEditElem.setText("true"); } final PermissionDescriptor publish = new PermissionDescriptor( PrivilegeDescriptor.get(SecurityManager.CMS_PUBLISH), item, currentParty); diff --git a/ccm-navigation/src/com/arsdigita/navigation/DataCollectionRenderer.java b/ccm-navigation/src/com/arsdigita/navigation/DataCollectionRenderer.java index 25a314f0f..0504a14d2 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/DataCollectionRenderer.java +++ b/ccm-navigation/src/com/arsdigita/navigation/DataCollectionRenderer.java @@ -22,6 +22,11 @@ import com.arsdigita.categorization.Category; import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.kernel.ACSObject; +import com.arsdigita.kernel.Kernel; +import com.arsdigita.kernel.Party; +import com.arsdigita.kernel.permissions.PermissionDescriptor; +import com.arsdigita.kernel.permissions.PermissionService; +import com.arsdigita.kernel.permissions.PrivilegeDescriptor; import com.arsdigita.persistence.DataAssociation; import com.arsdigita.persistence.DataAssociationCursor; import com.arsdigita.persistence.DataCollection; @@ -69,16 +74,16 @@ public class DataCollectionRenderer extends LockableImpl { Assert.isUnlocked(this); m_attributes.add(name); } - + public void addProperty(final DataCollectionPropertyRenderer pr) { Assert.isUnlocked(this); m_properties.add(pr); } - + protected int getPageSize() { return m_pageSize; } - + public void setPageSize(final int pageSize) { Assert.isUnlocked(this); m_pageSize = pageSize; @@ -87,7 +92,7 @@ public class DataCollectionRenderer extends LockableImpl { protected boolean getNavItems() { return m_navItems; } - + /** * Specify whether to include the items for navigation that are within * same category. @@ -96,7 +101,7 @@ public class DataCollectionRenderer extends LockableImpl { public void setNavItems(final boolean navItems) { m_navItems = navItems; } - + protected boolean isSpecializeObjects() { return m_specializeObjects; } @@ -129,7 +134,7 @@ public class DataCollectionRenderer extends LockableImpl { public List getAttributes() { return m_attributes; } - + public List getProperties() { return m_properties; } @@ -232,7 +237,27 @@ public class DataCollectionRenderer extends LockableImpl { } final Element item = Navigation.newElement(content, "item"); - final Iterator attributes = m_attributes.iterator(); + // Create a canEdit link if the current user is permitted to edit the item. + // Note: Works only when list specializes the object because an ACSObject instance is needed for creating + // the PermissionDescriptor. + Party currentParty = Kernel.getContext().getParty(); + if (currentParty == null) { + currentParty = Kernel.getPublicUser(); + } + final PermissionDescriptor edit; + if (!m_specializeObjects || object == null) { + edit = new PermissionDescriptor(PrivilegeDescriptor.get( + com.arsdigita.cms.SecurityManager.CMS_EDIT_ITEM), dobj.getOID(), currentParty.getOID()); + } else { + edit = new PermissionDescriptor(PrivilegeDescriptor.get( + com.arsdigita.cms.SecurityManager.CMS_EDIT_ITEM), object, currentParty); + } + if (PermissionService.checkPermission(edit)) { + item.addAttribute("canEdit", "true"); + } + + final Iterator attributes = m_attributes. + iterator(); while (attributes.hasNext()) { final String name = (String) attributes.next(); final String[] paths = StringUtils.split(name, '.'); @@ -248,7 +273,7 @@ public class DataCollectionRenderer extends LockableImpl { final Element path = Navigation.newElement(item, "path"); path.setText(getStableURL(dobj, object)); //item.addContent(path); - + generateItemXML(item, dobj, object, index); index++; @@ -264,10 +289,10 @@ public class DataCollectionRenderer extends LockableImpl { } protected void outputValue(final Element item, - final Object value, - final String name, - final String[] paths, - final int depth) { + final Object value, + final String name, + final String[] paths, + final int depth) { if (null == value) { return; } @@ -343,7 +368,6 @@ public class DataCollectionRenderer extends LockableImpl { } protected void generateItemXML(final Element item, final DataObject dobj, final ACSObject obj, final int index) { - } }