r1301 - in xwiki/trunk/src: main/java/com/xpn/xwiki main/java/com/xpn/xwiki/web main/resources main/web/WEB-INF main/web/templates test/cactus/com/xpn/xwiki/test test/resources

Phung Hai Nam namphunghai at users.forge.objectweb.org
Mon Sep 11 09:20:12 CEST 2006


Author: namphunghai
Date: 2006-09-11 09:20:11 +0200 (Mon, 11 Sep 2006)
New Revision: 1301

Added:
   xwiki/trunk/src/main/web/templates/captcha.vm
Modified:
   xwiki/trunk/src/main/java/com/xpn/xwiki/XWiki.java
   xwiki/trunk/src/main/java/com/xpn/xwiki/web/EditAction.java
   xwiki/trunk/src/main/java/com/xpn/xwiki/web/PreviewAction.java
   xwiki/trunk/src/main/java/com/xpn/xwiki/web/SaveAction.java
   xwiki/trunk/src/main/resources/ApplicationResources.properties
   xwiki/trunk/src/main/resources/xwiki.hbm.xml
   xwiki/trunk/src/main/web/WEB-INF/struts-config.xml
   xwiki/trunk/src/main/web/WEB-INF/xwiki.cfg
   xwiki/trunk/src/main/web/templates/edit.vm
   xwiki/trunk/src/main/web/templates/editprefs.vm
   xwiki/trunk/src/main/web/templates/preview.vm
   xwiki/trunk/src/main/web/templates/previewfooter.vm
   xwiki/trunk/src/main/web/templates/previewheader.vm
   xwiki/trunk/src/main/web/templates/wysiwyg.vm
   xwiki/trunk/src/test/cactus/com/xpn/xwiki/test/ServletCaptchaTest.java
   xwiki/trunk/src/test/resources/xwiki.hbm.xml
Log:
XWIKI-118. Update the code of captcha for editting (not yet comment and register)

Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/XWiki.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/XWiki.java	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/XWiki.java	2006-09-11 07:20:11 UTC (rev 1301)
@@ -259,14 +259,14 @@
                     "Could not initialize main XWiki context", e);
         }
     }
-    
+
     public XWikiStoreInterface getNotCacheStore() {
     	XWikiStoreInterface store = getStore();
     	if (store instanceof XWikiCacheStoreInterface)
             store = ((XWikiCacheStoreInterface) store).getStore();
     	return store;
     }
-    
+
     public XWikiHibernateStore getHibernateStore() {
         XWikiStoreInterface store = getStore();
         if (store instanceof XWikiHibernateStore)
@@ -584,7 +584,7 @@
 
         // HACK: can anyone think of a better way to do this?
         XWikiCacheListener.setXWiki(this);
-        
+
         // Make sure these classes exists
         if (noupdate) {
             getPrefsClass(context);
@@ -1904,6 +1904,13 @@
         needsUpdate |= bclass.addTextField("macros_wiki", "Macros for the Wiki Parser", 60);
         needsUpdate |= bclass.addTextAreaField("macros_mapping", "Macros Mapping", 60, 15);
 
+        needsUpdate |= bclass.addStaticListField("registration_anonymous", "Anonymous", "Image|Text|---");
+        needsUpdate |= bclass.addStaticListField("registration_registered", "Registered", "---|Image|Text");
+        needsUpdate |= bclass.addStaticListField("edit_anonymous", "Anonymous", "Image|Text|---");
+        needsUpdate |= bclass.addStaticListField("edit_registered", "Registered", "---|Image|Text");
+        needsUpdate |= bclass.addStaticListField("comment_anonymous", "Anonymous", "Image|Text|---");
+        needsUpdate |= bclass.addStaticListField("comment_registered", "Registered", "---|Image|Text");
+
         needsUpdate |= bclass.addTextField("notification_pages", "Notification Pages", 60);
 
         // New fields for the XWiki 1.0 skin
@@ -3653,7 +3660,7 @@
             return cacheService;
         }
     }
