attachment list includes new attachments in holding area
authorJoey Hess <joey@kitenet.net>
Tue, 14 Jun 2011 17:49:41 +0000 (13:49 -0400)
committerJoey Hess <joey@kitenet.net>
Tue, 14 Jun 2011 17:49:41 +0000 (13:49 -0400)
Note that it's possible for an attachment in the holding area to be older
than an attachemnt in the wiki with the same name. I intentionally
show the one in the holding area in this (unlikely) case, since saving the
page will overwrite the wiki's file with the held attachment. It does not
seem worth the bother of doing something more intelligent, since in this
case two people have basically conflicted with one-another.. and both
attachment contents will be stored in revision control in case it needs to
be sorted out.

I had to remove the hyperlink for attachments in the holding area, since
they're not yet live on the web. This could be annoying/confusing. Added
a moseover notice instead.

IkiWiki/Plugin/attachment.pm

index f4bfbe98f4cc3eb63f313c7bf5d39c39eb4b2b26..7f88010b5d263559123d9ca0202aafff9d52a7a7 100644 (file)
@@ -274,11 +274,12 @@ sub attachment_list ($) {
        my $page=shift;
        my $loc=attachment_location($page);
 
-       my @ret;
+       # attachments already in the wiki
+       my %attachments;
        foreach my $f (values %pagesources) {
                if (! defined pagetype($f) &&
                    $f=~m/^\Q$loc\E[^\/]+$/) {
-                       push @ret, {
+                       $attachments{$f}={
                                "field-select" => '<input type="checkbox" name="attachment_select" value="'.$f.'" />',
                                link => htmllink($page, $page, $f, noimageinline => 1),
                                size => IkiWiki::Plugin::filecheck::humansize((stat($f))[7]),
@@ -287,10 +288,25 @@ sub attachment_list ($) {
                        };
                }
        }
+       
+       # attachments in holding directory
+       my $dir=attachment_holding_dir($page);
+       foreach my $file (glob("$dir/*")) {
+               my $mtime=(stat($file))[9];
+               my $f=IkiWiki::basename($file);
+               $attachments{$f}={
+                       "field-select" => '<input type="checkbox" name="attachment_select" value="'.$f.'" />',
+                       link => $f, # no link possible
+                       size => IkiWiki::Plugin::filecheck::humansize((stat($file))[7]),
+                       mtime => displaytime($mtime),
+                       mtime_raw => $mtime,
+               }
+       }
 
        # Sort newer attachments to the top of the list, so a newly-added
        # attachment appears just before the form used to add it.
-       return sort { $b->{mtime_raw} <=> $a->{mtime_raw} || $a->{link} cmp $b->{link} } @ret;
+       return sort { $b->{mtime_raw} <=> $a->{mtime_raw} || $a->{link} cmp $b->{link} }
+               values %attachments;
 }
 
 1