r944 - in xwiki/trunk/src/main: java/com/xpn/xwiki/web web/WEB-INF web/templates

Nguyen Viet Chung chungnv at users.forge.objectweb.org
Mon Feb 27 12:34:33 CET 2006


Author: chungnv
Date: 2006-02-27 12:34:32 +0100 (Mon, 27 Feb 2006)
New Revision: 944

Added:
   xwiki/trunk/src/main/java/com/xpn/xwiki/web/LockAction.java
Modified:
   xwiki/trunk/src/main/java/com/xpn/xwiki/web/CancelAction.java
   xwiki/trunk/src/main/java/com/xpn/xwiki/web/XWikiPortlet.java
   xwiki/trunk/src/main/web/WEB-INF/struts-config.xml
   xwiki/trunk/src/main/web/templates/edit.vm
   xwiki/trunk/src/main/web/templates/editclass.vm
   xwiki/trunk/src/main/web/templates/editobject.vm
   xwiki/trunk/src/main/web/templates/editprefs.vm
   xwiki/trunk/src/main/web/templates/editrights.vm
   xwiki/trunk/src/main/web/templates/httpheader.vm
   xwiki/trunk/src/main/web/templates/viewheader.vm
Log:
Added new LockAction and Javascript locks using XMLHttpRequest to make sure that all locks are set properly and cleaned up even if the user does not press cancel. Locks are automatically cleared when use leave the page and taken again when the user loads and edit page

Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/web/CancelAction.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/CancelAction.java	2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/CancelAction.java	2006-02-27 11:34:32 UTC (rev 944)
@@ -53,11 +53,14 @@
         }
 
         String username = context.getUser();
-
         XWikiLock lock = tdoc.getLock(context);
-        if (lock != null && lock.getUserName().equals(username))
+        if (lock != null && lock.getUserName().equals(username)) {
+        if ("inline".equals(request.get("action")))
+            doc.removeLock(context);
+        else
             tdoc.removeLock(context);
-
+        }
+       
         // forward to view
         String redirect = Utils.getRedirect("view", context);
         sendRedirect(response, redirect);

Added: xwiki/trunk/src/main/java/com/xpn/xwiki/web/LockAction.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/LockAction.java	2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/LockAction.java	2006-02-27 11:34:32 UTC (rev 944)
@@ -0,0 +1,46 @@
+package com.xpn.xwiki.web;
+
+import com.xpn.xwiki.XWiki;
+import com.xpn.xwiki.XWikiContext;
+import com.xpn.xwiki.XWikiException;
+import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.doc.XWikiLock;
+
+public class LockAction extends XWikiAction {
+	public boolean action(XWikiContext context) throws XWikiException {
+        XWiki xwiki = context.getWiki();
+        XWikiRequest request = context.getRequest();
+        XWikiResponse response = context.getResponse();
+        XWikiDocument doc = context.getDoc();
+        XWikiForm form = context.getForm();
+
+        String language = ((EditForm)form).getLanguage();
+        String defaultLanguage = ((EditForm)form).getDefaultLanguage();
+        XWikiDocument tdoc;
+
+        if ((language==null)||(language.equals(""))||(language.equals("default"))||(language.equals(doc.getDefaultLanguage()))) {
+            // Need to save parent and defaultLanguage if they have changed
+            tdoc = doc;
+        } else {
+            tdoc = doc.getTranslatedDocument(language, context);
+            if (tdoc == doc) {
+                tdoc = new XWikiDocument(doc.getWeb(), doc.getName());
+                tdoc.setLanguage(language);
+                tdoc.setStore(doc.getStore());
+            }
+            tdoc.setTranslation(1);
+        }
+
+        String username = context.getUser();
+        XWikiLock lock = tdoc.getLock(context);
+        if ("inline".equals(request.get("action")))
+            doc.setLock(username, context);
+        else
+            tdoc.setLock(username, context);
+
+        // forward to view
+        String redirect = Utils.getRedirect("view", context);
+        sendRedirect(response, redirect);
+        return false;
+	}
+}

Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/web/XWikiPortlet.java
===================================================================
--- xwiki/trunk/src/main/java/com/xpn/xwiki/web/XWikiPortlet.java	2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/XWikiPortlet.java	2006-02-27 11:34:32 UTC (rev 944)
@@ -154,6 +154,10 @@
 
 				if (action.equals("save"))
 					form = new EditForm();