-    
+
     public String getURLContent(String surl) throws IOException {
         HttpClient client = new HttpClient();
 

Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/web/EditAction.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/EditAction.java	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/EditAction.java	2006-09-11 07:20:11 UTC (rev 1301)
@@ -30,6 +30,7 @@
 import com.xpn.xwiki.XWikiContext;
 import com.xpn.xwiki.XWikiException;
 import com.xpn.xwiki.XWiki;
+import com.xpn.xwiki.plugin.captcha.CaptchaPluginApi;
 import com.xpn.xwiki.api.Document;
 import com.xpn.xwiki.doc.XWikiDocument;
 import com.xpn.xwiki.doc.XWikiLock;
@@ -45,14 +46,19 @@
         XWikiForm form = context.getForm();
         VelocityContext vcontext = (VelocityContext) context.get("vcontext");
 
-         // Check for edit section
-         String sectionContent = "";
-         int sectionNumber = 0;
-         if (request.getParameter("section") != null && xwiki.hasSectionEdit(context)) {
+        // Add captcha plugin to avoid spam robots
+        CaptchaPluginApi captchaPluginApi = (CaptchaPluginApi) xwiki.getPluginApi("jcaptcha", context);
+        if (captchaPluginApi != null) vcontext.put("captchaPlugin", captchaPluginApi);
+        else vcontext.put("captchaPlugin", "noCaptchaPlugin");
+
+        // Check for edit section
+        String sectionContent = "";
+        int sectionNumber = 0;
+        if (request.getParameter("section") != null && xwiki.hasSectionEdit(context)) {
             sectionNumber = Integer.parseInt(request.getParameter("section"));
             sectionContent = doc.getContentOfSection(sectionNumber);
-         }
-         vcontext.put("sectionNumber",new Integer(sectionNumber));
+        }
+        vcontext.put("sectionNumber",new Integer(sectionNumber));
 
         synchronized (doc) {
             XWikiDocument tdoc = (XWikiDocument) context.get("tdoc");

Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/web/PreviewAction.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/PreviewAction.java	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/PreviewAction.java	2006-09-11 07:20:11 UTC (rev 1301)
@@ -18,6 +18,7 @@
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  *
  * @author sdumitriu
+ * @author Phung Hai Nam (phunghainam at xwiki.com)
  */
 package com.xpn.xwiki.web;
 
@@ -25,6 +26,9 @@
 
 import com.xpn.xwiki.XWikiContext;
 import com.xpn.xwiki.XWikiException;
+import com.xpn.xwiki.XWiki;
+import com.xpn.xwiki.plugin.captcha.CaptchaPluginApi;
+import com.xpn.xwiki.plugin.captcha.CaptchaParams;
 import com.xpn.xwiki.api.Document;
 import com.xpn.xwiki.doc.XWikiDocument;
 
@@ -58,12 +62,25 @@
 
 	public String render(XWikiContext context) throws XWikiException {
 		XWikiRequest request = context.getRequest();
+        XWiki xwiki = context.getWiki();
 		String formaction = request.getParameter("formaction");
 		if (formaction == null || formaction.equals("") || formaction.equals("_preview_")) {
 			XWikiDocument doc = context.getDoc();
 			XWikiForm form = context.getForm();
 			VelocityContext vcontext = (VelocityContext) context.get("vcontext");
 
+            Boolean isResponseCorrect = Boolean.TRUE;
+            CaptchaPluginApi captchaPluginApi = (CaptchaPluginApi) xwiki.getPluginApi("jcaptcha", context);
+            if (captchaPluginApi != null) vcontext.put("captchaPlugin", captchaPluginApi);
+            else vcontext.put("captchaPlugin", "noCaptchaPlugin");
+            if (captchaPluginApi != null) {
+                // verify captcha
+                CaptchaParams captchaParams = captchaPluginApi.getCaptchaParams(context.getUser(), "edit");
+                isResponseCorrect = captchaPluginApi.verifyCaptcha(captchaParams);
+            }
+            // put isResponseCorrect value to vcontext for save action
+            vcontext.put("isResponseCorrect", isResponseCorrect.toString());
+
 			String language = ((EditForm) form).getLanguage();
 			XWikiDocument tdoc;
 
@@ -97,7 +114,10 @@
 				tdoc2.readFromTemplate(((EditForm) form).getTemplate(), context);
 				tdoc2.readFromForm((EditForm) form, context);
 			}
-			return "preview";
+            // recomfirm edit (captcha) when jcaptcha is not correct
+            if ((context.get("recheckcaptcha") != null) && ((Boolean)context.get("recheckcaptcha")).booleanValue())
+                return "captcha";
+            else return "preview";
 		}
 		return "disambiguation";
 	}

Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/web/SaveAction.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/SaveAction.java	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/SaveAction.java	2006-09-11 07:20:11 UTC (rev 1301)
@@ -26,16 +26,32 @@
 import com.xpn.xwiki.XWiki;
 import com.xpn.xwiki.XWikiContext;
 import com.xpn.xwiki.XWikiException;
+import com.xpn.xwiki.plugin.captcha.CaptchaPluginApi;
+import com.xpn.xwiki.plugin.captcha.CaptchaParams;
 import com.xpn.xwiki.doc.XWikiDocument;
 import com.xpn.xwiki.doc.XWikiLock;
 
-public class SaveAction extends XWikiAction {
+public class SaveAction extends PreviewAction {
 	public boolean save(XWikiContext context) throws XWikiException {
 		XWiki xwiki = context.getWiki();
         XWikiRequest request = context.getRequest();
 		XWikiDocument doc = context.getDoc();
 		XWikiForm form = context.getForm();
 
+        // Confirm edit to avoid spam robots
+        Boolean isResponseCorrect = Boolean.TRUE;
+        CaptchaPluginApi captchaPluginApi = (CaptchaPluginApi) xwiki.getPluginApi("jcaptcha", context);
+        // If  'save' action after preview
+        String isResponsePreviewCorrect = request.getParameter("isResponsePreviewCorrect");
+        if ((isResponsePreviewCorrect != null))
+            isResponseCorrect = Boolean.valueOf(isResponsePreviewCorrect);
+        else if (captchaPluginApi != null) {
+            CaptchaParams captchaParams = captchaPluginApi.getCaptchaParams(context.getUser(), "edit");
+            isResponseCorrect = captchaPluginApi.verifyCaptcha(captchaParams);
+        }
+        // If captcha is not correct it will be required again
+        if (!isResponseCorrect.booleanValue()) return true;
+
 		// This is pretty useless, since contexts aren't shared between threads.
 		// It just slows down execution.
         String title = doc.getTitle();
@@ -112,7 +128,12 @@
 		XWikiException e = (XWikiException) context.get("exception");
 		if ((e != null) && (e.getCode() == XWikiException.ERROR_XWIKI_APP_DOCUMENT_NOT_EMPTY)) {
 			return "docalreadyexists";
-		}
-		return "exception";
-	}
+        } else if (e != null) {
+            return "exception";
+        } else {
+            // If captcha is not correct it will require to confirm again
+            context.put("recheckcaptcha",new Boolean(true));
+            return super.render(context);
+        }
+    }
 }

