]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/commitdiff
web commit by joey
authorwww-data <www-data@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Tue, 11 Jul 2006 20:36:31 +0000 (20:36 +0000)
committerwww-data <www-data@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Tue, 11 Jul 2006 20:36:31 +0000 (20:36 +0000)
doc/patchqueue/allow_to_select_a_page_type_on_new_file_creations.mdwn [new file with mode: 0644]

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
new file mode 100644 (file)
index 0000000..90ec73c
--- /dev/null
@@ -0,0 +1,127 @@
+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
+ <TMPL_VAR FIELD-RCSINFO>
+ <TMPL_IF NAME="PAGE_SELECT">
+ Page location: <TMPL_VAR FIELD-PAGE>
++Page type: <TMPL_VAR FIELD-TYPE>
+ <TMPL_ELSE>
+ <br />
+ <TMPL_VAR FIELD-PAGE>
++<TMPL_VAR FIELD-TYPE>
+ </TMPL_IF>
+ <TMPL_VAR FIELD-EDITCONTENT><br />
+ <TMPL_IF NAME="CAN_COMMIT">