+                else if (action.equals("lock"))
+                    form = new EditForm();
+                else if (action.equals("cancel"))
+                    form = new EditForm();
                 else if (action.equals("rollback"))
                     form = new RollbackForm();
 				else if (action.equals("objectadd"))
@@ -179,6 +183,9 @@
                 else if (action.equals("cancel")) {
                     (new CancelAction()).action(context);
                 }
+                else if (action.equals("lock")) {
+                    (new Lockction()).action(context);
+                }
 				else if (action.equals("delete")) {
                     (new DeleteAction()).action(context);
 				}

Modified: xwiki/trunk/src/main/web/WEB-INF/struts-config.xml
===================================================================
--- xwiki/trunk/src/main/web/WEB-INF/struts-config.xml	2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/WEB-INF/struts-config.xml	2006-02-27 11:34:32 UTC (rev 944)
@@ -30,6 +30,8 @@
                  type="com.xpn.xwiki.web.PrepareEditForm"/>
     <form-bean name="inline"
                  type="com.xpn.xwiki.web.PrepareEditForm"/>
+    <form-bean name="lock"
+                   type="com.xpn.xwiki.web.EditForm"/>
     <form-bean name="preview"
                type="com.xpn.xwiki.web.EditForm"/>
     <form-bean name="save"
@@ -300,6 +302,12 @@
             scope="request">
     </action>
 
+    <action path="/lock/"
+            type="com.xpn.xwiki.web.LockAction"
+            name="lock"
+            score="request">
+    </action>
+
   </action-mappings>
 
   <controller processorClass="com.xpn.xwiki.web.XWikiRequestProcessor"

Modified: xwiki/trunk/src/main/web/templates/edit.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/edit.vm	2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/edit.vm	2006-02-27 11:34:32 UTC (rev 944)
@@ -18,6 +18,23 @@
 #else
 #set($colsclass = "hide-both")
 #end
+        
+<script type="text/javascript">
+   function callLockAction(){
+        if($doc.getURL("save")) {
+            var surl = "$doc.getExternalURL("lockaction")";
+            var myAjax = new Ajax.Request(
+                 surl,
+                 {
+                     method: 'get',
+                     parameters: "",
+                     asynchronous: false
+                 });
+
+        }
+   }
+
+</script>
 <div id="xwikieditcontent" class="large">
        <div id="columns">
         <div class="cols-wrapper">
@@ -25,7 +42,7 @@
             <div id="col-a">
               <div class="main-content">
 #set($xredirect=$!request.getParameter("xredirect"))
-<form id="edit" method="post" action="$doc.getURL("preview")">
+<form id="edit" method="post" action="$doc.getURL("preview")" >
 <p>
 <input type="hidden" name="template" value="$!request.template" />
 <input type="hidden" name="xredirect" value="$!xredirect" />

Modified: xwiki/trunk/src/main/web/templates/editclass.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/editclass.vm	2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/editclass.vm	2006-02-27 11:34:32 UTC (rev 944)
@@ -19,7 +19,7 @@
           <div class="float-wrapper">
             <div id="col-a">
               <div class="main-content">
-<form id="propupdate" method="post" action="$doc.getURL("propupdate")">
+<form id="propupdate" method="post" action="$doc.getURL("propupdate")" onsubmit="cancelCancelEdit()">
 <input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
 <div id="intro">
 $msg.get("welcometoclasseditor")
@@ -71,7 +71,7 @@
 #end
 <br />
 <h3>$msg.get("addproperty")</h3>
-<form id="propadd" method="post" action="$doc.getURL("propadd")">
+<form id="propadd" method="post" action="$doc.getURL("propadd")" onsubmit="cancelCancelEdit()">
 <p style="text-align: center">
 <input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
 $msg.get("propname"): <input type="text" name="propname" value="" size="20" />

Modified: xwiki/trunk/src/main/web/templates/editobject.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/editobject.vm	2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/editobject.vm	2006-02-27 11:34:32 UTC (rev 944)
@@ -22,7 +22,7 @@
 <div id="intro">
 $msg.get("welcometoobjecteditor")
 </div>
