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");
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);

View File

@ -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");

View File

@ -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()));
}
}
}
}
}

View File

@ -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);
}
}