svn commit: r611241 - in /lenya/trunk/src/modules-core/sitemanagement: java/src/org/apache/lenya/cms/site/usecases/CreateDocument.java resources/i18n/cmsui.xml resources/i18n/cmsui_de.xml usecases/site/create.jx usecases/site/createFields.jx

[email protected]
Newsgroups gmane.comp.cms.lenya.cvs
Message-ID <[email protected]>
Author: andreas
Date: Fri Jan 11 09:24:09 2008
New Revision: 611241

URL: http://svn.apache.org/viewvc?rev=611241&view=rev
Log:
Create usecase: Validate path if provided as a parameter. This fixes bug 44171.

Modified:
    lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/CreateDocument.java
    lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui.xml
    lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui_de.xml
    lenya/trunk/src/modules-core/sitemanagement/usecases/site/create.jx
    lenya/trunk/src/modules-core/sitemanagement/usecases/site/createFields.jx

Modified: lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/CreateDocument.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/CreateDocument.java?rev=611241&r1=611240&r2=611241&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/CreateDocument.java (original)
+++ lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/CreateDocument.java Fri Jan 11 09:24:09 2008
@@ -24,6 +24,8 @@
 import org.apache.lenya.cms.publication.DocumentException;
 import org.apache.lenya.cms.publication.DocumentLocator;
 import org.apache.lenya.cms.publication.Publication;
+import org.apache.lenya.cms.publication.PublicationException;
+import org.apache.lenya.cms.site.SiteStructure;
 
 /**
  * Usecase to create a document.
@@ -79,6 +81,40 @@
         setParameter(PATH_PROVIDED, Boolean.valueOf(provided));
     }
 
+    protected void doCheckPreconditions() throws Exception {
+        super.doCheckPreconditions();
+        if (getParameterAsBoolean(PATH_PROVIDED, false)) {
+            validateProvidedPath();
+        }
+    }
+
+    protected void validateProvidedPath() throws PublicationException {
+        String path = getParameterAsString(PATH);
+        Publication pub = getPublication();
+        SiteStructure site = pub.getArea(getArea()).getSite();
+        if (site.contains(path)) {
+            addErrorMessage("path-already-exists");
+        }
+        else if (path.length() <= 2 || !path.startsWith("/") || path.endsWith("/")) {
+            addErrorMessage("invalid-path");
+        }
+        else {
+            String[] steps = path.substring(1).split("/");
+            DocumentBuilder builder = pub.getDocumentBuilder();
+            for (int i = 0; i < steps.length; i++) {
+                if (!builder.isValidDocumentName(steps[i])) {
+                    addErrorMessage("node-name-special-characters");
+                }
+            }
+            if (steps.length > 1) {
+                String parentPath = path.substring(0, path.lastIndexOf("/"));
+                if (!site.contains(parentPath)) {
+                    addErrorMessage("parent-does-not-exist");
+                }
+            }
+        }
+    }
+
     /**
      * Override this method to support other relations.
      * @return The supported relations.
@@ -99,22 +135,13 @@
             addErrorMessage("The relation '" + relation + "' is not supported.");
         }
 
-        Publication pub = getPublication();
-
-        DocumentBuilder builder = pub.getDocumentBuilder();
-        boolean provided = getParameterAsBoolean(PATH_PROVIDED, false);
-
-        if (provided) {
-            String newPath = getNewDocumentPath();
-            if (pub.getArea(getArea()).getSite().contains(newPath)) {
-                String[] params = { newPath };
-                addErrorMessage("path-already-exists", params);
-            }
+        if (getParameterAsBoolean(PATH_PROVIDED, false)) {
+            validateProvidedPath();
         } else {
             String nodeName = getNodeName();
             if (nodeName.equals("")) {
                 addErrorMessage("missing-node-name");
-            } else if (!builder.isValidDocumentName(nodeName)) {
+            } else if (!getPublication().getDocumentBuilder().isValidDocumentName(nodeName)) {
                 addErrorMessage("node-name-special-characters");
             }
         }

Modified: lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui.xml
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui.xml?rev=611241&r1=611240&r2=611241&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui.xml (original)
+++ lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui.xml Fri Jan 11 09:24:09 2008
@@ -28,6 +28,8 @@
   <message key="Node Name">Node Name</message>
   <message key="missing-node-name">Please enter a node name.</message>
   <message key="node-name-special-characters">The node name may not contain any special characters.</message>
+  <message key="invalid-path">The path is invalid.</message>
+  <message key="parent-does-not-exist">The parent of this document doesn't exist.</message>
   <message key="Document visible in Navigation">Visible in Navigation</message>
   <message key="Relation">Relation</message>
   <message key="Page Layout">Page Layout</message>

Modified: lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui_de.xml
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui_de.xml?rev=611241&r1=611240&r2=611241&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui_de.xml (original)
+++ lenya/trunk/src/modules-core/sitemanagement/resources/i18n/cmsui_de.xml Fri Jan 11 09:24:09 2008
@@ -28,6 +28,8 @@
   <message key="Node Name">Knoten-Name</message>
   <message key="missing-node-name">Bitte geben Sie einen Knoten-Namen ein.</message>
   <message key="node-name-special-characters">Der Knoten-Name darf keine Sonderzeichen enthalten.</message>
+  <message key="invalid-path">Der Pfad ist ungültig.</message>
+  <message key="parent-does-not-exist">Das Eltern-Dokument dieses Dokuments existiert nicht.</message>
   <message key="Document visible in Navigation">Sichtbar in Navigation</message>
   <message key="Relation">Relation</message>
   <message key="Page Layout">Seitenlayout</message>

Modified: lenya/trunk/src/modules-core/sitemanagement/usecases/site/create.jx
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/usecases/site/create.jx?rev=611241&r1=611240&r2=611241&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/usecases/site/create.jx (original)
+++ lenya/trunk/src/modules-core/sitemanagement/usecases/site/create.jx Fri Jan 11 09:24:09 2008
@@ -49,7 +49,7 @@
       <jx:import uri="fallback://lenya/modules/usecase/templates/messages.jx"/>
       
       <div class="lenya-box-body">
-        <form method="post" id="form-create">
+        <form action="${usecase.getSourceURL()}" method="post" id="form-create">
           <input type="hidden" name="lenya.continuation" value="${continuation.id}"/>
           <input type="hidden" name="lenya.usecase" value="${request.getParameter('lenya.usecase')}"/>
           <table class="lenya-table-noborder">

Modified: lenya/trunk/src/modules-core/sitemanagement/usecases/site/createFields.jx
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/usecases/site/createFields.jx?rev=611241&r1=611240&r2=611241&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/usecases/site/createFields.jx (original)
+++ lenya/trunk/src/modules-core/sitemanagement/usecases/site/createFields.jx Fri Jan 11 09:24:09 2008
@@ -32,7 +32,7 @@
           <label for="nodeName"><i18n:text>Path</i18n:text>: </label>
         </td>
         <td>
-          <jx:out value="${usecase.getParameter('path')}"/>
+          <input class="lenya-form-element" type="text" name="path" value="${usecase.getParameter('path')}"/>
         </td>
       </tr>
     </jx:when>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.