-<form id="update" method="post" action="$doc.getURL("save")">
+<form id="update" method="post" action="$doc.getURL("save")" onsubmit="cancelCancelEdit()">
 <p>
 <input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
 #set ( $first = 1)
@@ -91,7 +91,7 @@
 <br /><br />
 #end
 <h3>$msg.get("addobject")</h3>
-<form id="objectadd" method="post" action="$doc.getURL("objectadd")">
+<form id="objectadd" method="post" action="$doc.getURL("objectadd")" onsubmit="cancelCancelEdit()">
 <p style="text-align: center">
 <input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
 <select name="classname" size="1">
@@ -104,7 +104,7 @@
 </p>
 </form>
 #if($xwiki.isVirtual())
-<form id="objectadd2" method="post" action="$doc.getURL("objectadd")">
+<form id="objectadd2" method="post" action="$doc.getURL("objectadd")" onsubmit="cancelCancelEdit()">
 <p style="text-align: center">
 <input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
 <input type="text" name="classname" size="20" />

Modified: xwiki/trunk/src/main/web/templates/editprefs.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/editprefs.vm	2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/editprefs.vm	2006-02-27 11:34:32 UTC (rev 944)
@@ -13,6 +13,7 @@
 // -->
 </script>
 #set($obj = $doc.getObject("XWiki.XWikiPreferences"))
+
 #if(!$obj)
 <form id="objectadd" method="post" action="$doc.getURL("objectadd")">
 <p>
@@ -63,7 +64,7 @@
           <div class="float-wrapper">
             <div id="col-a">
               <div class="main-content">
-<form id="update" method="post" action="$doc.getURL("save")">
+<form id="update" method="post" action="$doc.getURL("save")" onsubmit="cancelCancelEdit()">
 <p>
 <input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
 </p>
@@ -95,7 +96,7 @@
 <h3>$msg.get("preferences")</h3>
 <br />
 <p style="text-align: center">
-<input type="button" value="$msg.get("saveprefs")" onclick="document.forms.update.submit()" />
+<input type="button" value="$msg.get("saveprefs")" onclick="cancelCancelEdit(); document.forms.update.submit()" />
 </p>
 <br />
 <h3>$msg.get("sections")</h3>

Modified: xwiki/trunk/src/main/web/templates/editrights.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/editrights.vm	2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/editrights.vm	2006-02-27 11:34:32 UTC (rev 944)
@@ -28,7 +28,7 @@
 $msg.get("welcometorightseditor")
 </div>
 
-<form id="update" method="post" action="$doc.getURL("save")">
+<form id="update" method="post" action="$doc.getURL("save")" onsubmit="cancelCancelEdit()">
 <p>
 <input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
 #set ( $first = 1)
@@ -87,7 +87,7 @@
 #end
 <br /><br />
 <h3>$msg.get("addrightentry")</h3>
-<form id="objectadd" method="post" action="$doc.getURL("objectadd")">
+<form id="objectadd" method="post" action="$doc.getURL("objectadd")" onsubmit="cancelCancelEdit()">
 <p>
 <input type="hidden" name="xredirect" value="$xwiki.getFormEncoded($redirect)" />
 <input type="hidden" name="classname" value="$classname" />

Modified: xwiki/trunk/src/main/web/templates/httpheader.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/httpheader.vm	2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/httpheader.vm	2006-02-27 11:34:32 UTC (rev 944)
@@ -16,9 +16,65 @@
 $!xwiki.getWebPreference("meta")
 #template("stylesheets.vm")
 <script type="text/javascript" src="$xwiki.getSkinFile("skin.js")"></script>
+<script type="text/javascript" src="$xwiki.getSkinFile("prototype.js")"></script>
 <script type="text/javascript" src="$xwiki.getSkinFile("xwiki.js")"></script>
 </head>
