foo
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Tue, 11 Jul 2006 20:41:30 +0000 (20:41 +0000)
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Tue, 11 Jul 2006 20:41:30 +0000 (20:41 +0000)
doc/patchqueue/allow_to_select_a_page_type_on_new_file_creations.mdwn

index 90ec73c17f4d9e5a746b44fcf98b56f5d899ccf7..d1c865598e6651bf27633865b2cac89907d3e62d 100644 (file)
 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">
+       
+       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">