XML Output of Content Items contains now the URL to Content Center edit page of the item. Together with a recent Mandalay version (revision 369 or newer) is is possible to show a link to edit page in the detail view of an item, for a greeting item and for each item in an object list (if the list is specialized)

git-svn-id: https://svn.libreccm.org/ccm/trunk@2113 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-04-05 15:50:34 +00:00
parent d7f85f04bf
commit d90a13e60b
4 changed files with 79 additions and 20 deletions

View File

@ -158,6 +158,7 @@ public class SimpleXMLGenerator implements XMLGenerator {
parent.addAttribute("canEdit", "true"); parent.addAttribute("canEdit", "true");
final Element canEditElem = parent.newChildElement("canEdit"); final Element canEditElem = parent.newChildElement("canEdit");
canEditElem.setText("true"); 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);
@ -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); parent.addContent(content);
//System.out.printf("Rendered item in %d ms\n\n", (System.nanoTime() - start) / 1000000); //System.out.printf("Rendered item in %d ms\n\n", (System.nanoTime() - start) / 1000000);

View File

@ -17,8 +17,11 @@
*/ */
package com.arsdigita.navigation; package com.arsdigita.navigation;
import com.arsdigita.bebop.PageState;
import com.arsdigita.categorization.Categorization; import com.arsdigita.categorization.Categorization;
import com.arsdigita.categorization.Category; 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.cms.dispatcher.SimpleXMLGenerator;
import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.kernel.ACSObject; import com.arsdigita.kernel.ACSObject;
@ -247,10 +250,20 @@ public class DataCollectionRenderer extends LockableImpl {
final PermissionDescriptor edit; final PermissionDescriptor edit;
if (!m_specializeObjects || object == null) { if (!m_specializeObjects || object == null) {
edit = new PermissionDescriptor(PrivilegeDescriptor.get( 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 { } else {
edit = new PermissionDescriptor(PrivilegeDescriptor.get( 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)) { if (PermissionService.checkPermission(edit)) {
item.addAttribute("canEdit", "true"); item.addAttribute("canEdit", "true");

View File

@ -17,11 +17,18 @@
*/ */
package com.arsdigita.navigation.cms; package com.arsdigita.navigation.cms;
import com.arsdigita.bebop.PageState;
import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.ContentItemXMLRenderer; import com.arsdigita.cms.ContentItemXMLRenderer;
import com.arsdigita.cms.ExtraXMLGenerator; import com.arsdigita.cms.ExtraXMLGenerator;
import com.arsdigita.cms.dispatcher.ItemResolver;
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.navigation.DataCollectionRenderer; import com.arsdigita.navigation.DataCollectionRenderer;
import com.arsdigita.navigation.Navigation; import com.arsdigita.navigation.Navigation;
import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.DataObject;
@ -29,9 +36,9 @@ import com.arsdigita.persistence.OID;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
public class CMSDataCollectionRenderer extends DataCollectionRenderer { public class CMSDataCollectionRenderer extends DataCollectionRenderer {
private boolean useExtraXml = true; private boolean useExtraXml = true;
public CMSDataCollectionRenderer() { public CMSDataCollectionRenderer() {
addAttribute("masterVersion.id"); addAttribute("masterVersion.id");
} }
@ -39,11 +46,11 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer {
public boolean getUseExtraXml() { public boolean getUseExtraXml() {
return useExtraXml; return useExtraXml;
} }
public void setUseExtraXml(final boolean useExtraXml) { public void setUseExtraXml(final boolean useExtraXml) {
this.useExtraXml = useExtraXml; this.useExtraXml = useExtraXml;
} }
protected String getStableURL(DataObject dobj, protected String getStableURL(DataObject dobj,
ACSObject obj) { ACSObject obj) {
if (obj == null) { 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 * the object in the detail view and the list view. It is now
* possible to set the adapter context used from a JSP template, * possible to set the adapter context used from a JSP template,
* using DataCollectionRenderer#setSpecializeObjectsContext(String). * using DataCollectionRenderer#setSpecializeObjectsContext(String).
*/ */
renderer.walk(obj, getSpecializeObjectsContext()); renderer.walk(obj, getSpecializeObjectsContext());
if ((obj instanceof ContentItem) && useExtraXml) { if ((obj instanceof ContentItem) && useExtraXml) {
final ContentItem contentItem = (ContentItem) obj; final ContentItem contentItem = (ContentItem) obj;
for(ExtraXMLGenerator generator : contentItem.getExtraListXMLGenerators()) { for (ExtraXMLGenerator generator : contentItem.getExtraListXMLGenerators()) {
generator.setListMode(true); generator.setListMode(true);
generator.generateXML(contentItem, item, null); 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()));
}
} }
} }
} }
} }

View File

@ -30,6 +30,7 @@ import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.ContentItemXMLRenderer; import com.arsdigita.cms.ContentItemXMLRenderer;
import com.arsdigita.cms.ExtraXMLGenerator; import com.arsdigita.cms.ExtraXMLGenerator;
import com.arsdigita.cms.SecurityManager; import com.arsdigita.cms.SecurityManager;
import com.arsdigita.cms.dispatcher.ItemResolver;
import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; import com.arsdigita.cms.dispatcher.SimpleXMLGenerator;
import com.arsdigita.globalization.GlobalizationHelper; import com.arsdigita.globalization.GlobalizationHelper;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
@ -59,7 +60,7 @@ public class GreetingItem extends AbstractComponent {
private static final Logger s_log = Logger.getLogger(GreetingItem.class); private static final Logger s_log = Logger.getLogger(GreetingItem.class);
public Element generateXML(HttpServletRequest request, public Element generateXML(HttpServletRequest request,
HttpServletResponse response) { HttpServletResponse response) {
ContentItem item = (ContentItem) getObject(); ContentItem item = (ContentItem) getObject();
if (null == item || !item.isLive()) { if (null == item || !item.isLive()) {
return null; return null;
@ -108,7 +109,7 @@ public class GreetingItem extends AbstractComponent {
} }
ContentBundle bundle = (ContentBundle) item; ContentBundle bundle = (ContentBundle) item;
/* Fix by Jens Pelzetter, 2009-08-28 /* Fix by Jens Pelzetter, 2009-08-28
* bundle.getPrimaryInstance() does not care about the preferred * bundle.getPrimaryInstance() does not care about the preferred
* languages * languages
@ -132,26 +133,36 @@ public class GreetingItem extends AbstractComponent {
//Moved to seperate method generateGreetingItemXml to make to //Moved to seperate method generateGreetingItemXml to make to
//XML generation extendable (use another renderer etc.) //XML generation extendable (use another renderer etc.)
/*ContentItemXMLRenderer renderer = /*ContentItemXMLRenderer renderer =
new ContentItemXMLRenderer(itemEl); new ContentItemXMLRenderer(itemEl);
renderer.setWrapAttributes(true); renderer.setWrapAttributes(true);
renderer.setWrapRoot(false); renderer.setWrapRoot(false);
renderer.setWrapObjects(false); renderer.setWrapObjects(false);
renderer.walk(baseItem, SimpleXMLGenerator.ADAPTER_CONTEXT);*/ renderer.walk(baseItem, SimpleXMLGenerator.ADAPTER_CONTEXT);*/
generateGreetingItemXml(itemEl, baseItem); generateGreetingItemXml(itemEl, baseItem);
for (ExtraXMLGenerator generator : baseItem.getExtraXMLGenerators()) { for (ExtraXMLGenerator generator : baseItem.getExtraXMLGenerators()) {
try { try {
generator.generateXML(baseItem, itemEl, new PageState(null, generator.generateXML(baseItem, itemEl, new PageState(null,
request, request,
response)); response));
} catch (ServletException ex) { } catch (ServletException ex) {
s_log.error(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; return content;
} }
@ -169,4 +180,5 @@ public class GreetingItem extends AbstractComponent {
renderer.walk(item, SimpleXMLGenerator.ADAPTER_CONTEXT); renderer.walk(item, SimpleXMLGenerator.ADAPTER_CONTEXT);
} }
} }