+#if(($context.action=="inline")||($context.action=="edit"))
+<script type="text/javascript">
+ var cancelEditNextOnunload;
+ var cancelCancelEditFlag = true;
+ var  lockEditFlag = false;
+
+ function cancelEditResponse(){
+ }
+
+ function cancelEdit(){
+     if (cancelCancelEditFlag) {
+       var surl = "$doc.getExternalURL("cancel")";
+       var myAjax = new Ajax.Request(
+                 surl,
+                 {
+                     method: 'get',
+                     parameters: "",
+                     asynchronous: false
+                 });
+        cancelCancelEditFlag = false;
+     }
+     if (cancelEditNextOnunload!=null)
+           cancelEditNextOnunload();
+ }
+
+ function lockEdit(){
+    if (lockEditFlag==false) {
+#if($context.action=="inline")
+      var surl = "$doc.getExternalURL("lock")?action=inline&language=${request.language}";
+#else
+      var surl = "$doc.getExternalURL("lock")?language=${request.language}";
+#end
+      var myAjax = new Ajax.Request(
+                surl,
+                {
+                    method: 'get',
+                    parameters: "",
+                    asynchronous: false
+                });
+       lockEditFlag = false;
+    }
+ }
+
+ function prepareCancelEdit() {
+     cancelEditNextOnunload = document.onunload;
+     document.onunload = cancelEdit;
+     lockEdit();
+ }
+ function cancelCancelEdit() {
+     cancelCancelEditFlag = false;
+ }
+</script>
+<body onUnload="cancelEdit()" onLoad="prepareCancelEdit()">
+#else
 <body>
+#end
 #else
 #template("stylesheets2.vm")
 <script type="text/javascript" src="$xwiki.getSkinFile("skin.js")"></script>

Modified: xwiki/trunk/src/main/web/templates/viewheader.vm
===================================================================
--- xwiki/trunk/src/main/web/templates/viewheader.vm	2006-02-27 11:07:54 UTC (rev 943)
+++ xwiki/trunk/src/main/web/templates/viewheader.vm	2006-02-27 11:34:32 UTC (rev 944)
@@ -113,25 +113,25 @@
           #end
           #if (!$isReadOnly)
             #xwikiitem($doc.getURL("inline") "editinline")
-            #xwikiitem($doc.getURL("edit", "xpage=editobject") "editobject")
+            #xwikiitem($doc.getURL("inline", "xpage=editobject") "editobject")
           #end
           #if(($hasadmin||($context.user.equals($doc.creator))) && !$isReadOnly)
             #xwikiitem($doc.getURL("delete") "delete")
           #end
           #if (!$isReadOnly)
             #xwikiitem($doc.getURL("chartwizard") "chartwizard")
-            #xwikiitem($doc.getURL("edit", "xpage=editrights") "editrights")
+            #xwikiitem($doc.getURL("inline", "xpage=editrights") "editrights")
           #end
         #end
 ## Admin section
         #if($hasadmin && !$isReadOnly)
           <div class="xwikimenutitle">$msg.get("admin")</div>
           #xwikiitem($xwiki.getURL("${doc.web}.WebHome", "view") "space")
-          #xwikiitem($xwiki.getURL("${doc.web}.WebPreferences", "edit", "xpage=editprefs") "webprefs")
-          #xwikiitem($xwiki.getURL("${doc.web}.WebPreferences", "edit" , "xpage=editrights&global=1") "webrights")
-          #xwikiitem($xwiki.getURL("XWiki.XWikiPreferences", "edit", "xpage=editprefs") "xwikiprefs")
-          #xwikiitem($xwiki.getURL("XWiki.XWikiPreferences", "edit", "xpage=editrights&global=1") "xwikirights")
-          #xwikiitem($doc.getURL("edit", "xpage=editclass") "classeditor")
+          #xwikiitem($xwiki.getURL("${doc.web}.WebPreferences", "inline", "xpage=editprefs") "webprefs")
+          #xwikiitem($xwiki.getURL("${doc.web}.WebPreferences", "inline" , "xpage=editrights&global=1") "webrights")
+          #xwikiitem($xwiki.getURL("XWiki.XWikiPreferences", "inline", "xpage=editprefs") "xwikiprefs")
+          #xwikiitem($xwiki.getURL("XWiki.XWikiPreferences", "inline", "xpage=editrights&global=1") "xwikirights")
+          #xwikiitem($doc.getURL("inline", "xpage=editclass") "classeditor")
         #end
 ## Help section
         <div class="xwikimenutitle">$msg.get("help")</div>





More information about the Xwiki-notifications mailing list