]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Plugin/remove.pm
rename, remove: Don't rely on a form parameter to tell whether the page should be...
[ikiwiki.git] / IkiWiki / Plugin / remove.pm
index a886956b28ce72a7b62063a6284f84623b942ab9..869d32f9303e41a2e96198615a2171305f6732e6 100644 (file)
@@ -6,17 +6,25 @@ use strict;
 use IkiWiki 2.00;
 
 sub import { #{{{
+       hook(type => "getsetup", id => "remove", call => \&getsetup);
        hook(type => "formbuilder_setup", id => "remove", call => \&formbuilder_setup);
        hook(type => "formbuilder", id => "remove", call => \&formbuilder);
        hook(type => "sessioncgi", id => "remove", call => \&sessioncgi);
 
 } # }}}
 
-sub check_canremove ($$$$) { #{{{
+sub getsetup () { #{{{
+       return 
+               plugin => {
+                       safe => 1,
+                       rebuild => 0,
+               },
+} #}}}
+
+sub check_canremove ($$$) { #{{{
        my $page=shift;
        my $q=shift;
        my $session=shift;
-       my $attachment=shift;
 
        # Must be a known source file.
        if (! exists $pagesources{$page}) {
@@ -36,11 +44,15 @@ sub check_canremove ($$$$) { #{{{
        # Must be editiable.
        IkiWiki::check_canedit($page, $q, $session);
 
-       # This is sorta overkill, but better safe
-       # than sorry. If a user can't upload an
-       # attachment, don't let them delete it.
-       if ($attachment) {
-               IkiWiki::Plugin::attachment::check_canattach($session, $page, $file);
+       # If a user can't upload an attachment, don't let them delete it.
+       # This is sorta overkill, but better safe than sorry.
+       if (! defined IkiWiki::pagetype($pagesources{$page})) {
+               if (IkiWiki::Plugin::attachment->can("check_canattach")) {
+                       IkiWiki::Plugin::attachment::check_canattach($session, $page, $file);
+               }
+               else {
+                       error("renaming of attachments is not allowed");
+               }
        }
 } #}}}
 
@@ -85,7 +97,7 @@ sub removal_confirm ($$@) { #{{{
        my $attachment=shift;
        my @pages=@_;
 
-       check_canremove($_, $q, $session, $attachment) foreach @pages;
+       check_canremove($_, $q, $session) foreach @pages;
 
        # Save current form state to allow returning to it later
        # without losing any edits.
@@ -158,7 +170,7 @@ sub sessioncgi ($$) { #{{{
                        # and that the user is allowed to edit(/remove) it.
                        my @files;
                        foreach my $page (@pages) {
-                               check_canremove($page, $q, $session, $q->param("attachment"));
+                               check_canremove($page, $q, $session);
                                
                                # This untaint is safe because of the
                                # checks performed above, which verify the