Modified: xwiki/trunk/src/main/resources/ApplicationResources.properties
===================================================================
--- xwiki/trunk/src/main/resources/ApplicationResources.properties	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/resources/ApplicationResources.properties	2006-09-11 07:20:11 UTC (rev 1301)
@@ -478,4 +478,12 @@
 editHistory=History
 
 switchto=Switch to
-sectionEdit=Sectional Editing
\ No newline at end of file
+sectionEdit=Sectional Editing
+
+antispam=Antispam
+registration_anonymous=Anonymous
+registration_registered= Registered
+edit_anonymous=Anonymous
+edit_registered=Registered
+comment_anonymous=Anonymous
+comment_registered=Registered
\ No newline at end of file

Modified: xwiki/trunk/src/main/resources/xwiki.hbm.xml
===================================================================
--- xwiki/trunk/src/main/resources/xwiki.hbm.xml	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/resources/xwiki.hbm.xml	2006-09-11 07:20:11 UTC (rev 1301)
@@ -702,6 +702,24 @@
         <property name="languages" type="string">
             <column name="XWP_LANGUAGES" length="255" />
         </property>
+        <property name="registration_anonymous" type="string">
+            <column name="XWP_REGISTRATION_ANONYMUOS" length="255" />
+        </property>
+        <property name="registration_registered" type="string">
+            <column name="XWP_REGISTRATION_REGISTERED" length="255" />
+        </property>
+        <property name="edit_anonymous" type="string">
+            <column name="XWP_EDIT_ANONYMUOS" length="255" />
+        </property>
+        <property name="edit_registered" type="string">
+            <column name="XWP_EDIT_REGISTERED" length="255" />
+        </property>
+        <property name="comment_anonymous" type="string">
+            <column name="XWP_COMMENT_ANONYMUOS" length="255" />
+        </property>
+        <property name="comment_registered" type="string">
+            <column name="XWP_COMMENT_REGISTERED" length="255" />
+        </property>
     </class>
 
     <!-- XWikiComments custom mapping -->

