diff --git a/ccm-cms-assets-relatedlink/src/com/arsdigita/cms/contentassets/ui/RelatedLinkPropertyForm.java b/ccm-cms-assets-relatedlink/src/com/arsdigita/cms/contentassets/ui/RelatedLinkPropertyForm.java index b3985c4f3..97d038266 100755 --- a/ccm-cms-assets-relatedlink/src/com/arsdigita/cms/contentassets/ui/RelatedLinkPropertyForm.java +++ b/ccm-cms-assets-relatedlink/src/com/arsdigita/cms/contentassets/ui/RelatedLinkPropertyForm.java @@ -90,17 +90,15 @@ public class RelatedLinkPropertyForm extends LinkPropertyForm { add(new Label( new GlobalizedMessage("com.arsdigita.cms.contentassets.related_link_resourceSize", "com.arsdigita.cms.contentassets.RelatedLinkResources"))); - TextField resSize = new TextField(new StringParameter(RelatedLink.RESOURCE_SIZE)); add(resSize); add(new Label( new GlobalizedMessage("com.arsdigita.cms.contentassets.related_link_resourceType", "com.arsdigita.cms.contentassets.RelatedLinkResources"))); - SingleSelect resType = new SingleSelect(new StringParameter(RelatedLink.RESOURCE_TYPE)); addMimeOptions(resType); - add(resType); + add(resType); } Hidden linkListName = new Hidden(new StringParameter(RelatedLink.LINK_LIST_NAME)); diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources.properties index 4cfc40a78..9c5525a0e 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSResources.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSResources.properties @@ -1058,3 +1058,6 @@ cms.ui.workflow.task=Task cms.ui.workflow.you_are_assigned_to_this_item=Assigned to you cms.ui.workflow.roles=Roles cms.ui.workflow.approve_this_content=Approve +cms.ui.unknownRole=Unknown role +cms.ui.unknownStatus=Unknown status +cms.contenttypes.ui.genericorgaunit.persons.status=Status diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties index b0f5e92ac..8568d6f2b 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties @@ -1051,3 +1051,6 @@ cms.ui.workflow.your_active_tasks=Ihre aktiven Aufgaben cms.ui.workflow.you_are_assigned_to_this_item=Zugewiesen an Sie cms.ui.workflow.roles=Rollen cms.ui.workflow.approve_this_content=Aktzeptieren +cms.ui.unknownRole=Unbekannte Rolle +cms.ui.unknownStatus=Unbekannter status +cms.contenttypes.ui.genericorgaunit.persons.status=Status diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties index a748f0dbf..616ad2eed 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties @@ -1,3 +1,6 @@ cms.tasks.ui.content_center=Content Centre cms.ui.content_center=Content Centre cms.ui.lifecycles=Lifecycles +cms.ui.unknownRole= +cms.ui.unknownStatus=Unknown status +cms.contenttypes.ui.genericorgaunit.persons.status=Status diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources.properties b/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources.properties index 0c79122b2..53c3b2d3c 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources.properties +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources.properties @@ -114,3 +114,6 @@ cms.contenttypes.ui.contact.contactEntry.none=No contact information yet cms.contenttypes.ui.genericorgaunit.person.role=Role cms.ui.delete=Remove sciorganization.ui.department.project.confirm_remove=Are you sure to remove this project? +cms.ui.unknownRole=Unknown role +cms.ui.unknownStatus=Unknown status +Status=Status diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources_de.properties b/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources_de.properties index e72d2cb55..25367b1c0 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources_de.properties +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ContenttypesResources_de.properties @@ -116,3 +116,15 @@ cms.contenttypes.ui.genericorgaunit.select_person=Person ausw\u00e4hlen cms.contenttypes.ui.genericorgaunit.person.role=Rolle cms.ui.delete=Entfernen sciorganization.ui.department.project.confirm_remove=Wollen Sie dieses Projekt wirklich entfernen? +cms.ui.unknownRole=Unbekannte Rolle +cms.contenttypes.ui.contact.contactEntry.key.contact_type=Kontakttyp +cms.contenttypes.ui.contact.contactEntry.key.office_hours=Sprechzeiten +cms.contenttypes.ui.contact.contactEntry.key.phone_office=Telefon (B\u00fcro) +cms.contenttypes.ui.contact.contactEntry.key.phone_private=Telefon (Privat) +cms.contenttypes.ui.contact.contactEntry.key.phone_mobile=Telefon (mobil) +cms.contenttypes.ui.contact.contactEntry.key.email=E-Mail +cms.contenttypes.ui.contact.contactEntry.key.fax=sFax +cms.contenttypes.ui.contact.contactEntry.key.im=Instant Messanger +cms.contenttypes.ui.contact.contactEntry.key.www=Homepage +cms.ui.unknownStatus=Unkannter Status +Status=Status diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/Link.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/Link.java index 29a92abdf..450b68aa6 100755 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/Link.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/Link.java @@ -18,7 +18,6 @@ */ package com.arsdigita.cms.contenttypes; - import com.arsdigita.bebop.PageState; import com.arsdigita.cms.ContentBundle; import com.arsdigita.cms.ContentItem; @@ -37,10 +36,13 @@ import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.Session; import com.arsdigita.persistence.SessionManager; import com.arsdigita.util.Assert; +import com.arsdigita.web.ParameterMap; import com.arsdigita.web.URL; import java.math.BigDecimal; +import java.util.StringTokenizer; import org.apache.log4j.Logger; + /** * This content type represents a Link content type for linking * ContentItems and external links. @@ -49,7 +51,8 @@ import org.apache.log4j.Logger; * @author Nobuko Asakai (nasakai@redhat.com) * @author Sören Bernstein (Quasimodo) */ -public class Link extends ACSObject { +public class Link extends ACSObject { + private static final Logger s_log = Logger.getLogger(Link.class); /** PDL properties * cms_links.title */ @@ -60,7 +63,7 @@ public class Link extends ACSObject { public static final String EXTERNAL_LINK = "externalLink"; public static final String INTERNAL_LINK = "internalLink"; /** PDL property "targetURI" */ - public static final String TARGET_URI ="targetURI"; + public static final String TARGET_URI = "targetURI"; /** PDL property "targetItem" */ public static final String TARGET_ITEM = "targetItem"; /** PDL property "targetWindow" */ @@ -69,16 +72,15 @@ public class Link extends ACSObject { public static final String DESCRIPTION = "linkDescription"; /** PDL property "order" */ public static final String ORDER = "linkOrder"; - /** Data object type for this domain object */ - public static final String BASE_DATA_OBJECT_TYPE - = "com.arsdigita.cms.contenttypes.Link"; + public static final String BASE_DATA_OBJECT_TYPE = + "com.arsdigita.cms.contenttypes.Link"; /** * Default constructor. This creates a new Link. */ public Link() { - this( BASE_DATA_OBJECT_TYPE ); + this(BASE_DATA_OBJECT_TYPE); } /** @@ -89,9 +91,9 @@ public class Link extends ACSObject { * @param id The id for the retrieved * DataObject */ - public Link( BigDecimal id ) - throws DataObjectNotFoundException { - this( new OID( BASE_DATA_OBJECT_TYPE, id ) ); + public Link(BigDecimal id) + throws DataObjectNotFoundException { + this(new OID(BASE_DATA_OBJECT_TYPE, id)); } /** @@ -102,9 +104,9 @@ public class Link extends ACSObject { * @param oid The OID for the retrieved * DataObject */ - public Link( OID id ) - throws DataObjectNotFoundException { - super( id ); + public Link(OID id) + throws DataObjectNotFoundException { + super(id); } /** @@ -114,8 +116,8 @@ public class Link extends ACSObject { * @param obj The DataObject with which to create or * load a content item */ - public Link( DataObject obj ) { - super( obj ); + public Link(DataObject obj) { + super(obj); } /** @@ -125,29 +127,26 @@ public class Link extends ACSObject { * @param type The String data object type of the * item to create */ - public Link( String type ) { - super( type ); + public Link(String type) { + super(type); } - - /** * Returns the title of this Link * * @return The Link title */ public String getTitle() { - return (String) get( TITLE ); + return (String) get(TITLE); } - /** * Sets the title of this Link * * @param title The Link title */ - public void setTitle( String title ) { - set( TITLE, title ); + public void setTitle(String title) { + set(TITLE, title); } /** @@ -166,8 +165,8 @@ public class Link extends ACSObject { * Link.INTERNAL_LINK */ public void setTargetType(String type) { - Assert.isTrue(type != null && - (type.equals(EXTERNAL_LINK)||type.equals(INTERNAL_LINK))); + Assert.isTrue(type != null && (type.equals(EXTERNAL_LINK) || type.equals( + INTERNAL_LINK))); set(TARGET_TYPE, type); } @@ -177,7 +176,7 @@ public class Link extends ACSObject { * @return The Target Type */ public String getTargetURI() { - return (String) get( TARGET_URI ); + return (String) get(TARGET_URI); } /** @@ -185,8 +184,8 @@ public class Link extends ACSObject { * * @param uri The Target URI */ - public void setTargetURI( String uri ) { - set( TARGET_URI, uri ); + public void setTargetURI(String uri) { + set(TARGET_URI, uri); } /** @@ -195,8 +194,9 @@ public class Link extends ACSObject { * @return The Target Type */ public ContentItem getTargetItem() { - DataObject object = (DataObject)get(TARGET_ITEM); - ACSObject acsObject = (ACSObject) DomainObjectFactory.newInstance(object); + DataObject object = (DataObject) get(TARGET_ITEM); + ACSObject acsObject = + (ACSObject) DomainObjectFactory.newInstance(object); // Quasimodo: BEGIN // This is part of the patch to make RelatedLink (and Link) multilanguage compatible @@ -205,12 +205,13 @@ public class Link extends ACSObject { // content type ContentItem ci; // If acsObject is instance of ContentBundle - if(acsObject instanceof ContentBundle) { + if (acsObject instanceof ContentBundle) { // get the negotiated language version of this ContentBundle - ci = ((ContentBundle) acsObject).negotiate(DispatcherHelper.getRequest().getLocales()); + ci = ((ContentBundle) acsObject).negotiate(DispatcherHelper. + getRequest().getLocales()); } else { // else there are no language versions so just use the acsObject - ci = (ContentItem) acsObject; + ci = (ContentItem) acsObject; } // Quasimodo: END return ci; @@ -257,11 +258,10 @@ public class Link extends ACSObject { * * @param description the description */ - public void setDescription(String description ) { + public void setDescription(String description) { set(DESCRIPTION, description); } - /** * Returns the link order for this Link * @@ -300,22 +300,47 @@ public class Link extends ACSObject { * @return the Link URI */ public String getInternalOrExternalURI(PageState state) { - if (EXTERNAL_LINK.equals(getTargetType()) ) { + if (EXTERNAL_LINK.equals(getTargetType())) { return getTargetURI(); } else { ContentItem item = getTargetItem(); - if ( item == null ) { - s_log.error(getOID() + " is internal link, but has null target item" ); - return ""; + if (item == null) { + s_log.error(getOID() + + " is internal link, but has null target item"); + return ""; } ContentSection section = item.getContentSection(); ItemResolver resolver = section.getItemResolver(); String url = resolver.generateItemURL( - state, item, section, item.getVersion() - ); - return URL.there(state.getRequest(), url).toString(); + state, item, section, item.getVersion()); + + if (getTargetURI().startsWith("&")) { + ParameterMap parameters; + StringTokenizer tokenizer; + + parameters = new ParameterMap(); + tokenizer = new StringTokenizer(getTargetURI().substring( + 1), "&"); + while (tokenizer.hasMoreTokens()) { + String param[] = tokenizer.nextToken().split("="); + if (param.length >= 2) { + parameters.setParameter(param[0], param[1]); + } + } + + s_log.debug( + String.format( + "Internal link with parameters found. Generated URL is: %s", + URL.there(state.getRequest(), url, + parameters). + toString())); + return URL.there(state.getRequest(), url, parameters). + toString(); + } else { + return URL.there(state.getRequest(), url).toString(); + } } } @@ -331,7 +356,9 @@ public class Link extends ACSObject { public static DataCollection getReferringLinks(ContentItem item) { Session session = SessionManager.getSession(); DataCollection links = session.retrieve(BASE_DATA_OBJECT_TYPE); - Filter filter = links.addInSubqueryFilter("id", "com.arsdigita.cms.contenttypes.getReferringLinks"); + Filter filter = + links.addInSubqueryFilter("id", + "com.arsdigita.cms.contenttypes.getReferringLinks"); filter.set("itemID", item.getID()); return links; @@ -345,8 +372,8 @@ public class Link extends ACSObject { * @throws UnsupportedOperationException */ public void swapWithNext() { - throw new UnsupportedOperationException - ("Not implemented on base Link class. Subclass Link to support this for a specific role"); + throw new UnsupportedOperationException( + "Not implemented on base Link class. Subclass Link to support this for a specific role"); } /** @@ -357,8 +384,8 @@ public class Link extends ACSObject { * @throws UnsupportedOperationException */ public void swapWithPrevious() { - throw new UnsupportedOperationException - ("Not implemented on base Link class. Subclass Link to support this for a specific role"); + throw new UnsupportedOperationException( + "Not implemented on base Link class. Subclass Link to support this for a specific role"); } /** @@ -388,7 +415,6 @@ public class Link extends ACSObject { } - /** * Given a dataquery name, returns the (possibly filtered) * DataQuery for use in swapKeys. This implementation does no @@ -413,9 +439,8 @@ public class Link extends ACSObject { * @return the DataOperation */ protected DataOperation getSwapOperation(String operationName) { - DataOperation operation = SessionManager.getSession() - .retrieveDataOperation - (operationName); + DataOperation operation = SessionManager.getSession(). + retrieveDataOperation(operationName); return operation; } @@ -425,7 +450,8 @@ public class Link extends ACSObject { * or the previous * @param queryName This is used to find the key with which to swap */ - protected void swapKeys(boolean swapNext, String queryName, String operationName) { + protected void swapKeys(boolean swapNext, String queryName, + String operationName) { String methodName = null; if (swapNext) { @@ -434,10 +460,10 @@ public class Link extends ACSObject { methodName = "swapWithPrevious"; } - Assert.isTrue(!isNew(), methodName + " cannot be called on an " + - "object that is new"); + Assert.isTrue(!isNew(), methodName + " cannot be called on an " + + "object that is new"); - Integer currentKey = (Integer)get(ORDER); + Integer currentKey = (Integer) get(ORDER); // if the current item is not already ordered, alphabetize // instead the first time. This is instead of having to deal // with an upgrade script. @@ -445,9 +471,9 @@ public class Link extends ACSObject { alphabetize(); return; } - Assert.isTrue(currentKey != null, methodName + " cannot be " + - "called on an object that is not currently in the " + - "list"); + Assert.isTrue(currentKey != null, methodName + " cannot be " + + "called on an object that is not currently in the " + + "list"); int key = currentKey.intValue(); @@ -458,17 +484,18 @@ public class Link extends ACSObject { if (swapNext) { otherKey = key + 1; query.addOrder("linkOrder ASC"); - query.addFilter(query.getFilterFactory() - .greaterThan("linkOrder", currentKey, true)); + query.addFilter(query.getFilterFactory().greaterThan("linkOrder", + currentKey, + true)); } else { otherKey = key - 1; query.addOrder("linkOrder DESC"); - query.addFilter(query.getFilterFactory() - .lessThan("linkOrder", currentKey, true)); + query.addFilter(query.getFilterFactory().lessThan("linkOrder", + currentKey, true)); } if (query.next()) { - otherKey = ((Integer)query.get("linkOrder")).intValue(); + otherKey = ((Integer) query.get("linkOrder")).intValue(); query.close(); } @@ -489,8 +516,6 @@ public class Link extends ACSObject { * without doing anything useful. */ protected void alphabetize() { - return; + return; } - - } diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/LinkPropertyForm.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/LinkPropertyForm.java index 45b864c09..7cc3233e2 100755 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/LinkPropertyForm.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/LinkPropertyForm.java @@ -64,7 +64,8 @@ import org.apache.log4j.Logger; * @author Nobuko Asakai (nasakai@redhat.com) */ public class LinkPropertyForm extends FormSection - implements FormInitListener, FormProcessListener, FormValidationListener, FormSubmissionListener { + implements FormInitListener, FormProcessListener, FormValidationListener, + FormSubmissionListener { private static final Logger s_log = Logger.getLogger(LinkPropertyForm.class); /** Name of this form */ @@ -80,6 +81,7 @@ public class LinkPropertyForm extends FormSection private LinkSelectionModel m_linkModel; private SaveCancelSection m_saveCancelSection; private ItemSearchWidget m_itemSearch; + private TextField m_itemParams; private ContentType m_contentType; private final String ITEM_SEARCH = "contentItem"; @@ -92,12 +94,12 @@ public class LinkPropertyForm extends FormSection * Link to work on */ public LinkPropertyForm(ItemSelectionModel itemModel, - LinkSelectionModel link) { + LinkSelectionModel link) { this(itemModel, link, null); } public LinkPropertyForm(ItemSelectionModel itemModel, - LinkSelectionModel link, ContentType contentType) { + LinkSelectionModel link, ContentType contentType) { super(new ColumnPanel(2)); s_log.debug("property form constructor"); m_linkModel = link; @@ -127,7 +129,8 @@ public class LinkPropertyForm extends FormSection m_description = new TextArea("description"); m_description.setCols(40); m_description.setRows(5); - add(new Label(GlobalizationUtil.globalize("cms.contenttypes.ui.description"))); + add(new Label(GlobalizationUtil.globalize( + "cms.contenttypes.ui.description"))); add(m_description); @@ -135,26 +138,46 @@ public class LinkPropertyForm extends FormSection "\n", false)); add(new Label("Choose either a URL or a Content Item", Label.BOLD), - ColumnPanel.FULL_WIDTH); + ColumnPanel.FULL_WIDTH); m_linkType = new RadioGroup("linkType"); Option m_external = new Option(Link.EXTERNAL_LINK, "URL"); - m_external.setOnClick("toggle_link_fields(false)"); + //m_external.setOnClick("toggle_link_fields(false)"); + m_external.setOnClick("enableUrlFields()"); Option m_internal = new Option(Link.INTERNAL_LINK, "Content Item"); - m_internal.setOnClick("toggle_link_fields(true)"); + //m_internal.setOnClick("toggle_link_fields(true)"); + m_internal.setOnClick("enableItemFields()"); - Option m_selectWindow = new Option(Link.TARGET_WINDOW, "Open URL in new window"); + Option m_selectWindow = new Option(Link.TARGET_WINDOW, + "Open URL in new window"); m_URIOption = new CheckboxGroup("openOption"); m_URIOption.addOption(m_selectWindow); @@ -168,7 +191,8 @@ public class LinkPropertyForm extends FormSection m_targetURI = new TextField("targetURI"); m_targetURI.setOnFocus("toggle_link_fields(false)"); - m_targetURI.setHint("Enter a URL such as http://www.example.com/ or /ccm/forum/"); + m_targetURI.setHint( + "Enter a URL such as http://www.example.com/ or /ccm/forum/"); add(new Label("URL: ")); add(m_targetURI); @@ -178,13 +202,22 @@ public class LinkPropertyForm extends FormSection m_itemSearch.getClearButton().setOnFocus("toggle_link_fields(true)"); add(m_itemSearch); + add(new Label("Parameters")); + m_itemParams = new TextField("itemParams"); + m_itemParams.setOnFocus("toggle_link_fields(true)"); + m_itemParams.setHint( + "Enter parameters for the item URL. Separate items with '&'."); + add(m_itemParams); + add(new Label( "\n", @@ -264,7 +297,8 @@ public class LinkPropertyForm extends FormSection // The link is external, the URL must be valid and not null String externalURI = (String) m_targetURI.getValue(state); if (externalURI == null || externalURI.length() == 0) { - throw new FormProcessException("The URI field is required for an external link."); + throw new FormProcessException( + "The URI field is required for an external link."); } String url = (String) m_targetURI.getValue(state); @@ -282,7 +316,7 @@ public class LinkPropertyForm extends FormSection // "http://servername" on the front newURL = HTTP_PROTOCOL + Web.getConfig().getHost() - + url; + + url; } else if (!hasProtocol) { // There's no protocol. See if it would be ok if we // put one on the beginning @@ -291,7 +325,8 @@ public class LinkPropertyForm extends FormSection } else { // No idea, just throw the error - throw new FormProcessException("URL is not valid: " + ex.getMessage()); + throw new FormProcessException("URL is not valid: " + ex. + getMessage()); } try { @@ -320,13 +355,16 @@ public class LinkPropertyForm extends FormSection // check that's what they intended if (!localLink && !hasProtocol) { m_targetURI.setValue(state, newURL); - throw new FormProcessException("A valid URL starts with a protocol, eg http://"); + throw new FormProcessException( + "A valid URL starts with a protocol, eg http://"); } } - } else if (Link.INTERNAL_LINK.equals((String) m_linkType.getValue(state))) { + } else if (Link.INTERNAL_LINK.equals((String) m_linkType.getValue( + state))) { // The link is internal, the item selected must be not null if (data.get(ITEM_SEARCH) == null) { - throw new FormProcessException("Item selection is required for internal link."); + throw new FormProcessException( + "Item selection is required for internal link."); } } } @@ -371,8 +409,14 @@ public class LinkPropertyForm extends FormSection try { m_title.setValue(state, link.getTitle()); m_description.setValue(state, link.getDescription()); - m_targetURI.setValue(state, link.getTargetURI()); - if (com.arsdigita.bebop.Link.NEW_FRAME.equals(link.getTargetWindow())) { + if (link.getTargetURI().startsWith("&")) { + m_itemParams.setValue(state, + link.getTargetURI().substring(1)); + } else { + m_targetURI.setValue(state, link.getTargetURI()); + } + if (com.arsdigita.bebop.Link.NEW_FRAME.equals(link. + getTargetWindow())) { m_URIOption.setValue(state, Link.TARGET_WINDOW); } else { m_URIOption.setValue(state, null); @@ -427,7 +471,7 @@ public class LinkPropertyForm extends FormSection //call to set various properties of Link. setLinkProperties(link, fse); s_log.debug("Created Link with ID: " + link.getOID().toString() - + "Title " + link.getTitle()); + + "Title " + link.getTitle()); } // XXX Initialize the form m_linkModel.clearSelection(state); @@ -453,7 +497,12 @@ public class LinkPropertyForm extends FormSection link.setTargetItem(null); } else { // Internal - link.setTargetURI(null); + if (((String) m_itemParams.getValue(state)).isEmpty()) { + link.setTargetURI(null); + } else { + link.setTargetURI(String.format("&%s", m_itemParams.getValue( + state))); + } // Quasimodo: BEGIN // This is part of the patch to make RelatedLink (and Link) multilanguage compatible