$form->tmpl_param("attachments-class" => "toggleable-open");
}
- # Save attachments in holding area before previewing so
- # they can be seen in the preview.
- if ($form->submitted eq "Preview") {
+ # Save attachments in holding area before previewing and
+ # saving.
+ if ($form->submitted eq "Preview" ||
+ $form->submitted eq "Save Page") {
attachments_save($form, $params{session});
}
}
$f=Encode::decode_utf8($f);
$f=~s/^$page\///;
if (IkiWiki::isinlinableimage($f) &&
- UNIVERSAL::can("IkiWiki::Plugin::img", "import")) {
+ IkiWiki::Plugin::img->can("import")) {
$add.='[[!img '.$f.' align="right" size="" alt=""]]';
}
else {
check_canattach($session, $final_filename, $tempfile);
};
if ($@) {
- json_response($q, $dest."/".$filename, $@);
+ json_response($q, $form, $dest."/".$filename, $@);
error $@;
}
});
}
- json_response($q, $dest."/".$filename, stored_msg());
+ json_response($q, $form, $dest."/".$filename, stored_msg());
}
# Save all stored attachments for a page.
my @attachments;
my $dir=attachment_holding_location($form->field('page'));
foreach my $filename (glob("$dir/*")) {
+ $filename=Encode::decode_utf8($filename);
next unless -f $filename;
- my $dest=$config{srcdir}."/".
+ my $destdir=$config{srcdir}."/".
linkpage(IkiWiki::possibly_foolish_untaint(
- attachment_location($form->field('page')))).
- IkiWiki::basename($filename);
+ attachment_location($form->field('page'))));
+ my $destfile=IkiWiki::basename($filename);
+ my $dest=$destdir.$destfile;
unlink($dest);
+ IkiWiki::prep_writefile($destfile, $destdir);
rename($filename, $dest);
push @attachments, $dest;
}
return unless @attachments;
require IkiWiki::Render;
- IkiWiki::prune($dir);
+ IkiWiki::prune($dir, $config{wikistatedir}."/attachments");
# Check the attachments in and trigger a wiki refresh.
if ($config{rcs}) {
my $page=shift;
# Put the attachment in a subdir of the page it's attached
- # to, unless that page is an "index" page.
- $page=~s/(^|\/)index//;
+ # to, unless that page is the "index" page.
+ return "" if $page eq 'index';
$page.="/" if length $page;
return $page;
my $dir=attachment_holding_location($page);
my $heldmsg=gettext("this attachment is not yet saved");
foreach my $file (glob("$dir/*")) {
+ $file=Encode::decode_utf8($file);
next unless -f $file;
my $base=IkiWiki::basename($file);
my $f=$loc.$base;
gettext("just uploaded");
}
-sub json_response ($$$) {
+sub json_response ($$$$) {
my $q=shift;
+ my $form=shift;
my $filename=shift;
my $stored_msg=shift;
- # for the jquery file upload widget
- if ($q->Accept("application/json") >= 1.0 &&
- grep { /application\/json/i } $q->Accept) {
+ if (! defined $form->submitted ||
+ $form->submitted ne "Upload Attachment") {
eval q{use JSON};
error $@ if $@;
- print "Content-type: application/json\n\n";
+ print "Content-type: text/html\n\n";
my $size=-s $filename;
print to_json([
{