Modified: xwiki/trunk/src/main/web/WEB-INF/struts-config.xml
===================================================================
--- xwiki/trunk/src/main/web/WEB-INF/struts-config.xml	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/web/WEB-INF/struts-config.xml	2006-09-11 07:20:11 UTC (rev 1301)
@@ -128,6 +128,7 @@
                 name="preview"
                 scope="request">
             <forward name="preview" path="/templates/preview.vm"/>
+            <forward name="captcha" path="/templates/captcha.vm"/>
         </action>
 
         <action path="/save/"
@@ -366,9 +367,16 @@
                 scope="request">
         </action>
 
+        <action path="/jcaptcha/"
+                type="com.octo.captcha.module.struts.image.RenderImageCaptchaAction">
+        </action>
+
     </action-mappings>
 
     <controller processorClass="com.xpn.xwiki.web.XWikiRequestProcessor"
                 debug="0" contentType="text/html"/>
 
+    <!-- ============================ Plugins =============================== -->
+    <plug-in className="com.octo.captcha.module.struts.CaptchaServicePlugin"/>
+
 </struts-config>

Modified: xwiki/trunk/src/main/web/WEB-INF/xwiki.cfg
===================================================================
--- xwiki/trunk/src/main/web/WEB-INF/xwiki.cfg	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/web/WEB-INF/xwiki.cfg	2006-09-11 07:20:11 UTC (rev 1301)
@@ -20,7 +20,7 @@
 xwiki.store.cache=1
 xwiki.store.cache.capacity=100
 xwiki.monitor=1
-xwiki.plugins=com.xpn.xwiki.monitor.api.MonitorPlugin,com.xpn.xwiki.plugin.calendar.CalendarPlugin,com.xpn.xwiki.plugin.feed.FeedPlugin,com.xpn.xwiki.plugin.ldap.LDAPPlugin,com.xpn.xwiki.plugin.google.GooglePlugin,com.xpn.xwiki.plugin.flickr.FlickrPlugin,com.xpn.xwiki.plugin.mail.MailPlugin,com.xpn.xwiki.plugin.packaging.PackagePlugin,com.xpn.xwiki.plugin.query.QueryPlugin,com.xpn.xwiki.plugin.graphviz.GraphVizPlugin,com.xpn.xwiki.plugin.svg.SVGPlugin,com.xpn.xwiki.plugin.charts.ChartingPlugin,com.xpn.xwiki.plugin.fileupload.FileUploadPlugin,com.xpn.xwiki.plugin.laszlo.LaszloPlugin,com.xpn.xwiki.plugin.image.ImagePlugin,com.xpn.xwiki.plugin.packaging.PackagePlugin
+xwiki.plugins=com.xpn.xwiki.monitor.api.MonitorPlugin,com.xpn.xwiki.plugin.calendar.CalendarPlugin,com.xpn.xwiki.plugin.feed.FeedPlugin,com.xpn.xwiki.plugin.ldap.LDAPPlugin,com.xpn.xwiki.plugin.google.GooglePlugin,com.xpn.xwiki.plugin.flickr.FlickrPlugin,com.xpn.xwiki.plugin.mail.MailPlugin,com.xpn.xwiki.plugin.packaging.PackagePlugin,com.xpn.xwiki.plugin.query.QueryPlugin,com.xpn.xwiki.plugin.graphviz.GraphVizPlugin,com.xpn.xwiki.plugin.svg.SVGPlugin,com.xpn.xwiki.plugin.charts.ChartingPlugin,com.xpn.xwiki.plugin.fileupload.FileUploadPlugin,com.xpn.xwiki.plugin.laszlo.LaszloPlugin,com.xpn.xwiki.plugin.image.ImagePlugin,com.xpn.xwiki.plugin.packaging.PackagePlugin, com.xpn.xwiki.plugin.captcha.CaptchaPlugin
 
 # This parameter allows XWiki to operate in Hosting mode
 # allowing to create multiple wikis having their own database
