From b187641376a3d0519005c80c1ef0dd19266dda84 Mon Sep 17 00:00:00 2001 From: joey Date: Wed, 26 Jul 2006 21:23:06 +0000 Subject: [PATCH] * Patch from Recai to allow selection of page type when creating a new page. Default page type is inherited from the link clicked on to create the new page. --- IkiWiki/CGI.pm | 45 +++++-- debian/changelog | 5 +- ...ect_a_page_type_on_new_file_creations.mdwn | 127 ------------------ templates/editpage.tmpl | 2 + 4 files changed, 42 insertions(+), 137 deletions(-) delete mode 100644 doc/patchqueue/allow_to_select_a_page_type_on_new_file_creations.mdwn diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index 21bb6ea38..759a49b7d 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -325,7 +325,7 @@ sub cgi_editpage ($$) { #{{{ eval q{use CGI::FormBuilder}; my $form = CGI::FormBuilder->new( - fields => [qw(do rcsinfo subpage from page editcontent comments)], + fields => [qw(do rcsinfo subpage from page type editcontent comments)], header => 1, charset => "utf-8", method => 'POST', @@ -353,13 +353,32 @@ sub cgi_editpage ($$) { #{{{ } $page=lc($page); + my $from; + if (defined $form->field('from')) { + ($from)=$form->field('from')=~/$config{wiki_file_regexp}/; + } + my $file; - if (exists $pagesources{lc($page)}) { - $file=$pagesources{lc($page)}; + my $type; + if (exists $pagesources{$page}) { + $file=$pagesources{$page}; + $type=pagetype($file); } else { - $file=$page.".".$config{default_pageext}; + $type=$form->param('type'); + if (defined $type && length $type && $hooks{htmlize}{$type}) { + $type=possibly_foolish_untaint($type); + } + elsif (defined $from) { + # favor the type of linking page + $type=pagetype($pagesources{$from}); + } + else { + $type=$config{default_pageext}; + } + $file=$page.".".$type; } + my $newfile=0; if (! -e "$config{srcdir}/$file") { $newfile=1; @@ -369,7 +388,8 @@ sub cgi_editpage ($$) { #{{{ $form->field(name => "from", type => 'hidden'); $form->field(name => "rcsinfo", type => 'hidden'); $form->field(name => "subpage", type => 'hidden'); - $form->field(name => "page", value => "$page", force => 1); + $form->field(name => "page", value => $page, force => 1); + $form->field(name => "type", value => $type, force => 1); $form->field(name => "comments", type => "text", size => 80); $form->field(name => "editcontent", type => "textarea", rows => 20, cols => 80); @@ -397,8 +417,7 @@ sub cgi_editpage ($$) { #{{{ $form->field(name => "comments", value => $comments, force => 1); $form->tmpl_param("page_preview", - htmlize(pagetype($file), - linkify($page, $page, $content))); + htmlize($type, linkify($page, $page, $content))); } else { $form->tmpl_param("page_preview", ""); @@ -410,7 +429,6 @@ sub cgi_editpage ($$) { #{{{ if ($form->field("do") eq "create") { my @page_locs; my $best_loc; - my ($from)=$form->field('from')=~/$config{wiki_file_regexp}/; if (! defined $from || ! length $from || $from ne $form->field('from') || $from=~/$config{wiki_file_prune_regexp}/ || @@ -449,10 +467,17 @@ sub cgi_editpage ($$) { #{{{ redirect($q, "$config{url}/".htmlpage($page)); return; } - + + my @page_types; + if (exists $hooks{htmlize}) { + @page_types=keys %{$hooks{htmlize}}; + } + $form->tmpl_param("page_select", 1); $form->field(name => "page", type => 'select', options => \@page_locs, value => $best_loc); + $form->field(name => "type", type => 'select', + options => \@page_types); $form->title("creating ".pagetitle($page)); } elsif ($form->field("do") eq "edit") { @@ -469,6 +494,7 @@ sub cgi_editpage ($$) { #{{{ } $form->tmpl_param("page_select", 0); $form->field(name => "page", type => 'hidden'); + $form->field(name => "type", type => 'hidden'); $form->title("editing ".pagetitle($page)); } @@ -517,6 +543,7 @@ sub cgi_editpage ($$) { #{{{ $form->field("do", "edit)"); $form->tmpl_param("page_select", 0); $form->field(name => "page", type => 'hidden'); + $form->field(name => "type", type => 'hidden'); $form->title("editing $page"); print $form->render(submit => \@buttons); return; diff --git a/debian/changelog b/debian/changelog index 391569fad..50720bc0f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,8 +18,11 @@ ikiwiki (1.9) UNRELEASED; urgency=low readable and avoid future mistakes. The patch seems to work and for the first time I have a UTF-8 username ;-) (Faidon) * Use form->field consistently, not form->param. + * Patch from Recai to allow selection of page type when creating a new page. + Default page type is inherited from the link clicked on to create the new + page. - -- Joey Hess Tue, 11 Jul 2006 17:18:39 -0400 + -- Joey Hess Wed, 26 Jul 2006 16:48:43 -0400 ikiwiki (1.8) unstable; urgency=low diff --git a/doc/patchqueue/allow_to_select_a_page_type_on_new_file_creations.mdwn b/doc/patchqueue/allow_to_select_a_page_type_on_new_file_creations.mdwn deleted file mode 100644 index d1c865598..000000000 --- a/doc/patchqueue/allow_to_select_a_page_type_on_new_file_creations.mdwn +++ /dev/null @@ -1,127 +0,0 @@ -From [[Recai]]. - -Note that this isn't safe since it needs to check file types from the CGI -against the list of allowed file types. Also, renaming a page won't work so -at least the first cut needs to be changed to only allow changing file type -when crating a new page. -- [[Joey]] - - diff -rup ikiwiki.orig/IkiWiki/CGI.pm ikiwiki/IkiWiki/CGI.pm - --- ikiwiki.orig/IkiWiki/CGI.pm 2006-07-08 02:33:07.000000000 +0300 - +++ ikiwiki/IkiWiki/CGI.pm 2006-07-08 18:27:24.000000000 +0300 - @@ -310,7 +310,7 @@ sub cgi_editpage ($$) { #{{{ - - eval q{use CGI::FormBuilder}; - my $form = CGI::FormBuilder->new( - - fields => [qw(do rcsinfo subpage from page editcontent comments)], - + fields => [qw(do rcsinfo subpage from page type editcontent comments)], - header => 1, - charset => "utf-8", - method => 'POST', - @@ -337,12 +337,21 @@ sub cgi_editpage ($$) { #{{{ - $page=lc($page); - - my $file; - - if (exists $pagesources{lc($page)}) { - - $file=$pagesources{lc($page)}; - + my $type; - + if (exists $pagesources{$page}) { - + $file=$pagesources{$page}; - + $type=pagetype($file); - } - else { - - $file=$page.".".$config{default_pageext}; - + $type=$form->param('type'); - + if (defined $type && length $type) { - + $type=possibly_foolish_untaint($type); - + } else { - + $type=$config{default_pageext}; - + } - + $file=$page.".".$type; - } - + - my $newfile=0; - if (! -e "$config{srcdir}/$file") { - $newfile=1; - @@ -353,6 +362,7 @@ sub cgi_editpage ($$) { #{{{ - $form->field(name => "rcsinfo", type => 'hidden'); - $form->field(name => "subpage", type => 'hidden'); - $form->field(name => "page", value => "$page", force => 1); - + $form->field(name => "type", value => "$type", force => 1, type => 'hidden'); - $form->field(name => "comments", type => "text", size => 80); - $form->field(name => "editcontent", type => "textarea", rows => 20, - cols => 80); - @@ -382,8 +392,7 @@ sub cgi_editpage ($$) { #{{{ - $form->field(name => "comments", - value => $comments, force => 1); - $form->tmpl_param("page_preview", - - htmlize(pagetype($file), - - linkify($page, $page, $content))); - + htmlize($type, linkify($page, $page, $content))); - } - else { - $form->tmpl_param("page_preview", ""); - @@ -395,6 +404,8 @@ sub cgi_editpage ($$) { #{{{ - if ($form->field("do") eq "create") { - my @page_locs; - my $best_loc; - + my @page_types; - + my $best_type; - my ($from)=$form->param('from')=~/$config{wiki_file_regexp}/; - if (! defined $from || ! length $from || - $from ne $form->param('from') || - @@ -435,9 +446,24 @@ sub cgi_editpage ($$) { #{{{ - return; - } - - + if (exists $hooks{htmlize}) { - + @page_types=keys %{$hooks{htmlize}}; - + } - + else { - + @page_types=($type); - + } - + - + # favor the type of originated page - + $best_type=pagetype($pagesources{$from}); - + if (! defined $best_type || ! length $best_type) { - + $best_type=$type; - + } - + - $form->tmpl_param("page_select", 1); - $form->field(name => "page", type => 'select', - options => \@page_locs, value => $best_loc); - + $form->field(name => "type", type => 'select', - + options => \@page_types, value => $best_type); - $form->title("creating ".pagetitle($page)); - } - elsif ($form->field("do") eq "edit") { - @@ -454,6 +480,7 @@ sub cgi_editpage ($$) { #{{{ - } - $form->tmpl_param("page_select", 0); - $form->field(name => "page", type => 'hidden'); - + $form->field(name => "type", type => 'hidden'); - $form->title("editing ".pagetitle($page)); - } - - @@ -503,6 +530,7 @@ sub cgi_editpage ($$) { #{{{ - $form->field("do", "edit)"); - $form->tmpl_param("page_select", 0); - $form->field(name => "page", type => 'hidden'); - + $form->field(name => "type", type => 'hidden'); - $form->title("editing $page"); - print $form->render(submit => \@buttons); - return; - diff -rup ikiwiki.orig/templates/editpage.tmpl ikiwiki/templates/editpage.tmpl - --- ikiwiki.orig/templates/editpage.tmpl 2006-07-03 03:13:46.000000000 +0300 - +++ ikiwiki/templates/editpage.tmpl 2006-07-08 18:04:48.000000000 +0300 - @@ -28,9 +28,11 @@ confict and commit again to save your ch - - - Page location: - +Page type: - -
- - + -
-
- diff --git a/templates/editpage.tmpl b/templates/editpage.tmpl index cf4520575..1ee4c4947 100644 --- a/templates/editpage.tmpl +++ b/templates/editpage.tmpl @@ -28,9 +28,11 @@ confict and commit again to save your changes. Page location: +Page type:
+

-- 2.26.2