diff --git a/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java b/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java index 33d1070dc..b342887c9 100755 --- a/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java +++ b/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java @@ -158,6 +158,7 @@ public class SimpleXMLGenerator implements XMLGenerator { 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); @@ -271,6 +272,16 @@ public class SimpleXMLGenerator implements XMLGenerator { } } + if (PermissionService.checkPermission(edit)) { + final ItemResolver resolver = item.getContentSection().getItemResolver(); + final Element editLinkElem = content.newChildElement("editLink"); + final ContentItem draftItem = item.getDraftVersion(); + editLinkElem.setText(resolver.generateItemURL(state, + draftItem, + item.getContentSection(), + draftItem.getVersion())); + } + parent.addContent(content); //System.out.printf("Rendered item in %d ms\n\n", (System.nanoTime() - start) / 1000000); diff --git a/ccm-navigation/src/com/arsdigita/navigation/DataCollectionRenderer.java b/ccm-navigation/src/com/arsdigita/navigation/DataCollectionRenderer.java index 0504a14d2..0f2e861f0 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/DataCollectionRenderer.java +++ b/ccm-navigation/src/com/arsdigita/navigation/DataCollectionRenderer.java @@ -17,8 +17,11 @@ */ package com.arsdigita.navigation; +import com.arsdigita.bebop.PageState; import com.arsdigita.categorization.Categorization; import com.arsdigita.categorization.Category; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.dispatcher.ItemResolver; import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.kernel.ACSObject; @@ -247,10 +250,20 @@ public class DataCollectionRenderer extends LockableImpl { final PermissionDescriptor edit; if (!m_specializeObjects || object == null) { edit = new PermissionDescriptor(PrivilegeDescriptor.get( - com.arsdigita.cms.SecurityManager.CMS_EDIT_ITEM), dobj.getOID(), currentParty.getOID()); + 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); + com.arsdigita.cms.SecurityManager.CMS_EDIT_ITEM), object, currentParty); + if (PermissionService.checkPermission(edit) && (object instanceof ContentItem)) { + final ContentItem contentItem = (ContentItem) object; + final ItemResolver resolver = contentItem.getContentSection().getItemResolver(); + final Element editLinkElem = item.newChildElement("editLink"); + final ContentItem draftItem = contentItem.getDraftVersion(); + editLinkElem.setText(resolver.generateItemURL(PageState.getPageState(), + draftItem, + contentItem.getContentSection(), + draftItem.getVersion())); + } } if (PermissionService.checkPermission(edit)) { item.addAttribute("canEdit", "true"); diff --git a/ccm-navigation/src/com/arsdigita/navigation/cms/CMSDataCollectionRenderer.java b/ccm-navigation/src/com/arsdigita/navigation/cms/CMSDataCollectionRenderer.java index d63636740..8726fe987 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/cms/CMSDataCollectionRenderer.java +++ b/ccm-navigation/src/com/arsdigita/navigation/cms/CMSDataCollectionRenderer.java @@ -17,11 +17,18 @@ */ package com.arsdigita.navigation.cms; +import com.arsdigita.bebop.PageState; import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentItemXMLRenderer; import com.arsdigita.cms.ExtraXMLGenerator; +import com.arsdigita.cms.dispatcher.ItemResolver; 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.navigation.DataCollectionRenderer; import com.arsdigita.navigation.Navigation; import com.arsdigita.persistence.DataObject; @@ -29,9 +36,9 @@ import com.arsdigita.persistence.OID; import com.arsdigita.xml.Element; public class CMSDataCollectionRenderer extends DataCollectionRenderer { - + private boolean useExtraXml = true; - + public CMSDataCollectionRenderer() { addAttribute("masterVersion.id"); } @@ -39,11 +46,11 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer { public boolean getUseExtraXml() { return useExtraXml; } - + public void setUseExtraXml(final boolean useExtraXml) { this.useExtraXml = useExtraXml; } - + protected String getStableURL(DataObject dobj, ACSObject obj) { if (obj == null) { @@ -73,18 +80,34 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer { * the object in the detail view and the list view. It is now * possible to set the adapter context used from a JSP template, * using DataCollectionRenderer#setSpecializeObjectsContext(String). - */ + */ renderer.walk(obj, getSpecializeObjectsContext()); - + if ((obj instanceof ContentItem) && useExtraXml) { final ContentItem contentItem = (ContentItem) obj; - - for(ExtraXMLGenerator generator : contentItem.getExtraListXMLGenerators()) { + + for (ExtraXMLGenerator generator : contentItem.getExtraListXMLGenerators()) { generator.setListMode(true); generator.generateXML(contentItem, item, null); } - + + Party currentParty = Kernel.getContext().getParty(); + if (currentParty == null) { + currentParty = Kernel.getPublicUser(); + } + final PermissionDescriptor edit = new PermissionDescriptor(PrivilegeDescriptor.get( + com.arsdigita.cms.SecurityManager.CMS_EDIT_ITEM), contentItem, currentParty); + if (PermissionService.checkPermission(edit)) { + final ItemResolver resolver = contentItem.getContentSection().getItemResolver(); + final Element editLinkElem = item.newChildElement("editLink"); + final ContentItem draftItem = contentItem.getDraftVersion(); + editLinkElem.setText(resolver.generateItemURL(PageState.getPageState(), + draftItem, + contentItem.getContentSection(), + draftItem.getVersion())); + } } } } + } diff --git a/ccm-navigation/src/com/arsdigita/navigation/ui/GreetingItem.java b/ccm-navigation/src/com/arsdigita/navigation/ui/GreetingItem.java index 64ef87b55..f64f7c386 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/ui/GreetingItem.java +++ b/ccm-navigation/src/com/arsdigita/navigation/ui/GreetingItem.java @@ -30,6 +30,7 @@ import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentItemXMLRenderer; import com.arsdigita.cms.ExtraXMLGenerator; import com.arsdigita.cms.SecurityManager; +import com.arsdigita.cms.dispatcher.ItemResolver; import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; import com.arsdigita.globalization.GlobalizationHelper; import com.arsdigita.kernel.Kernel; @@ -59,7 +60,7 @@ public class GreetingItem extends AbstractComponent { private static final Logger s_log = Logger.getLogger(GreetingItem.class); public Element generateXML(HttpServletRequest request, - HttpServletResponse response) { + HttpServletResponse response) { ContentItem item = (ContentItem) getObject(); if (null == item || !item.isLive()) { return null; @@ -108,7 +109,7 @@ public class GreetingItem extends AbstractComponent { } ContentBundle bundle = (ContentBundle) item; - + /* Fix by Jens Pelzetter, 2009-08-28 * bundle.getPrimaryInstance() does not care about the preferred * languages @@ -132,26 +133,36 @@ public class GreetingItem extends AbstractComponent { //Moved to seperate method generateGreetingItemXml to make to //XML generation extendable (use another renderer etc.) /*ContentItemXMLRenderer renderer = - new ContentItemXMLRenderer(itemEl); + new ContentItemXMLRenderer(itemEl); - renderer.setWrapAttributes(true); - renderer.setWrapRoot(false); - renderer.setWrapObjects(false); + renderer.setWrapAttributes(true); + renderer.setWrapRoot(false); + renderer.setWrapObjects(false); - renderer.walk(baseItem, SimpleXMLGenerator.ADAPTER_CONTEXT);*/ + renderer.walk(baseItem, SimpleXMLGenerator.ADAPTER_CONTEXT);*/ generateGreetingItemXml(itemEl, baseItem); for (ExtraXMLGenerator generator : baseItem.getExtraXMLGenerators()) { try { generator.generateXML(baseItem, itemEl, new PageState(null, - request, - response)); + request, + response)); } catch (ServletException ex) { s_log.error(ex); } } + if (PermissionService.checkPermission(edit)) { + final ItemResolver resolver = baseItem.getContentSection().getItemResolver(); + final Element editLinkElem = itemEl.newChildElement("editLink"); + final ContentItem draftItem = baseItem.getDraftVersion(); + editLinkElem.setText(resolver.generateItemURL(PageState.getPageState(), + draftItem, + baseItem.getContentSection(), + draftItem.getVersion())); + } + return content; } @@ -169,4 +180,5 @@ public class GreetingItem extends AbstractComponent { renderer.walk(item, SimpleXMLGenerator.ADAPTER_CONTEXT); } + }