X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/2dfe3efcb7c99cb60c893387db0f21b734e1fbc8..72c53650ad4a708493880daa75cdda9d056fc75e:/IkiWiki/CGI.pm diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index aee80253b..1471ae926 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -137,6 +137,7 @@ sub cgi_signin ($$) { #{{{ error($@) if $@; my $form = CGI::FormBuilder->new( title => "signin", + name => "signin", header => 1, charset => "utf-8", method => 'POST', @@ -145,7 +146,7 @@ sub cgi_signin ($$) { #{{{ params => $q, action => $config{cgiurl}, header => 0, - template => scalar template_params("signin.tmpl"), + template => {type => 'div'}, stylesheet => baseurl()."style.css", ); my $buttons=["Login"]; @@ -206,6 +207,7 @@ sub cgi_prefs ($$) { #{{{ error($@) if $@; my $form = CGI::FormBuilder->new( title => "preferences", + name => "preferences", header => 0, charset => "utf-8", method => 'POST', @@ -216,8 +218,13 @@ sub cgi_prefs ($$) { #{{{ javascript => 0, params => $q, action => $config{cgiurl}, - template => scalar template_params("prefs.tmpl"), + template => {type => 'div'}, stylesheet => baseurl()."style.css", + fieldsets => [ + [login => gettext("Login")], + [preferences => gettext("Preferences")], + [admin => gettext("Admin")] + ], ); my $buttons=["Save Preferences", "Logout", "Cancel"]; @@ -226,10 +233,12 @@ sub cgi_prefs ($$) { #{{{ }); $form->field(name => "do", type => "hidden"); - $form->field(name => "email", size => 50); + $form->field(name => "email", size => 50, fieldset => "preferences"); $form->field(name => "subscriptions", size => 50, + fieldset => "preferences", comment => "(".htmllink("", "", "PageSpec", noimageinline => 1).")"); - $form->field(name => "banned_users", size => 50); + $form->field(name => "banned_users", size => 50, + fieldset => "admin"); my $user_name=$session->param("name"); if (! is_admin($user_name)) { @@ -332,12 +341,16 @@ sub cgi_editpage ($$) { #{{{ my $file; my $type; - if (exists $pagesources{$page}) { + if (exists $pagesources{$page} && $form->field("do") ne "create") { $file=$pagesources{$page}; $type=pagetype($file); if (! defined $type) { error(sprintf(gettext("%s is not an editable page"), $page)); } + if (! $form->submitted) { + $form->field(name => "rcsinfo", + value => rcs_prepedit($file), force => 1); + } } else { $type=$form->param('type'); @@ -350,18 +363,16 @@ sub cgi_editpage ($$) { #{{{ } $type=$config{default_pageext} unless defined $type; $file=$page.".".$type; - } - - my $newfile=0; - if (! -e "$config{srcdir}/$file") { - $newfile=1; + if (! $form->submitted) { + $form->field(name => "rcsinfo", value => "", force => 1); + } } $form->field(name => "do", type => 'hidden'); $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 => pagetitle($page, 1), 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, @@ -371,16 +382,12 @@ sub cgi_editpage ($$) { #{{{ $form->tmpl_param("helponformattinglink", htmllink("", "", "HelpOnFormatting", noimageinline => 1)); $form->tmpl_param("baseurl", baseurl()); - if (! $form->submitted) { - $form->field(name => "rcsinfo", value => rcs_prepedit($file), - force => 1); - } if ($form->submitted eq "Cancel") { - if ($newfile && defined $from) { + if ($form->field("do") eq "create" && defined $from) { redirect($q, "$config{url}/".htmlpage($from)); } - elsif ($newfile) { + elsif ($form->field("do") eq "create") { redirect($q, $config{url}); } else { @@ -389,18 +396,11 @@ sub cgi_editpage ($$) { #{{{ return; } elsif ($form->submitted eq "Preview") { - my $content=$form->field('editcontent'); - my $comments=$form->field('comments'); - $form->field(name => "editcontent", - value => $content, force => 1); - $form->field(name => "comments", - value => $comments, force => 1); - $config{rss}=$config{atom}=0; # avoid preview writing a feed! $form->tmpl_param("page_preview", htmlize($page, $type, linkify($page, "", preprocess($page, $page, - filter($page, $content))))); + filter($page, $form->field('editcontent')), 0, 1)))); } else { $form->tmpl_param("page_preview", ""); @@ -466,8 +466,8 @@ sub cgi_editpage ($$) { #{{{ $form->tmpl_param("page_select", 1); $form->field(name => "page", type => 'select', - options => { map { $_ => pagetitle($_, 1) } @editable_locs }, - value => $best_loc); + options => [ map { pagetitle($_, 1) } @editable_locs ], + value => pagetitle($best_loc, 1)); $form->field(name => "type", type => 'select', options => \@page_types); $form->title(sprintf(gettext("creating %s"), pagetitle($page))); @@ -495,6 +495,32 @@ sub cgi_editpage ($$) { #{{{ else { # save page check_canedit($page, $q, $session); + if (! -e "$config{srcdir}/$file" && + $form->field("do") ne "create") { + $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); + return; + } + elsif (-e "$config{srcdir}/$file" && + $form->field("do") eq "create") { + $form->tmpl_param("creation_conflict", 1); + $form->field(name => "do", value => "edit", 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)); + $form->field("editcontent", + value => readfile("$config{srcdir}/$file"). + "\n\n\n".$form->field("editcontent"), + force => 1); + print $form->render(submit => \@buttons); + return; + } my $content=$form->field('editcontent'); @@ -510,8 +536,6 @@ sub cgi_editpage ($$) { #{{{ $form->tmpl_param("failed_save", 1); $form->tmpl_param("error_message", $@); $form->field("editcontent", value => $content, force => 1); - $form->field(name => "comments", value => $form->field('comments'), force => 1); - $form->field("do", "edit)"); $form->tmpl_param("page_select", 0); $form->field(name => "page", type => 'hidden'); $form->field(name => "type", type => 'hidden'); @@ -528,7 +552,7 @@ sub cgi_editpage ($$) { #{{{ $message=$form->field('comments'); } - if ($newfile) { + if ($form->field("do") eq "create") { rcs_add($file); } @@ -555,8 +579,7 @@ sub cgi_editpage ($$) { #{{{ force => 1); $form->tmpl_param("page_conflict", 1); $form->field("editcontent", value => $conflict, force => 1); - $form->field(name => "comments", value => $form->field('comments'), force => 1); - $form->field("do", "edit)"); + $form->field("do", "edit", force => 1); $form->tmpl_param("page_select", 0); $form->field(name => "page", type => 'hidden'); $form->field(name => "type", type => 'hidden'); @@ -674,12 +697,12 @@ sub cgi (;$$) { #{{{ cgi_editpage($q, $session); } elsif ($do eq 'blog') { - my $page=titlepage(decode_utf8($q->param('title'))); - $page=~s/(\/)/"__".ord($1)."__"/eg; # escape slashes too + 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/$page$add"}) { + while (exists $pagecase{lc($from."/".titlepage($page).$add)}) { $add=1 unless length $add; $add++; }