web commit by http://mem.myopenid.com/: Add implementation code
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Sat, 5 May 2007 16:17:10 +0000 (16:17 +0000)
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Sat, 5 May 2007 16:17:10 +0000 (16:17 +0000)
doc/todo/supporting_comments_via_disussion_pages.mdwn

index e1f4f278675e58e95cf3db5c11e0cb6d0d04b8df..95243d6059b63a1bbb6efce7f0043a35db5e21fb 100644 (file)
@@ -58,69 +58,93 @@ content to the old one.
 
 >> Figured it out.  Can you comment on the code below?  Thanks. -- [[MarceloMagallon]]
 
+So, I have some code, included below.  For some reason that I don't quite get it's not updating the wiki page after a submit.  Maybe it's something silly on my side...
+
+What I ended up doing is write something like this to the page:
+
+    [[blogcomment from="""Username""" timestamp="""12345""" subject="""Some text""" text="""the text of the comment"""]]
+
+Each comment is processed to a <div> with a <dt> and the text inside it.  In this way the comments can be styled using CSS.
+
+-- [[MarceloMagallon]]
+
+# Code
+
+    #!/usr/bin/perl
+    package IkiWiki::Plugin::comments;
+
+    use warnings;
+    use strict;
+    use IkiWiki '1.02';
+
+    sub import { #{{{
+        hook(type => "formbuilder_setup", id => "comments",
+            call => \&formbuilder_setup);
+        hook(type => "preprocess", id => "blogcomment",
+            call => \&preprocess);  
+    } # }}}
+
     sub formbuilder_setup (@) { #{{{
         my %params=@_;
         my $cgi = $params{cgi};
-        my $form = $params{form};
+        my $form = $params{form};   
         my $session = $params{session};
 
+        my ($page)=$form->field('page');
+        $page=IkiWiki::titlepage(IkiWiki::possibly_foolish_untaint($page));
+
         # XXX: This needs something to make it blog specific
-        unless ($cgi->param('page') =~ m{/discussion$} &&
+        unless ($page =~ m{/discussion$} &&
                 $cgi->param('do') eq 'edit' &&
-                ! defined $form->{title})
+                ! exists $form->{title})
         {
             return;
         }
 
-        $form->template(IkiWiki::template_file("makeblogcomment.tmpl"));
-        $form->field(name => "blogcomment", type => "textarea", rows => 20,
+        if (! $form->submitted)
+        {
+            $form->template(IkiWiki::template_file("makeblogcomment.tmpl"));
+            $form->field(name => "blogcomment", type => "textarea", rows => 20,
                 cols => 80);
+            return;
+        }
 
-        my ($page)=$form->field('page');
         my $content="";
         if (exists $pagesources{$page}) {
             $content=readfile(srcfile($pagesources{$page}));
             $content.="\n\n";
         }
-        $content.="----\n\n";
-        my $name=$session->param('name');
-        $name||="Anonymous";
-        $content.=sprintf(gettext("From: %s\n\n"), $name);
-        $content.=sprintf(gettext("Date: %s\n\n"), scalar(localtime));
-        if (defined $cgi->param('comments'))
-        {
-            $content.=sprintf(gettext("Subject: %s\n\n"),
-                    $cgi->param('comments'));
-        }
-        $content.=$cgi->param('blogcomment');
+        my $name=defined $session->param('name') ?
+            $session->param('name') : gettext('Anonymous');
+        my $timestamp=time;
+        my $subject=defined $cgi->param('comments') ?
+            $cgi->param('comments') : '';
+        my $comment=$cgi->param('blogcomment');
+
+        $content.=qq{[[blogcomment from="""$name""" timestamp="""$timestamp""" subject="""$subject""" text="""$comment"""]]\n\n};
         $content=~s/\n/\r\n/g;
         $form->field(name => "editcontent", value => $content, force => 1);
     } # }}}
 
-The above produces a page that looks like this:
-
-    From: Marcelo
-    
-    Date: Fri Apr 27 21:16:27 2007
-    
-    Subject: Pi
-    
-    3.14
-
-    ----
-
-    From: Marcelo
-
-    Date: Fri Apr 27 21:20:21 2007
-
-    Subject: 
-
-    A comment...
+    sub preprocess (@) { #{{{
+        my %params=@_;
 
-Questions:
+        my ($text, $date, $from, $subject, $r);
 
- * Notice how this assumes that the page it's writing to is in mdwn format.
+        $text=IkiWiki::preprocess($params{page}, $params{destpage},
+                IkiWiki::filter($params{page}, $params{text}));
+        $from=exists $params{from} ? $params{from} : gettext("Anonymous");
+        $date=localtime($params{timestamp}) if exists $params{timestamp};
+        $subject=$params{subject} if exists $params{subject};
 
- * What to do about the bit marked XXX?
+        $r = qq{<div class="blogcomment"><dl>\n};
+        $r .= '<dt>' . gettext("From") . "</dt><dd>$from</dd>\n" if defined $from;
+        $r .= '<dt>' . gettext("Date") . "</dt><dd>$date</dd>\n" if defined $date;
+        $r .= '<dt>' . gettext("Subject") . "</dt><dd>$subject</dd>\n"
+            if defined $subject;
+        $r .= "</dl>\n" . $text . "</div>\n";
 
- * What about special formatting?  Is mdwn enough?
+        return $r;
+    } # }}}
+    
+    1;
\ No newline at end of file