rename, remove: Don't rely on a form parameter to tell whether the page should be...
[ikiwiki.git] / IkiWiki / Plugin / rename.pm
index d6079e198266cf06af8e01a9a9fe351b3c7d1b8d..f441ac025f12e5b1c06282295c821366674cdfc0 100644 (file)
@@ -21,14 +21,15 @@ sub getsetup () { #{{{
                },
 } #}}}
 
                },
 } #}}}
 
-sub check_canrename ($$$$$$$) { #{{{
+sub check_canrename ($$$$$$) { #{{{
        my $src=shift;
        my $srcfile=shift;
        my $dest=shift;
        my $destfile=shift;
        my $q=shift;
        my $session=shift;
        my $src=shift;
        my $srcfile=shift;
        my $dest=shift;
        my $destfile=shift;
        my $q=shift;
        my $session=shift;
-       my $attachment=shift;
+
+       my $attachment=! defined IkiWiki::pagetype($pagesources{$src});
 
        # Must be a known source file.
        if (! exists $pagesources{$src}) {
 
        # Must be a known source file.
        if (! exists $pagesources{$src}) {
@@ -47,7 +48,12 @@ sub check_canrename ($$$$$$$) { #{{{
        # Must be editable.
        IkiWiki::check_canedit($src, $q, $session);
        if ($attachment) {
        # Must be editable.
        IkiWiki::check_canedit($src, $q, $session);
        if ($attachment) {
-               IkiWiki::Plugin::attachment::check_canattach($session, $src, $srcfile);
+               if (IkiWiki::Plugin::attachment->can("check_canattach")) {
+                       IkiWiki::Plugin::attachment::check_canattach($session, $src, $srcfile);
+               }
+               else {
+                       error("renaming of attachments is not allowed");
+               }
        }
        
        # Dest checks can be omitted by passing undef.
        }
        
        # Dest checks can be omitted by passing undef.
@@ -136,7 +142,7 @@ sub rename_start ($$$$) { #{{{
        my $page=shift;
 
        check_canrename($page, $pagesources{$page}, undef, undef,
        my $page=shift;
 
        check_canrename($page, $pagesources{$page}, undef, undef,
-               $q, $session, $attachment);
+               $q, $session);
 
        # Save current form state to allow returning to it later
        # without losing any edits.
 
        # Save current form state to allow returning to it later
        # without losing any edits.
@@ -264,7 +270,7 @@ sub sessioncgi ($$) { #{{{
                        }
 
                        check_canrename($src, $srcfile, $dest, $destfile,
                        }
 
                        check_canrename($src, $srcfile, $dest, $destfile,
-                               $q, $session, $q->param("attachment"));
+                               $q, $session);
 
                        # Ensures that the dest directory exists and is ok.
                        IkiWiki::prep_writefile($destfile, $config{srcdir});
 
                        # Ensures that the dest directory exists and is ok.
                        IkiWiki::prep_writefile($destfile, $config{srcdir});