move check_canedit, check_content to IkiWiki library from editpage
authorJoey Hess <joey@gnu.kitenet.net>
Thu, 12 Feb 2009 21:31:05 +0000 (16:31 -0500)
committerJoey Hess <joey@gnu.kitenet.net>
Thu, 12 Feb 2009 21:33:35 +0000 (16:33 -0500)
It no longer makes sense to keep these functions in editpage, because
serveral plugins now exist that use them, and users may want to disable
editpage, while leaving those plugins enabled.

Most notably, comments uses both functions, and it's entirely appropriate
to disable editpage but still want to have comments enabled.

Less likely, attachments, rename, and remove all use check_canedit -- but
it would be unusual indeed to want to use these w/o editpage.

IkiWiki.pm
IkiWiki/Plugin/editpage.pm
debian/changelog

index 66fea4369b1326903f0bce26ed019a288e12788e..ce1ceb3517431440da8aa882ecea7a7dff83a5ef 100644 (file)
@@ -1293,6 +1293,70 @@ sub indexlink () {
        return "<a href=\"$config{url}\">$config{wikiname}</a>";
 }
 
+sub check_canedit ($$$;$) {
+       my $page=shift;
+       my $q=shift;
+       my $session=shift;
+       my $nonfatal=shift;
+       
+       my $canedit;
+       run_hooks(canedit => sub {
+               return if defined $canedit;
+               my $ret=shift->($page, $q, $session);
+               if (defined $ret) {
+                       if ($ret eq "") {
+                               $canedit=1;
+                       }
+                       elsif (ref $ret eq 'CODE') {
+                               $ret->() unless $nonfatal;
+                               $canedit=0;
+                       }
+                       elsif (defined $ret) {
+                               error($ret) unless $nonfatal;
+                               $canedit=0;
+                       }
+               }
+       });
+       return defined $canedit ? $canedit : 1;
+}
+
+sub check_content (@) {
+       my %params=@_;
+       
+       return 1 if ! exists $hooks{checkcontent}; # optimisation
+
+       if (exists $pagesources{$params{page}}) {
+               my @diff;
+               my %old=map { $_ => 1 }
+                       split("\n", readfile(srcfile($pagesources{$params{page}})));
+               foreach my $line (split("\n", $params{content})) {
+                       push @diff, $line if ! exists $old{$_};
+               }
+               $params{content}=join("\n", @diff);
+       }
+
+       my $ok;
+       run_hooks(checkcontent => sub {
+               return if defined $ok;
+               my $ret=shift->(%params);
+               if (defined $ret) {
+                       if ($ret eq "") {
+                               $ok=1;
+                       }
+                       elsif (ref $ret eq 'CODE') {
+                               $ret->() unless $params{nonfatal};
+                               $ok=0;
+                       }
+                       elsif (defined $ret) {
+                               error($ret) unless $params{nonfatal};
+                               $ok=0;
+                       }
+               }
+
+       });
+       return defined $ok ? $ok : 1;
+}
+
 my $wikilock;
 
 sub lockwiki () {
index c206d96a44f521200861271bd2256a03b49ccfa2..0068a6b118cd15ca7e110a51fdf81fa1ab313526 100644 (file)
@@ -51,73 +51,9 @@ sub refresh () {
 
 # Back to ikiwiki namespace for the rest, this code is very much
 # internal to ikiwiki even though it's separated into a plugin,
-# and other plugins use the functions below.
+# and other plugins use the function below.
 package IkiWiki;
 
-sub check_canedit ($$$;$) {
-       my $page=shift;
-       my $q=shift;
-       my $session=shift;
-       my $nonfatal=shift;
-       
-       my $canedit;
-       run_hooks(canedit => sub {
-               return if defined $canedit;
-               my $ret=shift->($page, $q, $session);
-               if (defined $ret) {
-                       if ($ret eq "") {
-                               $canedit=1;
-                       }
-                       elsif (ref $ret eq 'CODE') {
-                               $ret->() unless $nonfatal;
-                               $canedit=0;
-                       }
-                       elsif (defined $ret) {
-                               error($ret) unless $nonfatal;
-                               $canedit=0;
-                       }
-               }
-       });
-       return defined $canedit ? $canedit : 1;
-}
-
-sub check_content (@) {
-       my %params=@_;
-       
-       return 1 if ! exists $hooks{checkcontent}; # optimisation
-
-       if (exists $pagesources{$params{page}}) {
-               my @diff;
-               my %old=map { $_ => 1 }
-                       split("\n", readfile(srcfile($pagesources{$params{page}})));
-               foreach my $line (split("\n", $params{content})) {
-                       push @diff, $line if ! exists $old{$_};
-               }
-               $params{content}=join("\n", @diff);
-       }
-
-       my $ok;
-       run_hooks(checkcontent => sub {
-               return if defined $ok;
-               my $ret=shift->(%params);
-               if (defined $ret) {
-                       if ($ret eq "") {
-                               $ok=1;
-                       }
-                       elsif (ref $ret eq 'CODE') {
-                               $ret->() unless $params{nonfatal};
-                               $ok=0;
-                       }
-                       elsif (defined $ret) {
-                               error($ret) unless $params{nonfatal};
-                               $ok=0;
-                       }
-               }
-
-       });
-       return defined $ok ? $ok : 1;
-}
-
 sub cgi_editpage ($$) {
        my $q=shift;
        my $session=shift;
index 7467508f684baa30d6248a1cf526bff62c695d21..8da3f8849bdefed4356d86190bec484cdffaffdb 100644 (file)
@@ -13,6 +13,8 @@ ikiwiki (3.04) UNRELEASED; urgency=low
     file into. Closes: #514384
   * shortcut: If default_pageext is set, first look for
     shortcuts.default_pageext.
+  * Allow comments, rename, remove, and attazhments plugins to be used
+    even if the editpage plugin is disabled.
 
  -- Joey Hess <joeyh@debian.org>  Sat, 31 Jan 2009 19:04:45 -0500