Edit links werden jetzt auch in ObjectLists angezeigt (Vorbereitung für Ticket #1670).

git-svn-id: https://svn.libreccm.org/ccm/trunk@2112 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-04-03 11:37:00 +00:00
parent f23c30d8f9
commit d7f85f04bf
2 changed files with 39 additions and 14 deletions

View File

@ -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. // Note that the xml that is generated is only of use if you DO NOT CACHE content pages.
// cg. // cg.
final PermissionDescriptor edit = new PermissionDescriptor( final PermissionDescriptor edit = new PermissionDescriptor(
PrivilegeDescriptor.get(SecurityManager.CMS_EDIT_ITEM), item, currentParty); PrivilegeDescriptor.get(SecurityManager.CMS_EDIT_ITEM), item, currentParty);
if (PermissionService.checkPermission(edit)) { if (PermissionService.checkPermission(edit)) {
parent.addAttribute("canEdit", "true"); parent.addAttribute("canEdit", "true");
final Element canEditElem = parent.newChildElement("canEdit");
canEditElem.setText("true");
} }
final PermissionDescriptor publish = new PermissionDescriptor( final PermissionDescriptor publish = new PermissionDescriptor(
PrivilegeDescriptor.get(SecurityManager.CMS_PUBLISH), item, currentParty); PrivilegeDescriptor.get(SecurityManager.CMS_PUBLISH), item, currentParty);

View File

@ -22,6 +22,11 @@ import com.arsdigita.categorization.Category;
import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; import com.arsdigita.cms.dispatcher.SimpleXMLGenerator;
import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.kernel.ACSObject; 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.DataAssociation;
import com.arsdigita.persistence.DataAssociationCursor; import com.arsdigita.persistence.DataAssociationCursor;
import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataCollection;
@ -69,16 +74,16 @@ public class DataCollectionRenderer extends LockableImpl {
Assert.isUnlocked(this); Assert.isUnlocked(this);
m_attributes.add(name); m_attributes.add(name);
} }
public void addProperty(final DataCollectionPropertyRenderer pr) { public void addProperty(final DataCollectionPropertyRenderer pr) {
Assert.isUnlocked(this); Assert.isUnlocked(this);
m_properties.add(pr); m_properties.add(pr);
} }
protected int getPageSize() { protected int getPageSize() {
return m_pageSize; return m_pageSize;
} }
public void setPageSize(final int pageSize) { public void setPageSize(final int pageSize) {
Assert.isUnlocked(this); Assert.isUnlocked(this);
m_pageSize = pageSize; m_pageSize = pageSize;
@ -87,7 +92,7 @@ public class DataCollectionRenderer extends LockableImpl {
protected boolean getNavItems() { protected boolean getNavItems() {
return m_navItems; return m_navItems;
} }
/** /**
* Specify whether to include the items for navigation that are within * Specify whether to include the items for navigation that are within
* same category. * same category.
@ -96,7 +101,7 @@ public class DataCollectionRenderer extends LockableImpl {
public void setNavItems(final boolean navItems) { public void setNavItems(final boolean navItems) {
m_navItems = navItems; m_navItems = navItems;
} }
protected boolean isSpecializeObjects() { protected boolean isSpecializeObjects() {
return m_specializeObjects; return m_specializeObjects;
} }
@ -129,7 +134,7 @@ public class DataCollectionRenderer extends LockableImpl {
public List getAttributes() { public List getAttributes() {
return m_attributes; return m_attributes;
} }
public List getProperties() { public List getProperties() {
return m_properties; return m_properties;
} }
@ -232,7 +237,27 @@ public class DataCollectionRenderer extends LockableImpl {
} }
final Element item = Navigation.newElement(content, "item"); 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()) { while (attributes.hasNext()) {
final String name = (String) attributes.next(); final String name = (String) attributes.next();
final String[] paths = StringUtils.split(name, '.'); final String[] paths = StringUtils.split(name, '.');
@ -248,7 +273,7 @@ public class DataCollectionRenderer extends LockableImpl {
final Element path = Navigation.newElement(item, "path"); final Element path = Navigation.newElement(item, "path");
path.setText(getStableURL(dobj, object)); path.setText(getStableURL(dobj, object));
//item.addContent(path); //item.addContent(path);
generateItemXML(item, dobj, object, index); generateItemXML(item, dobj, object, index);
index++; index++;
@ -264,10 +289,10 @@ public class DataCollectionRenderer extends LockableImpl {
} }
protected void outputValue(final Element item, protected void outputValue(final Element item,
final Object value, final Object value,
final String name, final String name,
final String[] paths, final String[] paths,
final int depth) { final int depth) {
if (null == value) { if (null == value) {
return; 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) { protected void generateItemXML(final Element item, final DataObject dobj, final ACSObject obj, final int index) {
} }
} }