diff --git a/source/java/org/alfresco/web/action/evaluator/CheckoutDocEvaluator.java b/source/java/org/alfresco/web/action/evaluator/CheckoutDocEvaluator.java index c76ebda474..b62b1efe80 100644 --- a/source/java/org/alfresco/web/action/evaluator/CheckoutDocEvaluator.java +++ b/source/java/org/alfresco/web/action/evaluator/CheckoutDocEvaluator.java @@ -50,7 +50,7 @@ public class CheckoutDocEvaluator extends BaseActionEvaluator FacesContext.getCurrentInstance()).getDictionaryService(); return dd.isSubClass(node.getType(), ContentModel.TYPE_CONTENT) && - ((node.hasPermission(PermissionService.CHECK_OUT) && node.hasPermission(PermissionService.CREATE_CHILDREN) && + ((node.hasPermission(PermissionService.CHECK_OUT) && (node.isLocked() == false && node.hasAspect(ContentModel.ASPECT_WORKING_COPY) == false) && node.hasAspect(ContentModel.ASPECT_MULTILINGUAL_EMPTY_TRANSLATION) == false)); diff --git a/source/java/org/alfresco/web/bean/wcm/FilePickerBean.java b/source/java/org/alfresco/web/bean/wcm/FilePickerBean.java index f8ca8b30cd..b150e5c6d2 100644 --- a/source/java/org/alfresco/web/bean/wcm/FilePickerBean.java +++ b/source/java/org/alfresco/web/bean/wcm/FilePickerBean.java @@ -872,6 +872,11 @@ public class FilePickerBean implements Serializable query = queryElemText.substring(cdataStartDelimIndex + CDATA_START_DELIM.length(), cdataEndDelimIndex); } + else + { + // otherwise just use the text as is + query = queryElemText; + } } // perform the search against the repository diff --git a/source/java/org/alfresco/web/forms/xforms/XFormsBean.java b/source/java/org/alfresco/web/forms/xforms/XFormsBean.java index 9f43157714..f80dad5f85 100644 --- a/source/java/org/alfresco/web/forms/xforms/XFormsBean.java +++ b/source/java/org/alfresco/web/forms/xforms/XFormsBean.java @@ -77,6 +77,10 @@ import org.w3c.dom.events.EventListener; import org.w3c.dom.events.EventTarget; import org.xml.sax.SAXException; +import org.alfresco.service.cmr.security.AuthenticationService; +import org.alfresco.web.bean.repository.Repository; + + /** * Bean for interacting with the chiba processor from the ui using ajax requests. * Manages the chiba bean lifecycle. @@ -537,28 +541,83 @@ public class XFormsBean implements Serializable final NodeList nl = XMLUtil.combine(schemaDocument.getElementsByTagNameNS(NamespaceConstants.XMLSCHEMA_NS, "include"), schemaDocument.getElementsByTagNameNS(NamespaceConstants.XMLSCHEMA_NS, "import")); + if (LOGGER.isDebugEnabled()) LOGGER.debug("rewriting " + nl.getLength() + " includes"); + for (int i = 0; i < nl.getLength(); i++) { final Element includeEl = (Element)nl.item(i); if (includeEl.hasAttribute("schemaLocation")) { - String uri = includeEl.getAttribute("schemaLocation"); - if (uri != null && uri.startsWith("http://")) + String uri = includeEl.getAttribute("schemaLocation"); + String finalURI = null; + + if (uri == null || uri.startsWith("http://") || uri.startsWith("https://")) { if (LOGGER.isDebugEnabled()) LOGGER.debug("not rewriting " + uri); + continue; } - final String baseURI = (uri.charAt(0) == '/' - ? AVMUtil.buildStoreUrl(cwdAvmPath) - : AVMUtil.buildAssetUrl(cwdAvmPath)); - + if (uri.startsWith("webscript://")) + { + // It's a web script include / import + final FacesContext facesContext = FacesContext.getCurrentInstance(); + final ExternalContext externalContext = facesContext.getExternalContext(); + final HttpServletRequest request = (HttpServletRequest)externalContext.getRequest(); + + final String baseURI = (request.getScheme() + "://" + + request.getServerName() + ':' + + request.getServerPort() + + request.getContextPath() + "/wcservice"); + String rewrittenURI = uri; + + if (uri.contains("${storeid}")) + { + final String storeId = AVMUtil.getStoreName(cwdAvmPath); + rewrittenURI = uri.replace("${storeid}", storeId); + } + else + { + if (LOGGER.isDebugEnabled()) + LOGGER.debug("no store id specified in webscript URI " + uri); + } + + if (uri.contains("${ticket}")) + { + AuthenticationService authenticationService = Repository.getServiceRegistry(facesContext).getAuthenticationService(); + final String ticket = authenticationService.getCurrentTicket(); + rewrittenURI = rewrittenURI.replace("${ticket}", ticket); + } + else + { + if (LOGGER.isDebugEnabled()) + LOGGER.debug("no ticket specified in webscript URI " + uri); + } + + rewrittenURI = rewrittenURI.replaceAll("%26","&"); + + finalURI = baseURI + rewrittenURI.replace("webscript://", "/"); + + if (LOGGER.isDebugEnabled()) + LOGGER.debug("Final URI " + finalURI); + } + else + { + // It's a web project asset include / import + final String baseURI = (uri.charAt(0) == '/' + ? AVMUtil.buildStoreUrl(cwdAvmPath) + : AVMUtil.buildAssetUrl(cwdAvmPath)); + + finalURI = baseURI + uri; + } + if (LOGGER.isDebugEnabled()) - LOGGER.debug("rewriting " + uri + " as " + (baseURI + uri)); - includeEl.setAttribute("schemaLocation", baseURI + uri); + LOGGER.debug("rewriting " + uri + " as " + finalURI); + + includeEl.setAttribute("schemaLocation", finalURI); } } } diff --git a/source/web/scripts/ajax/xforms.js b/source/web/scripts/ajax/xforms.js index f213aa51f4..854d12affa 100644 --- a/source/web/scripts/ajax/xforms.js +++ b/source/web/scripts/ajax/xforms.js @@ -596,11 +596,15 @@ alfresco.xforms.TextField = alfresco.xforms.Widget.extend({ this.widget = this.domNode; this.widget.setAttribute("value", initial_value); - if (this._maxLength >= 0 || this._length >= 0) + if (this._maxLength >= 0) + { + this.widget.setAttribute("maxlength", this._maxLength); + } + + if (this._length >= 0) { - this.widget.setAttribute("maxlength", this._maxLength >= 0 ? this._maxLength : this._length); this.widget.style.maxWidth = "100%"; - this.widget.setAttribute("size", this._maxLength >= 0 ? this._maxLength : this._length); + this.widget.setAttribute("size", this._length); } else if (this.getAppearance() == "full") { @@ -1311,13 +1315,24 @@ alfresco.xforms.ListSelect = alfresco.xforms.AbstractSelectWidget.extend({ ///////////////////////////////////////////////////////////////// _list_changeHandler: function(event) - { + { + var target; + + if (window.ie) + { + target = window.event.srcElement; + } + else + { + target = event.target; + } + this._selectedValues = []; - for (var i = 0; i < event.target.options.length; i++) + for (var i = 0; i < target.options.length; i++) { - if (event.target.options[i].selected) + if (target.options[i].selected) { - this._selectedValues.push(event.target.options[i].getAttribute("value")); + this._selectedValues.push(target.options[i].getAttribute("value")); } } this._commitValueChange(); @@ -1407,18 +1422,30 @@ alfresco.xforms.RadioSelect1 = alfresco.xforms.AbstractSelectWidget.extend({ _radio_clickHandler: function(event) { - if (!event.target.checked) + var target; + + if (window.ie) + { + target = window.event.srcElement; + } + else + { + target = event.target; + } + + if (!target.checked) { var all_radios = this.widget.getElementsByTagName("input"); for (var i = 0; i < all_radios.length; i++) { - if (all_radios[i].name == event.target.name) + if (all_radios[i].name == target.name) { - all_radios[i].checked = event.target == all_radios[i]; + all_radios[i].checked = target == all_radios[i]; } } } - this._selectedValue = event.target.value; + + this._selectedValue = target.value; this._commitValueChange(); } }); @@ -1499,7 +1526,18 @@ alfresco.xforms.ComboboxSelect1 = alfresco.xforms.AbstractSelectWidget.extend({ _combobox_changeHandler: function(event) { - this._selectedValue = event.target.options[event.target.selectedIndex].value; + var target; + + if (window.ie) + { + target = window.event.srcElement; + } + else + { + target = event.target; + } + + this._selectedValue = target.options[target.selectedIndex].value; this._commitValueChange(); } });