@@ -55,6 +55,7 @@
 
 xwiki.plugin.image.cache.capacity=30
 
+xwiki.plugin.captcha=1
 
 ## Personal config
 xwiki.superadminpassword=toto
@@ -72,3 +73,4 @@
 
 # This parameter will activate the sectional editing
 xwiki.section.edit=1
+

Added: xwiki/trunk/src/main/web/templates/captcha.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/captcha.vm	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/web/templates/captcha.vm	2006-09-11 07:20:11 UTC (rev 1301)
@@ -0,0 +1,29 @@
+#template("xwiki.vm")
+#template("httpheader.vm")
+#template("header.vm")
+#template("previewheader.vm")
+&nbsp;<div id="xwikicontent">
+<form id="edit" method="post" action="$doc.getURL("save")">
+#if (!$captchaPlugin.equals("noCaptchaPlugin"))
+#set($captchaParams = $captchaPlugin.getCaptchaParams($context.user,"edit"))
+$captchaPlugin.displayCaptcha($captchaParams,"wiki_captcha")
+<br />
+#end
+<p>
+<input type="hidden" name="content" value="$xwiki.getFormEncoded($tdoc.content)" />
+<input type="hidden" name="parent" value="$!doc.getParent()" />
+<input type="hidden" name="creator" value="$!doc.getCreator()" />
+<input type="hidden" name="title" value="$!tdoc.getTitle()" />
+<input type="hidden" name="defaultLanguage" value="$!doc.getDefaultLanguage()" />
+<input type="hidden" name="template" value="$!tdoc.getTemplate()" />
+<input type="hidden" name="xredirect" value="$!request.getParameter("xredirect")" />
+<input type="hidden" name="xnotification" value="$!request.getParameter("xnotification")" />
+<input type="hidden" name="language" value="$!request.getParameter("language")" />
+</p>
+<div id="xwikiobject">
+#template("hiddenobject.vm")
+</div>
+</form>
+</div>
+#template("previewfooter.vm")
+#template("footer.vm")

Modified: xwiki/trunk/src/main/web/templates/edit.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/edit.vm	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/web/templates/edit.vm	2006-09-11 07:20:11 UTC (rev 1301)
@@ -81,7 +81,11 @@
 // -->
 </script>
 $msg.get("helponsyntax") <a href="" onClick="openHelp(); return false;">$msg.get("xwikisyntax")</a>
-<br /><br />
+#if (!$captchaPlugin.equals("noCaptchaPlugin"))
+#set($captchaParams = $captchaPlugin.getCaptchaParams($context.user,"edit"))
+$captchaPlugin.displayCaptcha($captchaParams,"wiki_captcha")
+#end
+<br />
 #if ($tdoc.language=="")
 $msg.get("parent"):&nbsp;<input type="text" name="parent" value="$!doc.parent" size="40" />
 <br/><br/>

