diff -r 6ec5554623ef nuxeo-webengine-features/nuxeo-webengine-sites-core-contrib/pom.xml --- a/nuxeo-webengine-features/nuxeo-webengine-sites-core-contrib/pom.xml Fri Apr 15 16:54:07 2011 +0200 +++ b/nuxeo-webengine-features/nuxeo-webengine-sites-core-contrib/pom.xml Mon Apr 18 18:12:01 2011 +0200 @@ -20,6 +20,10 @@ nuxeo-core-api + org.nuxeo.ecm.webengine + nuxeo-webengine-core + + org.nuxeo.ecm.core nuxeo-core @@ -29,7 +33,7 @@ org.wikimodel - wem + wem commons-lang diff -r 6ec5554623ef nuxeo-webengine-features/nuxeo-webengine-sites-core-contrib/src/main/java/org/nuxeo/webengine/sites/listeners/SiteActionListener.java --- a/nuxeo-webengine-features/nuxeo-webengine-sites-core-contrib/src/main/java/org/nuxeo/webengine/sites/listeners/SiteActionListener.java Fri Apr 15 16:54:07 2011 +0200 +++ b/nuxeo-webengine-features/nuxeo-webengine-sites-core-contrib/src/main/java/org/nuxeo/webengine/sites/listeners/SiteActionListener.java Mon Apr 18 18:12:01 2011 +0200 @@ -17,12 +17,16 @@ */ package org.nuxeo.webengine.sites.listeners; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + import org.nuxeo.ecm.core.api.ClientException; import org.nuxeo.ecm.core.api.DocumentModel; import org.nuxeo.ecm.core.api.DocumentModelList; import org.nuxeo.ecm.core.event.Event; import org.nuxeo.ecm.core.event.EventListener; import org.nuxeo.ecm.core.event.impl.DocumentEventContext; +import org.nuxeo.ecm.webengine.util.URLEncoderHelper; import static org.nuxeo.ecm.core.api.event.DocumentEventTypes.ABOUT_TO_CREATE; import static org.nuxeo.ecm.core.api.event.DocumentEventTypes.BEFORE_DOC_UPDATE; @@ -60,6 +64,7 @@ if (ABOUT_TO_CREATE.equals(eventId)) { String url = doc.getName(); + url = URLEncoderHelper.encodeSegment(url); String documentWithSameURLQuery = "SELECT * FROM DOCUMENT where " + WEBCONTAINER_URL + " STARTSWITH \"" + url + "\""; diff -r 6ec5554623ef nuxeo-webengine-features/nuxeo-webengine-sites/src/main/java/org/nuxeo/webengine/sites/AbstractSiteDocumentObject.java --- a/nuxeo-webengine-features/nuxeo-webengine-sites/src/main/java/org/nuxeo/webengine/sites/AbstractSiteDocumentObject.java Fri Apr 15 16:54:07 2011 +0200 +++ b/nuxeo-webengine-features/nuxeo-webengine-sites/src/main/java/org/nuxeo/webengine/sites/AbstractSiteDocumentObject.java Mon Apr 18 18:12:01 2011 +0200 @@ -255,7 +255,8 @@ getWebPageDocumentType()); DocumentModel parentWebSite = getParentWebSite(session); String path = SiteUtils.getPagePath(parentWebSite, createdDocument); - return redirect(URIUtils.quoteURIPathComponent(path, false)); + return redirect(path.toString()); + //return redirect(URIUtils.quoteURIPathComponent(path, false)); } catch (Exception e) { throw WebException.wrap(e); } @@ -274,8 +275,7 @@ StringBuilder path = new StringBuilder( SiteUtils.getWebContainersPath()).append("/"); path.append(SiteUtils.getString(parentWebSite, WEBCONTAINER_URL)); - return redirect(URIUtils.quoteURIPathComponent(path.toString(), - false)); + return redirect(path.toString()); } catch (Exception e) { throw WebException.wrap(e); } @@ -309,8 +309,7 @@ } session.save(); - return redirect(URIUtils.quoteURIPathComponent( - SiteUtils.getPagePath(webContainer, webContainer), false)); + return redirect( SiteUtils.getPagePath(webContainer, webContainer)); } catch (Exception e) { throw WebException.wrap(e); } diff -r 6ec5554623ef nuxeo-webengine-features/nuxeo-webengine-sites/src/main/java/org/nuxeo/webengine/sites/utils/SiteQueriesCollection.java --- a/nuxeo-webengine-features/nuxeo-webengine-sites/src/main/java/org/nuxeo/webengine/sites/utils/SiteQueriesCollection.java Fri Apr 15 16:54:07 2011 +0200 +++ b/nuxeo-webengine-features/nuxeo-webengine-sites/src/main/java/org/nuxeo/webengine/sites/utils/SiteQueriesCollection.java Mon Apr 18 18:12:01 2011 +0200 @@ -18,10 +18,14 @@ package org.nuxeo.webengine.sites.utils; import org.nuxeo.ecm.core.api.ClientException; +import org.nuxeo.ecm.core.api.ClientRuntimeException; import org.nuxeo.ecm.core.api.CoreSession; +import org.nuxeo.ecm.core.api.DocumentModel; import org.nuxeo.ecm.core.api.DocumentModelList; +import org.nuxeo.ecm.core.api.Filter; import org.nuxeo.ecm.core.api.UnrestrictedSessionRunner; import org.nuxeo.ecm.platform.comment.workflow.utils.CommentsConstants; +import org.nuxeo.ecm.webengine.util.URLEncoderHelper; /** * Collection of the queries used in the sites module. It gathers all in one @@ -39,15 +43,30 @@ * returned. */ public static DocumentModelList querySitesByUrlAndDocType( - CoreSession session, String url, String documentType) + CoreSession session, final String url, String documentType) throws ClientException { String queryString = String.format("SELECT * FROM %s WHERE " - + "ecm:mixinType = 'WebView' AND webc:url = \"%s\" AND " + + "ecm:mixinType = 'WebView' AND " + "ecm:isCheckedInVersion = 0 AND ecm:isProxy = 0 " + "AND ecm:currentLifeCycleState != 'deleted' " - + "AND webc:isWebContainer = 1", documentType, url); + + "AND webc:isWebContainer = 1", documentType); - return session.query(queryString); + return session.query(queryString, new Filter() { + private static final long serialVersionUID = 259658360650139844L; + + public boolean accept(DocumentModel docModel) { + try { + String webcUrl = (String) docModel.getPropertyValue("webc:url"); + if ( webcUrl != null ) { + String encodedUrl = URLEncoderHelper.encodeSegment(url); + return webcUrl.equals(encodedUrl); + } + return false; + } catch (Exception e) { + throw new ClientRuntimeException(e); + } + } + }); } /** diff -r 6ec5554623ef nuxeo-webengine-features/nuxeo-webengine-sites/src/main/java/org/nuxeo/webengine/sites/utils/SiteUtils.java --- a/nuxeo-webengine-features/nuxeo-webengine-sites/src/main/java/org/nuxeo/webengine/sites/utils/SiteUtils.java Fri Apr 15 16:54:07 2011 +0200 +++ b/nuxeo-webengine-features/nuxeo-webengine-sites/src/main/java/org/nuxeo/webengine/sites/utils/SiteUtils.java Mon Apr 18 18:12:01 2011 +0200 @@ -17,6 +17,8 @@ package org.nuxeo.webengine.sites.utils; import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -31,6 +33,7 @@ import javax.ws.rs.core.Response; import org.apache.commons.lang.StringUtils; +import org.nuxeo.common.utils.Path; import org.nuxeo.ecm.core.api.Blob; import org.nuxeo.ecm.core.api.ClientException; import org.nuxeo.ecm.core.api.CoreSession; @@ -43,6 +46,7 @@ import org.nuxeo.ecm.platform.usermanager.UserManager; import org.nuxeo.ecm.webengine.WebEngine; import org.nuxeo.ecm.webengine.model.WebContext; +import org.nuxeo.ecm.webengine.util.URLEncoderHelper; import org.nuxeo.runtime.api.Framework; import org.nuxeo.webengine.sites.JsonAdapter; @@ -147,16 +151,23 @@ DocumentModel documentModel) { StringBuilder path = new StringBuilder(getWebContainersPath()).append('/'); + String segment = ws.getPath().segment(ws.getPath().segmentCount() - 1); +// segment = URLEncode(segment); if (ws.hasSchema(SiteConstants.WEBCONTAINER_SCHEMA)) { try { path.append(ws.getPropertyValue(SiteConstants.WEBCONTAINER_URL)).append("/"); } catch (Exception e) { - path.append(ws.getPath().segment(ws.getPath().segmentCount() - 1)).append('/'); + path.append(segment).append('/'); } } else { - path.append(ws.getPath().segment(ws.getPath().segmentCount() - 1)).append('/'); + path.append(segment).append('/'); } - path.append(JsonAdapter.getRelativePath(ws, documentModel)); + Path relativePath = JsonAdapter.getRelativePath(ws, documentModel); + for ( int i = 0 ; i < relativePath.segmentCount() ; i++) { + segment = relativePath.segment(i); + segment = URLEncoderHelper.encodeSegment(segment); + path.append(segment).append("/"); + } return path.toString(); } diff -r 6ec5554623ef nuxeo-webengine-features/nuxeo-webengine-sites/src/main/resources/widgets/sites/all_webpages.xml --- a/nuxeo-webengine-features/nuxeo-webengine-sites/src/main/resources/widgets/sites/all_webpages.xml Fri Apr 15 16:54:07 2011 +0200 +++ b/nuxeo-webengine-features/nuxeo-webengine-sites/src/main/resources/widgets/sites/all_webpages.xml Mon Apr 18 18:12:01 2011 +0200 @@ -2,12 +2,12 @@ <#if (!nxthemesInfo.model.items.empty)>

${Context.getMessage("title.all.webpages")}

-