It is now possible to enable language independent items for specific objects lists

git-svn-id: https://svn.libreccm.org/ccm/trunk@4478 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2016-12-15 10:36:41 +00:00
parent bdc3b33151
commit 0004054b52
5 changed files with 53 additions and 25 deletions

View File

@ -186,7 +186,7 @@ public class SimpleXMLGenerator implements XMLGenerator {
for(String language : languages) { for(String language : languages) {
final Element langElem = availableLangsElem.newChildElement("language"); final Element langElem = availableLangsElem.newChildElement("language");
langElem.setText(language); langElem.addAttribute("locale", language);
} }
} }

View File

@ -20,6 +20,7 @@ package com.arsdigita.navigation;
import com.arsdigita.bebop.PageState; 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.ContentBundle;
import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.dispatcher.ItemResolver; import com.arsdigita.cms.dispatcher.ItemResolver;
import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; import com.arsdigita.cms.dispatcher.SimpleXMLGenerator;
@ -30,6 +31,7 @@ import com.arsdigita.kernel.Party;
import com.arsdigita.kernel.permissions.PermissionDescriptor; import com.arsdigita.kernel.permissions.PermissionDescriptor;
import com.arsdigita.kernel.permissions.PermissionService; import com.arsdigita.kernel.permissions.PermissionService;
import com.arsdigita.kernel.permissions.PrivilegeDescriptor; import com.arsdigita.kernel.permissions.PrivilegeDescriptor;
import com.arsdigita.globalization.GlobalizationHelper;
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;
@ -46,6 +48,7 @@ import com.arsdigita.xml.Element;
import java.text.DateFormat; import java.text.DateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -144,7 +147,7 @@ public class DataCollectionRenderer extends LockableImpl {
/** /**
* @param objects * @param objects
* @param pageNum * @param pageNum
* *
* @return * @return
*/ */
@ -152,7 +155,7 @@ public class DataCollectionRenderer extends LockableImpl {
Assert.isLocked(this); Assert.isLocked(this);
int pageNumber = pageNum; int pageNumber = pageNum;
final long objectCount = objects.size(); final long objectCount = objects.size();
// Quasimodo: Begin // Quasimodo: Begin
@ -174,7 +177,7 @@ public class DataCollectionRenderer extends LockableImpl {
return content; return content;
} }
final int pageCount = (int) Math.ceil((double) objectCount / (double) m_pageSize); final int pageCount = (int) Math.ceil((double) objectCount / (double) m_pageSize);
if (pageNumber < 1) { if (pageNumber < 1) {
@ -251,14 +254,14 @@ 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 {
//Create a link for editing the item. Works only if the item is specalised because //Create a link for editing the item. Works only if the item is specalised because
//the ItemResolver provided by the ContentSection of the item is needed for creating //the ItemResolver provided by the ContentSection of the item is needed for creating
//the link. //the link.
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)) { if (PermissionService.checkPermission(edit) && (object instanceof ContentItem)) {
final ContentItem contentItem = (ContentItem) object; final ContentItem contentItem = (ContentItem) object;
final ItemResolver resolver = contentItem.getContentSection().getItemResolver(); final ItemResolver resolver = contentItem.getContentSection().getItemResolver();
final Element editLinkElem = item.newChildElement("editLink"); final Element editLinkElem = item.newChildElement("editLink");
@ -302,6 +305,7 @@ public class DataCollectionRenderer extends LockableImpl {
protected String getStableURL(final DataObject dobj, final ACSObject obj) { protected String getStableURL(final DataObject dobj, final ACSObject obj) {
final OID oid = new OID((String) dobj.get(ACSObject.OBJECT_TYPE), dobj.get(ACSObject.ID)); final OID oid = new OID((String) dobj.get(ACSObject.OBJECT_TYPE), dobj.get(ACSObject.ID));
return Navigation.redirectURL(oid); return Navigation.redirectURL(oid);
} }

View File

@ -5,12 +5,12 @@
* modify it under the terms of the GNU Lesser General Public License * modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of * as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version. * the License, or (at your option) any later version.
* *
* This library is distributed in the hope that it will be useful, * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details. * Lesser General Public License for more details.
* *
* You should have received a copy of the GNU Lesser General Public * You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@ -36,6 +36,8 @@ import com.arsdigita.navigation.Navigation;
import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
import com.arsdigita.web.ParameterMap;
import com.arsdigita.globalization.GlobalizationHelper;
public class CMSDataCollectionRenderer extends DataCollectionRenderer { public class CMSDataCollectionRenderer extends DataCollectionRenderer {
@ -60,6 +62,18 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer {
} }
if (obj instanceof ContentItem) { if (obj instanceof ContentItem) {
OID oid = ((ContentItem) obj).getDraftVersion().getOID(); OID oid = ((ContentItem) obj).getDraftVersion().getOID();
/*final String language = (String) ((ContentItem)obj).get("language");
if (!Kernel.getConfig().languageIndependentItems()
&& !language.equals(GlobalizationHelper.getNegotiatedLocale().toString())) {
final ParameterMap parameters = new ParameterMap();
parameters.setParameter("lang", language);
return Navigation.redirectURL(oid, parameters);
}*/
return Navigation.redirectURL(oid); return Navigation.redirectURL(oid);
} }
return super.getStableURL(dobj, obj); return super.getStableURL(dobj, obj);
@ -76,7 +90,7 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer {
&& XMLDeliveryCache.getInstance().isCached(obj.getOID())) { && XMLDeliveryCache.getInstance().isCached(obj.getOID())) {
XMLDeliveryCache.getInstance().retrieveFromCache(item, obj.getOID()); XMLDeliveryCache.getInstance().retrieveFromCache(item, obj.getOID());
createEditLink(item, (ContentItem) obj); createEditLink(item, (ContentItem) obj);
} else { } else {
@ -87,10 +101,10 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer {
renderer.setWrapRoot(false); renderer.setWrapRoot(false);
renderer.setWrapObjects(false); renderer.setWrapObjects(false);
//renderer.walk(obj, SimpleXMLGenerator.ADAPTER_CONTEXT); //renderer.walk(obj, SimpleXMLGenerator.ADAPTER_CONTEXT);
/* jensp 2011-01-03: /* jensp 2011-01-03:
* I needed the option to use different traversal adapters for * I needed the option to use different traversal adapters for
* 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());
@ -102,11 +116,11 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer {
generator.setListMode(true); generator.setListMode(true);
generator.generateXML(contentItem, item, null); generator.generateXML(contentItem, item, null);
} }
XMLDeliveryCache.getInstance().cache(contentItem.getOID(), contentItem, item, "", false); XMLDeliveryCache.getInstance().cache(contentItem.getOID(), contentItem, item, "", false);
createEditLink(item, contentItem); createEditLink(item, contentItem);
// Party currentParty = Kernel.getContext().getParty(); // Party currentParty = Kernel.getContext().getParty();
// if (currentParty == null) { // if (currentParty == null) {
// currentParty = Kernel.getPublicUser(); // currentParty = Kernel.getPublicUser();

View File

@ -32,7 +32,7 @@ import javax.servlet.http.HttpServletResponse;
/** /**
* Abstract base class for object lists * Abstract base class for object lists
* *
* @author unknown * @author unknown
* @author Sören Bernstein <quasi@quasiweb.de> * @author Sören Bernstein <quasi@quasiweb.de>
*/ */
@ -41,6 +41,7 @@ public abstract class AbstractObjectList
private DataCollectionRenderer m_renderer = new DataCollectionRenderer(); private DataCollectionRenderer m_renderer = new DataCollectionRenderer();
private DataCollectionDefinition m_definition = new DataCollectionDefinition(); private DataCollectionDefinition m_definition = new DataCollectionDefinition();
private boolean m_languageIndependent = false;
public final void setDefinition(DataCollectionDefinition definition) { public final void setDefinition(DataCollectionDefinition definition) {
Assert.isUnlocked(this); Assert.isUnlocked(this);
@ -52,6 +53,10 @@ public abstract class AbstractObjectList
m_renderer = renderer; m_renderer = renderer;
} }
public final void setLanguageIndependent(final boolean value) {
m_languageIndependent = value;
}
public final DataCollectionDefinition getDefinition() { public final DataCollectionDefinition getDefinition() {
return m_definition; return m_definition;
} }
@ -60,13 +65,17 @@ public abstract class AbstractObjectList
return m_renderer; return m_renderer;
} }
public final boolean isLanguageIndependent() {
return m_languageIndependent;
}
/** /**
* Get a list of objects from the database which meet a set criteria or * Get a list of objects from the database which meet a set criteria or
* null if the requested object type is invalid * null if the requested object type is invalid
* *
* @param request * @param request
* @param response * @param response
* @return the object list or null * @return the object list or null
*/ */
protected DataCollection getObjects(HttpServletRequest request, protected DataCollection getObjects(HttpServletRequest request,
HttpServletResponse response) { HttpServletResponse response) {
@ -92,7 +101,7 @@ public abstract class AbstractObjectList
} }
public Element generateObjectListXML(HttpServletRequest request, public Element generateObjectListXML(HttpServletRequest request,
HttpServletResponse response) { HttpServletResponse response) {
Assert.isLocked(this); Assert.isLocked(this);
String pageNumberValue = request.getParameter("pageNumber"); String pageNumberValue = request.getParameter("pageNumber");
@ -107,13 +116,14 @@ public abstract class AbstractObjectList
throw new UncheckedWrapperException( throw new UncheckedWrapperException(
"cannot parse page number " + pageNumber, ex); "cannot parse page number " + pageNumber, ex);
} }
DataCollection objects = getObjects(request, response); DataCollection objects = getObjects(request, response);
// Quasimodo: Begin // Quasimodo: Begin
// Limit list to objects in the negotiated language and language invariant items // Limit list to objects in the negotiated language and language invariant items
if (objects != null && objects.size() > 0) { if (objects != null && objects.size() > 0) {
if (Kernel.getConfig().languageIndependentItems()) { if (Kernel.getConfig().languageIndependentItems()
|| m_languageIndependent) {
FilterFactory ff = objects.getFilterFactory(); FilterFactory ff = objects.getFilterFactory();
Filter filter = ff.or(). Filter filter = ff.or().
addFilter(ff.equals("language", com.arsdigita.globalization.GlobalizationHelper. addFilter(ff.equals("language", com.arsdigita.globalization.GlobalizationHelper.
@ -134,10 +144,10 @@ public abstract class AbstractObjectList
//final long renderStart = System.nanoTime(); //final long renderStart = System.nanoTime();
final Element listXML = m_renderer.generateXML(objects, pageNumber.intValue()); final Element listXML = m_renderer.generateXML(objects, pageNumber.intValue());
//System.out.printf("Rendered items of list in %d ms\n", (System.nanoTime() - renderStart) / 1000000); //System.out.printf("Rendered items of list in %d ms\n", (System.nanoTime() - renderStart) / 1000000);
//System.out.printf("Generated object list in %d ms\n", (System.nanoTime() - start) / 1000000); //System.out.printf("Generated object list in %d ms\n", (System.nanoTime() - start) / 1000000);
return listXML; return listXML;
} }

View File

@ -134,7 +134,7 @@ public class GreetingItem extends AbstractComponent {
final Element availableLangsElem = content.newChildElement("availableLanguages"); final Element availableLangsElem = content.newChildElement("availableLanguages");
for(String language : languages) { for(String language : languages) {
final Element langElem = availableLangsElem.newChildElement("language"); final Element langElem = availableLangsElem.newChildElement("language");
langElem.setText(language); langElem.addAttribute("locale", language);
} }
if (baseItem instanceof XMLGenerator) { if (baseItem instanceof XMLGenerator) {