Modified: xwiki/trunk/src/main/web/templates/editprefs.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/editprefs.vm	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/web/templates/editprefs.vm	2006-09-11 07:20:11 UTC (rev 1301)
@@ -28,7 +28,7 @@
 </script>
 #else
 #set($class = $obj.xWikiClass)
-#set($sections = ["params", "skin", "presentation", "editing", "advanced", "registration"])
+#set($sections = ["params", "skin", "presentation", "editing", "advanced", "registration", "antispam"])
 #set($sectionitemsmap = $xwiki.hashMap)
 #set($sectionitemsmap.params = ["multilingual", "language" , "default_language", "authenticate_view", "authenticate_edit", "auth_active_check" ])
 #set($sectionitemsmap.skin = ["skin", "stylesheet", "stylesheets", "leftPanels", "rightPanels", "showLeftPanels", "showRightPanels", "pageWidth"])
@@ -36,6 +36,7 @@
 #set($sectionitemsmap.editing = ["editor", "editbox_width","editbox_height"])
 #set($sectionitemsmap.advanced = ["macros_languages", "macros_velocity","macros_groovy", "macros_mapping", "notification_pages" ])
 #set($sectionitemsmap.registration = [ "use_email_verification", "admin_email", "smtp_server", "validation_email_content",  "confirmation_email_content" , "invitation_email_content"])
+#set($sectionitemsmap.antispam = [ "registration_anonymous", "registration_registered", "edit_anonymous", "edit_registered",  "comment_anonymous", "comment_registered"])
 #macro(showsection $section $sectionitemsmap)
 <h3>$msg.get($section)</h3>
 <br>
@@ -49,6 +50,19 @@
 #set($title = $!prop.prettyName)
 #end
 #end
+<tr>
+  <td>
+    #if($item=="registration_anonymous")
+      <b><i> Registration  </i></b>
+    #end
+    #if($item=="edit_anonymous")
+      <br><b><i> Edit  </i></b>
+    #end
+    #if($item=="comment_anonymous")
+      <br><b><i> Comment  </i></b>
+    #end
+  </td>
+</tr>
 <tr><td>$title</td>
 <td>
 #if($prop)

Modified: xwiki/trunk/src/main/web/templates/preview.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/preview.vm	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/web/templates/preview.vm	2006-09-11 07:20:11 UTC (rev 1301)
@@ -15,6 +15,7 @@
 <input type="hidden" name="xredirect" value="$!request.getParameter("xredirect")" />
 <input type="hidden" name="xnotification" value="$!request.getParameter("xnotification")" />
 <input type="hidden" name="language" value="$!request.getParameter("language")" />
+<input type="hidden" name="isResponsePreviewCorrect" value="$isResponseCorrect">
 </p>
 <div id="xwikiobject">
 #template("hiddenobject.vm")

Modified: xwiki/trunk/src/main/web/templates/previewfooter.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/previewfooter.vm	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/web/templates/previewfooter.vm	2006-09-11 07:20:11 UTC (rev 1301)
@@ -15,10 +15,11 @@
       #end
       #if ($sectionNumber != 0)
         #set($editparams = "$editparams&section=$sectionNumber")
+        #set($saveparams = "section=$sectionNumber")
       #end
     #end
     <a href="$doc.getURL($editaction,$editparams)"  onclick="document.forms.edit.action=this.href; document.forms.edit.submit(); return false;"> $msg.get("backtoedit")</a>
     <span> | </span>
-    <a href="$doc.getURL("save",$editparams)" onclick="document.forms.edit.action=this.href; document.forms.edit.submit(); return false;" >$msg.get("save")</a>
+    <a href="$doc.getURL("save",$saveparams)" onclick="document.forms.edit.action=this.href; document.forms.edit.submit(); return false;" >$msg.get("save")</a>
   </div>
 </div>
\ No newline at end of file

