changeset 150:4a882ba147e4

Updated to allow Ajax to be used for comment submission.
author Steve Kemp <steve@steve.org.uk>
date Mon, 31 Dec 2007 00:01:51 +0000
parents 88d1f5caebd7
children 0dc1ede3cd09
files cgi-bin/comments.cgi themes/blog.steve.org.uk/ajax.js themes/blog.steve.org.uk/comment-form.inc themes/blog.steve.org.uk/entry.template
diffstat 4 files changed, 84 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/cgi-bin/comments.cgi	Sun Dec 30 01:37:27 2007 +0000
+++ b/cgi-bin/comments.cgi	Mon Dec 31 00:01:51 2007 +0000
@@ -44,11 +44,9 @@
 #
 #  The notification addresses - leave blank to disable
 #
-# my $TO   = 'weblog@steve.org.uk';
-# my $FROM = 'weblog@steve.org.uk';
+my $TO   = 'weblog@steve.org.uk';
+my $FROM = 'weblog@steve.org.uk';
 #
-my $TO   = '';
-my $FROM = '';
 
 
 
@@ -63,7 +61,7 @@
 my $body = $cgi->param('body') || undef;
 my $id   = $cgi->param('id')   || undef;
 my $cap  = $cgi->param('captcha') || undef;
-
+my $ajax = $cgi->param( "ajax" ) || 0;
 
 #
 #  If any are missing just redirect back to the blog homepage.
@@ -73,7 +71,15 @@
      !defined( $body )  || !length( $body ) ||
      !defined( $id )    || !length( $id ) )
 {
-    print "Location: http://" . $ENV{'HTTP_HOST'} . "/\n\n";
+    if ( $ajax )
+    {
+        print "Content-type: text/html\n\n";
+        print "Missing fields.\n";
+    }
+    else
+    {
+        print "Location: http://" . $ENV{'HTTP_HOST'} . "/\n\n";
+    }
     exit;
 }
 
@@ -82,7 +88,15 @@
 #
 if ( defined( $cap ) && length( $cap ) )
 {
-    print "Location: http://" . $ENV{'HTTP_HOST'} . "/\n\n";
+    if ( $ajax )
+    {
+        print "Content-type: text/html\n\n";
+        print "Missing fields.\n";
+    }
+    else
+    {
+        print "Location: http://" . $ENV{'HTTP_HOST'} . "/\n\n";
+    }
     exit;
 }
 
@@ -134,7 +148,7 @@
 #
 if ( length($TO) && length($FROM) )
 {
-    open  ( SENDMAIL, "|/usr/lib/sendmail -t");
+    open  ( SENDMAIL, "|/usr/lib/sendmail -t -f $FROM");
     print SENDMAIL "To: $TO\n";
     print SENDMAIL "From: $FROM\n";
     print SENDMAIL "Subject: New Comment [$id]\n";
@@ -143,12 +157,21 @@
     close ( SENDMAIL );
 }
 
-
 #
 #  Now show the user the thanks message..
 #
+if ( $cgi->param( "ajax" ) )
+{
+    print <<EOF;
 
-print <<EOF;
+<p>Thanks for your comment, it will be made live when the queue is moderated next.</p>
+
+EOF
+    exit;
+}
+else
+{
+    print <<EOF;
 <html>
  <head>
   <title>Thanks For Your Comment</title>
@@ -160,4 +183,4 @@
  </body>
 </html>
 EOF
-
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/themes/blog.steve.org.uk/ajax.js	Mon Dec 31 00:01:51 2007 +0000
@@ -0,0 +1,44 @@
+
+function submitAjax() 
+{
+   var xhr;
+   try {  xhr = new ActiveXObject('Msxml2.XMLHTTP');   }
+   catch (e)
+   {
+        try {   xhr = new ActiveXObject('Microsoft.XMLHTTP');    }
+        catch (e2)
+        {
+          try {  xhr = new XMLHttpRequest();     }
+          catch (e3) {  xhr = false;   }
+        }
+     }
+
+    xhr.onreadystatechange  = function()
+    {
+         if(xhr.readyState  == 4)
+         {
+              if(xhr.status  == 200)
+              {
+                  var o = document.getElementById( "output" );
+                  o.innerHTML = xhr.responseText;
+              }
+              else
+              {
+                  var o = document.getElementById( "output" );
+                  o.innerHTML = "Failed HTTP code " + xhr.status + " " +  xhr.responseText;
+              }
+         }
+    };
+
+    data = 'ajax=1';
+    data = data + '&id=' + escape(document.forms[0].id.value );
+    data = data + '&captcha=' + escape( document.forms[0].captcha.value );
+    data = data + '&id=' + escape(document.forms[0].id.value );
+    data = data + '&captcha=' + escape( document.forms[0].captcha.value );
+    data = data + '&name=' + escape( document.forms[0].name.value );
+    data = data + '&mail=' + escape( document.forms[0].mail.value );
+    data = data + '&body=' + escape( document.forms[0].body.value );
+    xhr.open("POST", "/cgi-bin/comments.cgi", true);
+    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+    xhr.send(data);
+}
--- a/themes/blog.steve.org.uk/comment-form.inc	Sun Dec 30 01:37:27 2007 +0000
+++ b/themes/blog.steve.org.uk/comment-form.inc	Mon Dec 31 00:01:51 2007 +0000
@@ -1,6 +1,7 @@
 <!-- tmpl_if name='comments_enabled' -->
 <h3>Add A Comment</h3>
 <blockquote>
+<div id="output">
 <form action="/cgi-bin/comments.cgi" method="post">
 <input type="hidden" name="id" value="<!-- tmpl_var name='link' escape='html' -->">
 <input type="hidden" name="captcha" value="">
@@ -12,9 +13,10 @@
 <tr><td colspan="2">Your Comment<br />
 <textarea name="body" rows="10" cols="60">
 </textarea></td></tr>
-<tr><td></td><td align="right"><input type="submit" name="submit" value="Post Comment"></td></tr>
+<tr><td></td><td align="right"><input type="submit" name="submit" value="Post Comment" onClick="submitAjax(); return false;"></td></tr>
 </table>
 </form>
 <p>Your submission will be ignored if any field is left blank.  But your email address will not be displayed.</p>
+</div>
 </blockquote>
 <!-- /tmpl_if -->
--- a/themes/blog.steve.org.uk/entry.template	Sun Dec 30 01:37:27 2007 +0000
+++ b/themes/blog.steve.org.uk/entry.template	Mon Dec 31 00:01:51 2007 +0000
@@ -6,6 +6,9 @@
   <link rel="stylesheet" type="text/css" media="screen" href="<!-- tmpl_var name='top' -->style.css">
   <link rel="stylesheet" href="<!-- tmpl_var name='top' -->bubbles.css" type="text/css" media="screen" charset="utf-8" />
   <script type="text/JavaScript" src="<!-- tmpl_var name='top' -->rounded_corners.inc.js"></script>
+<!-- tmpl_if name='comments_enabled' -->
+  <script type="text/JavaScript" src="<!-- tmpl_var name='top' -->ajax.js"></script>
+<!-- /tmpl_if -->
   <script type="text/JavaScript">
 	  window.onload = function() {
 	      settings = {