work on postal-accept filter to add message to wiki
authorDavid Bremner <bremner@unb.ca>
Sun, 31 Aug 2008 19:41:15 +0000 (16:41 -0300)
committerDavid Bremner <bremner@unb.ca>
Mon, 1 Sep 2008 00:07:49 +0000 (21:07 -0300)
filters/postal-accept.pl
test/in/test.mdwn [new file with mode: 0644]
test/test.setup

index ebd2627d51a5ba38e8934f35a190d7fcafae702e..135635ccf4033a7b62d7931590741a6c60b96419 100644 (file)
@@ -1,71 +1,63 @@
 #!/usr/bin/perl
 
-use Email::Folder;
+# Take message on stdin, write to appropiate comment folder, 
+# update wiki
+
 use Email::LocalDelivery;
+use Email::Filter;
 
 use Convert::YText qw(decode_ytext encode_ytext);
 
 # we need at least version 2.54 of IkiWiki for the new config api
 BEGIN { require IkiWiki; die unless ($IkiWiki::version >= 2.54) }
 
+use IkiWiki;
 use IkiWiki::Setup;
 use Getopt::Long;
 use Carp;
 
+my $folder_ext=".mbox";
+
 my $config_file=undef;
 
 GetOptions('config=s'=>\$config_file);
 
 die "configuration file is mandatory" unless ($config_file);
 
-my %config=IkiWiki::Setup::load($config_file);
-
-my $queue=$config{queue} || croak("missing queue location");
+%config=IkiWiki::defaultconfig();
 
-my $folder=Email::Folder->new($path,reader=>'Email::Folder::maildir') 
-    || croak("mailbox could not be opened");
+IkiWiki::Setup::load($config_file);
 
-for my $messages  ($folder->messages){
+$message=Email::Filter->new();
 
-    my $to=$message->to;
-    if ($to =~ m/$prefix($Convert::YText::valid_rex)/){
-       my $page=decode_ytext($1);
-       
-       # sanity check the page path
-       
-       # check if comments folder exists, create if needed
-
-       # write the message to the folder
+my $to=$message->to;
+if ($to =~ m/$prefix($Convert::YText::valid_rex)/){
+    my $page=decode_ytext($1);
+    
+    die("page ".$page." does not exist") if !($pagesources{$page});
+    
+    my $comments_folder=$page."/comments".$folder_ext;
 
-       $msg_file= $comment_folder->write($message);
+    # write the message to the comment
 
-       # update vcs, copied from Ikiwiki::Plugins::attachment
+    my ($delivered) = Email::LocalDeliver($config{srcdir}."/".$comments_folder);
     
-       if ($config{rcs}) {
-           IkiWiki::rcs_add($filename);
-           IkiWiki::disable_commit_hook();
-           IkiWiki::rcs_commit($filename, gettext("attachment upload"),
-                               IkiWiki::rcs_prepedit($filename),
-                               $session->param("name"), $ENV{REMOTE_ADDR});
-           IkiWiki::enable_commit_hook();
-           IkiWiki::rcs_update();
-       }
-
-       # tag for deletion
-       
-       push (@must_die, $message->message-id);
-       
-       $folder->delete($message);
-
+    die ("delivery failed") if (!defined ($delivered));
+    
+    # update vcs, copied from Ikiwiki::Plugins::attachment
+    
+    if ($config{rcs}) {
+       IkiWiki::rcs_add($delivered);
+       IkiWiki::disable_commit_hook();
+       IkiWiki::rcs_commit($delivered, gettext("postal delivery"),
+                           IkiWiki::rcs_prepedit($delivered));
+       IkiWiki::enable_commit_hook();
+       IkiWiki::rcs_update();
     }
 
     
     # refresh wiki
     IkiWiki::refresh();
     IkiWiki::saveindex();
-    # make regex for message-id
-
-    # called delete_message from Email::Delete
-}
+} 
 
diff --git a/test/in/test.mdwn b/test/in/test.mdwn
new file mode 100644 (file)
index 0000000..d515704
--- /dev/null
@@ -0,0 +1 @@
+this is page called test
index 56a4a8b122f5f85dc0aea6c7053f41615dcc7682..96aec15d797f0f16057ce88daea89f88b1781524 100644 (file)
@@ -139,7 +139,7 @@ use IkiWiki::Setup::Standard {
        #multimarkdown => 1,
 
        # To add plugins, list them here.
-           add_plugins=>[qw{mailbox}],
+           add_plugins=>[qw{mailbox postal}],
        #add_plugins => [qw{goodstuff search wikitext camelcase
        #                   htmltidy fortune sidebar map rst anonok}],
        # If you want to disable any of the default plugins, list them here.