Modified: xwiki/trunk/src/main/web/templates/previewheader.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/previewheader.vm	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/web/templates/previewheader.vm	2006-09-11 07:20:11 UTC (rev 1301)
@@ -15,10 +15,11 @@
       #end
       #if ($sectionNumber != 0)
         #set($editparams = "$editparams&section=$sectionNumber")
+        #set($saveparams = "section=$sectionNumber")
       #end
     #end
     <a href="$doc.getURL($editaction,$editparams)"  onclick="document.forms.edit.action=this.href; document.forms.edit.submit(); return false;"> $msg.get("backtoedit")</a>
     <span> | </span>
-    <a href="$doc.getURL("save",$editparams)" onclick="document.forms.edit.action=this.href; document.forms.edit.submit(); return false;" >$msg.get("save")</a>
+    <a href="$doc.getURL("save",$saveparams)" onclick="document.forms.edit.action=this.href; document.forms.edit.submit(); return false;" >$msg.get("save")</a>
   </div>
 </div>
\ No newline at end of file

Modified: xwiki/trunk/src/main/web/templates/wysiwyg.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/wysiwyg.vm	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/main/web/templates/wysiwyg.vm	2006-09-11 07:20:11 UTC (rev 1301)
@@ -72,6 +72,10 @@
    $msg.get("switchto") &nbsp; <span style="color: blue; cursor:pointer;" onclick="document.forms.edit.action='$doc.getURL("edit","$switchParam")';if (document.forms.edit.onsubmit) document.forms.edit.onsubmit(); document.forms.edit.submit(); return false;"><u>$msg.get("wikieditor")</u></span>
 <br />
 $xwiki.getTextArea($tdoc.content)
+#if (!$captchaPlugin.equals("noCaptchaPlugin"))
+#set($captchaParams = $captchaPlugin.getCaptchaParams($context.user,"edit"))
+$captchaPlugin.displayCaptcha($captchaParams,"wiki_captcha")
+#end
 <br/>
 #if ($tdoc.language=="")
 $msg.get("parent"):&nbsp;<input type="text" name="parent" value="$!doc.parent" size="40" />

Modified: xwiki/trunk/src/test/cactus/com/xpn/xwiki/test/ServletCaptchaTest.java
===================================================================
--- xwiki/trunk/src/test/cactus/com/xpn/xwiki/test/ServletCaptchaTest.java	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/test/cactus/com/xpn/xwiki/test/ServletCaptchaTest.java	2006-09-11 07:20:11 UTC (rev 1301)
@@ -65,6 +65,32 @@
         launchTest();
     }
 
+    // ====================== Test does not show a captcha  when preview edit by anonymous ==============================
+    public void beginNotShowCaptchaForAnonymousPreviewEdit(WebRequest webRequest) throws HibernateException, XWikiException {
+        XWikiHibernateStore hibstore = new XWikiHibernateStore(getHibpath());
+        StoreHibernateTest.cleanUp(hibstore, context);
+        clientSetUp(hibstore);
+
+        Utils.setStringValue("XWiki.XWikiPreferences", "edit_anonymous", "Image", context);
+        Utils.setStringValue("XWiki.XWikiPreferences", "edit_registered", "Image", context);
+        Utils.createDoc(xwiki.getStore(), "Main", "WebHome", context);
+        setUrl(webRequest, "preview", "Main", "WebHome", "");
+    }
+
+    public void endNotShowCaptchaForAnonymousPreviewEdit(WebResponse webResponse) throws HibernateException {
+        try {
+            String result = webResponse.getText();
+            assertFalse("Find out captcha image  : " + result, result.indexOf("<input type=\"text\" name=\"jcaptcha_response\"") != -1);
+            assertFalse("Find out simple math question : " + result, result.indexOf("Please answer this simple math question") != -1);
+        } finally {
+            clientTearDown();
+        }
+    }
+
+    public void testNotShowCaptchaForAnonymousPreviewEdit() throws Throwable {
+        launchTest();
+    }
+
     // ====================== Test show a simple question to confirm for edit by anonymous =============================
     public void beginShowCaptchaTextForAnonymousEdit(WebRequest webRequest) throws HibernateException, XWikiException {
         XWikiHibernateStore hibstore = new XWikiHibernateStore(getHibpath());
@@ -114,6 +140,41 @@
         launchTest();
     }
 
