X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/bb93fccf0690344aa77f9538a508959a6de09847..b3f7c6a9a579208f555a9ae7a409474d68897d04:/IkiWiki/Plugin/attachment.pm?ds=sidebyside

diff --git a/IkiWiki/Plugin/attachment.pm b/IkiWiki/Plugin/attachment.pm
index 87da6cd4e..bd93d3718 100644
--- a/IkiWiki/Plugin/attachment.pm
+++ b/IkiWiki/Plugin/attachment.pm
@@ -3,7 +3,7 @@ package IkiWiki::Plugin::attachment;
 
 use warnings;
 use strict;
-use IkiWiki 2.00;
+use IkiWiki 3.00;
 
 sub import {
 	add_underlay("javascript");
@@ -19,6 +19,7 @@ sub getsetup () {
 		plugin => {
 			safe => 1,
 			rebuild => 0,
+			section => "web",
 		},
 		allowed_attachments => {
 			type => "pagespec",
@@ -57,27 +58,10 @@ sub check_canattach ($$;$) {
 			$config{allowed_attachments},
 			file => $file,
 			user => $session->param("name"),
-			ip => $ENV{REMOTE_ADDR},
+			ip => $session->remote_addr(),
 		);
 	}
 
-	# XXX deprecated, should be removed eventually
-	if ($allowed) {
-		foreach my $admin (@{$config{adminuser}}) {
-			my $allowed_attachments=IkiWiki::userinfo_get($admin, "allowed_attachments");
-			if (defined $allowed_attachments &&
-			    length $allowed_attachments) {
-				$allowed=pagespec_match($dest,
-					$allowed_attachments,
-					file => $file,
-					user => $session->param("name"),
-					ip => $ENV{REMOTE_ADDR},
-				);
-				last if $allowed;
-			}
-		}
-	}
-
 	if (! $allowed) {
 		error(gettext("prohibited by allowed_attachments")." ($allowed)");
 	}
@@ -120,39 +104,6 @@ sub formbuilder_setup (@) {
 			$form->tmpl_param("attachments-class" => "toggleable-open");
 		}
 	}
-	elsif ($form->title eq "preferences") {
-		# XXX deprecated, should remove eventually
-		my $session=$params{session};
-		my $user_name=$session->param("name");
-
-		$form->field(name => "allowed_attachments", size => 50,
-			fieldset => "admin",
-			comment => "deprecated; please move to allowed_attachments in setup file",
-		);
-		if (! IkiWiki::is_admin($user_name)) {
-			$form->field(name => "allowed_attachments", type => "hidden");
-		}
-                if (! $form->submitted) {
-			my $value=IkiWiki::userinfo_get($user_name, "allowed_attachments");
-			if (length $value) {
-				$form->field(name => "allowed_attachments", force => 1,
-					value => IkiWiki::userinfo_get($user_name, "allowed_attachments"));
-			}
-			else {
-				$form->field(name => "allowed_attachments", type => "hidden");
-			}
-                }
-		if ($form->submitted && $form->submitted eq 'Save Preferences') {
-			if (defined $form->field("allowed_attachments")) {
-				IkiWiki::userinfo_set($user_name, "allowed_attachments",
-				$form->field("allowed_attachments")) ||
-					error("failed to set allowed_attachments");
-				if (! length $form->field("allowed_attachments")) {
-					$form->field(name => "allowed_attachments", type => "hidden");
-				}
-			}
-		}
-	}
 }
 
 sub formbuilder (@) {
@@ -162,7 +113,7 @@ sub formbuilder (@) {
 
 	return if ! defined $form->field("do") || ($form->field("do") ne "edit" && $form->field("do") ne "create") ;
 
-	my $filename=$q->param('attachment');
+	my $filename=Encode::decode_utf8($q->param('attachment'));
 	if (defined $filename && length $filename &&
             ($form->submitted eq "Upload Attachment" || $form->submitted eq "Save Page")) {
 		my $session=$params{session};
@@ -183,16 +134,19 @@ sub formbuilder (@) {
 			}
 		}
 
+		$filename=IkiWiki::basename($filename);
+		$filename=~s/.*\\+(.+)/$1/; # hello, windows
+
 		$filename=linkpage(IkiWiki::possibly_foolish_untaint(
 				attachment_location($form->field('page')).
-				IkiWiki::basename($filename)));
-		if (IkiWiki::file_pruned($filename, $config{srcdir})) {
+				$filename));
+		if (IkiWiki::file_pruned($filename)) {
 			error(gettext("bad attachment filename"));
 		}
 		
 		# Check that the user is allowed to edit a page with the
 		# name of the attachment.
-		IkiWiki::check_canedit($filename, $q, $session, 1);
+		IkiWiki::check_canedit($filename, $q, $session);
 		# And that the attachment itself is acceptable.
 		check_canattach($session, $filename, $tempfile);
 
@@ -229,9 +183,12 @@ sub formbuilder (@) {
 		if ($config{rcs}) {
 			IkiWiki::rcs_add($filename);
 			IkiWiki::disable_commit_hook();
-			IkiWiki::rcs_commit($filename, gettext("attachment upload"),
-				IkiWiki::rcs_prepedit($filename),
-				$session->param("name"), $ENV{REMOTE_ADDR});
+			IkiWiki::rcs_commit(
+				file => $filename,
+				message => gettext("attachment upload"),
+				token => IkiWiki::rcs_prepedit($filename),
+				session => $session,
+			);
 			IkiWiki::enable_commit_hook();
 			IkiWiki::rcs_update();
 		}
@@ -239,11 +196,19 @@ sub formbuilder (@) {
 		IkiWiki::saveindex();
 	}
 	elsif ($form->submitted eq "Insert Links") {
-		my $page=quotemeta($q->param("page"));
+		my $page=quotemeta(Encode::decode_utf8($q->param("page")));
 		my $add="";
 		foreach my $f ($q->param("attachment_select")) {
+			$f=Encode::decode_utf8($f);
 			$f=~s/^$page\///;
-			$add.="[[$f]]\n";
+			if (IkiWiki::isinlinableimage($f) &&
+			    UNIVERSAL::can("IkiWiki::Plugin::img", "import")) {
+				$add.='[[!img '.$f.' align="right" size="" alt=""]]';
+			}
+			else {
+				$add.="[[$f]]";
+			}
+			$add.="\n";
 		}
 		$form->field(name => 'editcontent',
 			value => $form->field('editcontent')."\n\n".$add,
@@ -273,13 +238,13 @@ sub attachment_list ($) {
 	my @ret;
 	foreach my $f (values %pagesources) {
 		if (! defined pagetype($f) &&
-		    $f=~m/^\Q$loc\E[^\/]+$/ &&
-		    -e "$config{srcdir}/$f") {
+		    $f=~m/^\Q$loc\E[^\/]+$/) {
 			push @ret, {
 				"field-select" => '<input type="checkbox" name="attachment_select" value="'.$f.'" />',
 				link => htmllink($page, $page, $f, noimageinline => 1),
-				size => IkiWiki::Plugin::filecheck::humansize((stat(_))[7]),
+				size => IkiWiki::Plugin::filecheck::humansize((stat($f))[7]),
 				mtime => displaytime($IkiWiki::pagemtime{$f}),
+				mtime_raw => $IkiWiki::pagemtime{$f},
 			};
 		}
 	}