X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/65be0598a96a6a24a1a6993df524fda256b9bc97..abc5919087adc30448e872dd6c394004f427aef4:/IkiWiki/CGI.pm diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index 1471ae926..c800ddf6e 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -20,6 +20,24 @@ sub printheader ($) { #{{{ } } #}}} + +sub showform ($$$$) { #{{{ + my $form=shift; + my $buttons=shift; + my $session=shift; + my $cgi=shift; + + if (exists $hooks{formbuilder}) { + run_hooks(formbuilder => sub { + shift->(form => $form, cgi => $cgi, session => $session, + buttons => $buttons); + }); + } + else { + printheader($session); + print misctemplate($form->title, $form->render(submit => $buttons)); + } +} sub redirect ($$) { #{{{ my $q=shift; @@ -138,7 +156,6 @@ sub cgi_signin ($$) { #{{{ my $form = CGI::FormBuilder->new( title => "signin", name => "signin", - header => 1, charset => "utf-8", method => 'POST', required => 'NONE', @@ -157,25 +174,18 @@ sub cgi_signin ($$) { #{{{ $form->field(name => "do", type => "hidden", value => "signin", force => 1); + decode_form_utf8($form); + run_hooks(formbuilder_setup => sub { - shift->(form => $form, cgi => $q, session => $session); + shift->(form => $form, cgi => $q, session => $session, + buttons => $buttons); }); - - decode_form_utf8($form); - if (exists $hooks{formbuilder}) { - run_hooks(formbuilder => sub { - shift->(form => $form, cgi => $q, session => $session, - buttons => $buttons); - }); - } - else { - if ($form->submitted) { - $form->validate; - } - printheader($session); - print misctemplate($form->title, $form->render(submit => $buttons)); + if ($form->submitted) { + $form->validate; } + + showform($form, $buttons, $session, $q); } #}}} sub cgi_postsignin ($$) { #{{{ @@ -228,8 +238,11 @@ sub cgi_prefs ($$) { #{{{ ); my $buttons=["Save Preferences", "Logout", "Cancel"]; + decode_form_utf8($form); + run_hooks(formbuilder_setup => sub { - shift->(form => $form, cgi => $q, session => $session); + shift->(form => $form, cgi => $q, session => $session, + buttons => $buttons); }); $form->field(name => "do", type => "hidden"); @@ -256,8 +269,6 @@ sub cgi_prefs ($$) { #{{{ } } - decode_form_utf8($form); - if ($form->submitted eq 'Logout') { $session->delete(); redirect($q, $config{url}); @@ -283,16 +294,7 @@ sub cgi_prefs ($$) { #{{{ $form->text(gettext("Preferences saved.")); } - if (exists $hooks{formbuilder}) { - run_hooks(formbuilder => sub { - shift->(form => $form, cgi => $q, session => $session, - buttons => $buttons); - }); - } - else { - printheader($session); - print misctemplate($form->title, $form->render(submit => $buttons)); - } + showform($form, $buttons, $session, $q); } #}}} sub cgi_editpage ($$) { #{{{ @@ -305,8 +307,8 @@ sub cgi_editpage ($$) { #{{{ eval q{use CGI::FormBuilder}; error($@) if $@; my $form = CGI::FormBuilder->new( + title => "editpage", fields => \@fields, - header => 1, charset => "utf-8", method => 'POST', validate => { @@ -316,16 +318,19 @@ sub cgi_editpage ($$) { #{{{ javascript => 0, params => $q, action => $config{cgiurl}, + header => 0, table => 0, template => scalar template_params("editpage.tmpl"), + wikiname => $config{wikiname}, ); + decode_form_utf8($form); + run_hooks(formbuilder_setup => sub { - shift->(form => $form, cgi => $q, session => $session); + shift->(form => $form, cgi => $q, session => $session, + buttons => \@buttons); }); - decode_form_utf8($form); - # This untaint is safe because titlepage removes any problematic # characters. my ($page)=$form->field('page'); @@ -400,14 +405,14 @@ sub cgi_editpage ($$) { #{{{ htmlize($page, $type, linkify($page, "", preprocess($page, $page, - filter($page, $form->field('editcontent')), 0, 1)))); + filter($page, $page, $form->field('editcontent')), 0, 1)))); } - else { + elsif ($form->submitted eq "Save Page") { $form->tmpl_param("page_preview", ""); } $form->tmpl_param("page_conflict", ""); - if (! $form->submitted || $form->submitted eq "Preview" || + if ($form->submitted ne "Save Page" || ! $form->validate) { if ($form->field("do") eq "create") { my @page_locs; @@ -471,6 +476,7 @@ sub cgi_editpage ($$) { #{{{ $form->field(name => "type", type => 'select', options => \@page_types); $form->title(sprintf(gettext("creating %s"), pagetitle($page))); + } elsif ($form->field("do") eq "edit") { check_canedit($page, $q, $session); @@ -490,24 +496,26 @@ sub cgi_editpage ($$) { #{{{ $form->title(sprintf(gettext("editing %s"), pagetitle($page))); } - print $form->render(submit => \@buttons); + showform($form, \@buttons, $session, $q); } else { # save page check_canedit($page, $q, $session); - if (! -e "$config{srcdir}/$file" && - $form->field("do") ne "create") { + + my $exists=-e "$config{srcdir}/$file"; + + if ($form->field("do") ne "create" && + ! $exists && ! -e "$config{underlaydir}/$file") { $form->tmpl_param("page_gone", 1); $form->field(name => "do", value => "create", force => 1); $form->tmpl_param("page_select", 0); $form->field(name => "page", type => 'hidden'); $form->field(name => "type", type => 'hidden'); $form->title(sprintf(gettext("editing %s"), $page)); - print $form->render(submit => \@buttons); + showform($form, \@buttons, $session, $q); return; } - elsif (-e "$config{srcdir}/$file" && - $form->field("do") eq "create") { + elsif ($form->field("do") eq "create" && $exists) { $form->tmpl_param("creation_conflict", 1); $form->field(name => "do", value => "edit", force => 1); $form->tmpl_param("page_select", 0); @@ -518,7 +526,7 @@ sub cgi_editpage ($$) { #{{{ value => readfile("$config{srcdir}/$file"). "\n\n\n".$form->field("editcontent"), force => 1); - print $form->render(submit => \@buttons); + showform($form, \@buttons, $session, $q); return; } @@ -540,7 +548,7 @@ sub cgi_editpage ($$) { #{{{ $form->field(name => "page", type => 'hidden'); $form->field(name => "type", type => 'hidden'); $form->title(sprintf(gettext("editing %s"), $page)); - print $form->render(submit => \@buttons); + showform($form, \@buttons, $session, $q); return; } @@ -552,7 +560,7 @@ sub cgi_editpage ($$) { #{{{ $message=$form->field('comments'); } - if ($form->field("do") eq "create") { + if (! $exists) { rcs_add($file); } @@ -584,7 +592,7 @@ sub cgi_editpage ($$) { #{{{ $form->field(name => "page", type => 'hidden'); $form->field(name => "type", type => 'hidden'); $form->title(sprintf(gettext("editing %s"), $page)); - print $form->render(submit => \@buttons); + showform($form, \@buttons, $session, $q); return; } else { @@ -647,9 +655,6 @@ sub cgi (;$$) { #{{{ cgi_recentchanges($q); return; } - elsif ($do eq 'hyperestraier') { - cgi_hyperestraier(); - } # Need to lock the wiki before getting a session. lockwiki(); @@ -683,7 +688,10 @@ sub cgi (;$$) { #{{{ print gettext("You are banned."); cgi_savesession($session); } - elsif ($do eq 'signin') { + + run_hooks(sessioncgi => sub { shift->($q, $session) }); + + if ($do eq 'signin') { cgi_signin($q, $session); cgi_savesession($session); } @@ -696,21 +704,6 @@ sub cgi (;$$) { #{{{ elsif ($do eq 'create' || $do eq 'edit') { cgi_editpage($q, $session); } - elsif ($do eq 'blog') { - my $page=decode_utf8($q->param('title')); - $page=~s/\///g; # no slashes in blog posts - # if the page already exists, munge it to be unique - my $from=$q->param('from'); - my $add=""; - while (exists $pagecase{lc($from."/".titlepage($page).$add)}) { - $add=1 unless length $add; - $add++; - } - $q->param('page', $page.$add); - # now run same as create - $q->param('do', 'create'); - cgi_editpage($q, $session); - } elsif ($do eq 'postsignin') { error(gettext("login failed, perhaps you need to turn on cookies?")); }