+    // ============ Verify the captcha does not show up for registered users when configured on anonymous ==============
+    public void beginNotShowCaptchaForRegisteredUserEdit(WebRequest webRequest) throws HibernateException, XWikiException, MalformedURLException {
+        XWikiHibernateStore hibstore = new XWikiHibernateStore(getHibpath());
+        StoreHibernateTest.cleanUp(hibstore, context);
+        clientSetUp(hibstore);
+
+        Utils.setStringValue("XWiki.XWikiPreferences", "edit_anonymous", "Emage", context);
+        Utils.createDoc(xwiki.getStore(), "Main", "WebHome1", context);
+        HashMap map = new HashMap();
+        map.put("password", "toto");
+        xwiki.createUser("PhungHaiNam", map, "", "", "view, edit", context);
+        Utils.updateRight(xwiki, context, "Main.WebHome1", "XWiki.PhungHaiNam", "", "edit", true, false);
+
+        MyFormAuthentication auth = new MyFormAuthentication("PhungHaiNam", "toto");
+        auth.setSecurityCheckURL(new URL("http://127.0.0.1:9080/xwiki/testbin/loginsubmit/XWiki/XWikiLogin"));
+        webRequest.setAuthentication(auth);
+        setUrl(webRequest, "edit", "Main", "WebHome1", "");
+    }
+
+    public void endNotShowCaptchaForRegisteredUserEdit(WebResponse webResponse) throws HibernateException {
+        try {
+            assertEquals("Response status should be 200", 200, webResponse.getStatusCode());
+            String result = webResponse.getText();
+            assertTrue("Could not find WebHome1 Content: " + result, result.indexOf("Hello 1")!=-1);
+            assertFalse("Find out captcha image  : " + result, result.indexOf("<input type=\"text\" name=\"jcaptcha_response\"") != -1);
+            assertFalse("Find out simple math question : " + result, result.indexOf("Please answer this simple math question") != -1);
+        } finally {
+            clientTearDown();
+        }
+    }
+
+    public void testNotShowCaptchaForRegisteredUserEdit() throws Throwable {
+        launchTest();
+    }
+
     // =================== Test for require captcha again when comfirm to edit is not correct ==========================
     public void beginCaptchaNotCorrectForAnonymousEdit(WebRequest webRequest) throws HibernateException, XWikiException {
         XWikiHibernateStore hibstore = new XWikiHibernateStore(getHibpath());

Modified: xwiki/trunk/src/test/resources/xwiki.hbm.xml
===================================================================
--- xwiki/trunk/src/test/resources/xwiki.hbm.xml	2006-09-08 12:25:46 UTC (rev 1300)
+++ xwiki/trunk/src/test/resources/xwiki.hbm.xml	2006-09-11 07:20:11 UTC (rev 1301)
@@ -699,6 +699,24 @@
         <property name="languages" type="string">
             <column name="XWP_LANGUAGES" length="255" />
         </property>
+        <property name="registration_anonymous" type="string">
+            <column name="XWP_REGISTRATION_ANONYMUOS" length="255" />
+        </property>
+        <property name="registration_registered" type="string">
+            <column name="XWP_REGISTRATION_REGISTERED" length="255" />
+        </property>
+        <property name="edit_anonymous" type="string">
+            <column name="XWP_EDIT_ANONYMUOS" length="255" />
+        </property>
+        <property name="edit_registered" type="string">
+            <column name="XWP_EDIT_REGISTERED" length="255" />
+        </property>
+        <property name="comment_anonymous" type="string">
+            <column name="XWP_COMMENT_ANONYMUOS" length="255" />
+        </property>
+        <property name="comment_registered" type="string">
+            <column name="XWP_COMMENT_REGISTERED" length="255" />
+        </property>
     </class>
 
     <!-- XWikiComments custom mapping -->





More information about the Xwiki-notifications mailing list