X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/30248df40a19dc03c0d8c07e136105f3c2299191..930a60ae1dfa6c376b4d4b43f6383967d37f7f17:/IkiWiki/Plugin/editpage.pm

diff --git a/IkiWiki/Plugin/editpage.pm b/IkiWiki/Plugin/editpage.pm
index eb6a7bbcb..7bb6eb07c 100644
--- a/IkiWiki/Plugin/editpage.pm
+++ b/IkiWiki/Plugin/editpage.pm
@@ -17,6 +17,7 @@ sub getsetup () {
 		plugin => {
 			safe => 1,
 			rebuild => 1,
+			section => "core",
 		},
 }
 
@@ -77,7 +78,7 @@ sub cgi_editpage ($$) {
 		action => $config{cgiurl},
 		header => 0,
 		table => 0,
-		template => scalar template_params("editpage.tmpl"),
+		template => { template("editpage.tmpl") },
 	);
 	
 	decode_form_utf8($form);
@@ -91,9 +92,9 @@ sub cgi_editpage ($$) {
 	# wiki_file_regexp.
 	my ($page)=$form->field('page')=~/$config{wiki_file_regexp}/;
 	$page=possibly_foolish_untaint($page);
-	my $absolute=($page =~ s#^/+##);
+	my $absolute=($page =~ s#^/+##); # absolute name used to force location
 	if (! defined $page || ! length $page ||
-	    file_pruned($page, $config{srcdir})) {
+	    file_pruned($page)) {
 		error(gettext("bad page name"));
 	}
 
@@ -219,8 +220,7 @@ sub cgi_editpage ($$) {
 			my $best_loc;
 			if (! defined $from || ! length $from ||
 			    $from ne $form->field('from') ||
-			    file_pruned($from, $config{srcdir}) ||
-			    $from=~/^\// || 
+			    file_pruned($from) ||
 			    $absolute ||
 			    $form->submitted) {
 				@page_locs=$best_loc=$page;
@@ -229,8 +229,9 @@ sub cgi_editpage ($$) {
 				my $dir=$from."/";
 				$dir=~s![^/]+/+$!!;
 				
-				if ((defined $form->field('subpage') && length $form->field('subpage')) ||
-				    $page eq gettext('discussion')) {
+				if ((defined $form->field('subpage') &&
+				     length $form->field('subpage')) ||
+				    $page eq lc($config{discussionpage})) {
 					$best_loc="$from/$page";
 				}
 				else {
@@ -244,8 +245,9 @@ sub cgi_editpage ($$) {
 					push @page_locs, $dir.$page;
 				}
 			
-				push @page_locs, "$config{userdir}/$page"
-					if length $config{userdir};
+				my $userpage=IkiWiki::userpage($page);
+				push @page_locs, $userpage
+					if ! grep { $_ eq $userpage } @page_locs;
 			}
 
 			@page_locs = grep {
@@ -270,21 +272,19 @@ sub cgi_editpage ($$) {
 				check_canedit($_, $q, $session, 1)
 			} @page_locs;
 			if (! @editable_locs) {
-				# let it throw an error this time
-				map { check_canedit($_, $q, $session) } @page_locs;
+				# now let it throw an error, or prompt for
+				# login
+				map { check_canedit($_, $q, $session) }
+					($best_loc, @page_locs);
 			}
 			
 			my @page_types;
 			if (exists $hooks{htmlize}) {
 				foreach my $key (grep { !/^_/ } keys %{$hooks{htmlize}}) {
-					my $pluginref = ${$hooks{htmlize}}{$key};
-					if(${$pluginref}{'longname'}) {
-						push @page_types, [$key, ${$pluginref}{'longname'}];
-					} else {
-						push @page_types, [$key, $key];
-					}
+					push @page_types, [$key, $hooks{htmlize}{$key}{longname} || $key];
 				}
 			}
+			@page_types=sort @page_types;
 			
 			$form->tmpl_param("page_select", 1);
 			$form->field(name => "page", type => 'select',