--- /usr/share/perl5/OpenGuides.pm	2006-06-14 15:49:07.000000000 +0100
+++ OpenGuides.pm	2006-06-14 18:13:21.000000000 +0100
@@ -169,6 +169,24 @@
 
     my %node_data = $wiki->retrieve_node( %criteria );
 
+    unless ($version) {
+        my %metadata = %{$node_data{metadata}};
+        if ($metadata{moderated}[0] == 1) {
+            my $tryversion = $current_data{version};
+            LOOP: until ($tryversion == 0) {
+                $tryversion--;
+                my %trycriteria;
+                $trycriteria{version} = $tryversion;
+                $trycriteria{name} = $id;
+                %node_data = $wiki->retrieve_node( %trycriteria );
+                my %newmetadata = %{$node_data{metadata}};
+                if ($newmetadata{moderated}[0] == 0) {
+                    last LOOP;
+                }
+            }
+        }
+    }
+        
     # Fixes passing undefined values to Text::Wikiformat if node doesn't exist.
     my $raw        = $node_data{content} || " ";
     my $content    = $wiki->format($raw);
@@ -241,6 +259,7 @@
         my @recent = $wiki->list_recent_changes(
             last_n_changes => 10,
             metadata_was   => { edit_type => "Normal edit" },
+            metadata_wasnt => { moderated => 1 }
         );
         @recent = map {
                           {
@@ -269,6 +288,9 @@
                                                 template      => "node.tt",
                                                 tt_vars       => \%tt_vars,
                                             );
+        if ($metadata{moderated}[0] == 1) {
+            $output = "Content-Type: text/html\n\nThis revision has not been approved yet, sorry.";
+        }
         return $output if $return_output;
         print $output;
     }
@@ -300,6 +322,7 @@
         my %criteria = ( since => $since );   
         $criteria{metadata_was} = { edit_type => "Normal edit" }
           unless $minor_edits;
+        $criteria{metadata_wasnt} = { moderated => 1 };
         my @rc = $self->{wiki}->list_recent_changes( %criteria );
  
         @rc = map {
@@ -324,6 +347,7 @@
             my %criteria = ( between_days => $days );
             $criteria{metadata_was} = { edit_type => "Normal edit" }
               unless $minor_edits;
+            $criteria{metadata_wasnt} = { moderated => 1 };
             my @rc = $self->{wiki}->list_recent_changes( %criteria );
 
             @rc = map {
@@ -703,6 +727,7 @@
         $filter{username} = $username if $username;
         $filter{category} = $category if $category;
         $filter{locale}   = $locale   if $locale;
+        $filter{moderated} = 0;
         if ( scalar keys %filter ) {
             $criteria{filter_on_metadata} = \%filter;
         }
@@ -965,7 +990,8 @@
                                      {
                                          username => "Auto Create",
                                          comment  => "Auto created $lctype stub page",
-                                         category => $category
+                                         category => $category,
+                                         moderated => 1
                                      }
                                  );
             }
@@ -982,6 +1008,18 @@
                             ? 1
                             : 0;
 
+    # Require moderation by default
+    $metadata{moderated} = 1;
+    # At this point, email an admin cos they need to approve something.
+    open MAIL, "|/usr/sbin/sendmail -t -oi" or die $!;
+    my $modurl = $self->config->script_url . "/moderate.cgi";
+    print MAIL "From: dom\@earth.li\nTo: dom\@earth.li\n";
+    print MAIL "Subject: OpenGuides approval\n\n";
+    print MAIL "Please visit $modurl to approve an edit for:\n\n";
+    print MAIL $node . "\n\n";
+    print MAIL "Thanks,\nYour ugly hack.\n";
+    close MAIL;
+
     my $written = $wiki->write_node($node, $content, $checksum, \%metadata );
 
     if ($written) {

