From: Joey Hess Date: Mon, 21 Jul 2008 16:54:23 +0000 (-0400) Subject: basic removal form skeleton X-Git-Tag: 2.55~105 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=8e7b31a19cc9f9d68d6c936d3d36e1d48c82248f;p=ikiwiki.git basic removal form skeleton --- diff --git a/IkiWiki/Plugin/remove.pm b/IkiWiki/Plugin/remove.pm new file mode 100644 index 000000000..77ddd63ba --- /dev/null +++ b/IkiWiki/Plugin/remove.pm @@ -0,0 +1,105 @@ +#!/usr/bin/perl +package IkiWiki::Plugin::remove; + +use warnings; +use strict; +use IkiWiki 2.00; + +sub import { #{{{ + hook(type => "formbuilder_setup", id => "remove", call => \&formbuilder_setup); + hook(type => "formbuilder", id => "remove", call => \&formbuilder); + hook(type => "sessioncgi", id => "remove", call => \&sessioncgi); + +} # }}} + +sub formbuilder_setup (@) { #{{{ + my %params=@_; + my $form=$params{form}; + my $q=$params{cgi}; + + if (defined $form->field("do") && $form->field("do") eq "edit") { + push @{$params{buttons}}, "Remove"; + # TODO button for attachments + } +} #}}} + +sub confirmation_form ($$) { #{{{ + my $q=shift; + my $session=shift; + + eval q{use CGI::FormBuilder}; + error($@) if $@; + my @fields=qw(do page); + my $f = CGI::FormBuilder->new( + title => "confirm removal", + name => "remove", + header => 0, + charset => "utf-8", + method => 'POST', + javascript => 0, + params => $q, + action => $config{cgiurl}, + stylesheet => IkiWiki::baseurl()."style.css", + fields => \@fields, + ); + + $f->field(name => "do", type => "hidden", value => "remove", force => 1); + $f->field(name => "page", label => "Will remove:", validate => sub { + my $page=shift; + if (! exists $pagesources{$page}) { + $f->field(name => "page", message => gettext("page does not exist")); + return 0; + } + else { + IkiWiki::check_canedit($page, $q, $session); + return 1; + } + }); + + return $f, ["Remove", "Cancel"]; +} #}}} + +sub formbuilder (@) { #{{{ + my %params=@_; + my $form=$params{form}; + + if (defined $form->field("do") && $form->field("do") eq "edit" && + $form->submitted eq "Remove") { + # When the remove button is pressed on the edit form, + # save the rest of the form state and generate a small + # remove confirmation form. + + # TODO save state + + + my $q=$params{cgi}; + my $session=$params{session}; + my ($f, $buttons)=confirmation_form($q, $session); + $f->field(name => "page", value => $form->field("page"), + force => 1); + IkiWiki::showform($f, $buttons, $session, $q); + exit 0; + } +} #}}} + +sub sessioncgi ($$) { #{{{ + my $q=shift; + + if ($q->param("do") eq 'remove') { + my $session=shift; + my ($form, $buttons)=confirmation_form($q, $session); + IkiWiki::decode_form_utf8($form); + if ($form->submitted eq 'Cancel') { + error("canceled"); # TODO load state + } + elsif ($form->submitted eq 'Remove' && $form->validate) { + error("removal not yet implemented"); # TODO + } + else { + IkiWiki::showform($form, $buttons, $session, $q); + exit 0; + } + } +} + +1