summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin/remove.pm
blob: 77ddd63ba7de731cefdef1702520c4268d3005ce (plain)
  1. #!/usr/bin/perl
  2. package IkiWiki::Plugin::remove;
  3. use warnings;
  4. use strict;
  5. use IkiWiki 2.00;
  6. sub import { #{{{
  7. hook(type => "formbuilder_setup", id => "remove", call => \&formbuilder_setup);
  8. hook(type => "formbuilder", id => "remove", call => \&formbuilder);
  9. hook(type => "sessioncgi", id => "remove", call => \&sessioncgi);
  10. } # }}}
  11. sub formbuilder_setup (@) { #{{{
  12. my %params=@_;
  13. my $form=$params{form};
  14. my $q=$params{cgi};
  15. if (defined $form->field("do") && $form->field("do") eq "edit") {
  16. push @{$params{buttons}}, "Remove";
  17. # TODO button for attachments
  18. }
  19. } #}}}
  20. sub confirmation_form ($$) { #{{{
  21. my $q=shift;
  22. my $session=shift;
  23. eval q{use CGI::FormBuilder};
  24. error($@) if $@;
  25. my @fields=qw(do page);
  26. my $f = CGI::FormBuilder->new(
  27. title => "confirm removal",
  28. name => "remove",
  29. header => 0,
  30. charset => "utf-8",
  31. method => 'POST',
  32. javascript => 0,
  33. params => $q,
  34. action => $config{cgiurl},
  35. stylesheet => IkiWiki::baseurl()."style.css",
  36. fields => \@fields,
  37. );
  38. $f->field(name => "do", type => "hidden", value => "remove", force => 1);
  39. $f->field(name => "page", label => "Will remove:", validate => sub {
  40. my $page=shift;
  41. if (! exists $pagesources{$page}) {
  42. $f->field(name => "page", message => gettext("page does not exist"));
  43. return 0;
  44. }
  45. else {
  46. IkiWiki::check_canedit($page, $q, $session);
  47. return 1;
  48. }
  49. });
  50. return $f, ["Remove", "Cancel"];
  51. } #}}}
  52. sub formbuilder (@) { #{{{
  53. my %params=@_;
  54. my $form=$params{form};
  55. if (defined $form->field("do") && $form->field("do") eq "edit" &&
  56. $form->submitted eq "Remove") {
  57. # When the remove button is pressed on the edit form,
  58. # save the rest of the form state and generate a small
  59. # remove confirmation form.
  60. # TODO save state
  61. my $q=$params{cgi};
  62. my $session=$params{session};
  63. my ($f, $buttons)=confirmation_form($q, $session);
  64. $f->field(name => "page", value => $form->field("page"),
  65. force => 1);
  66. IkiWiki::showform($f, $buttons, $session, $q);
  67. exit 0;
  68. }
  69. } #}}}
  70. sub sessioncgi ($$) { #{{{
  71. my $q=shift;
  72. if ($q->param("do") eq 'remove') {
  73. my $session=shift;
  74. my ($form, $buttons)=confirmation_form($q, $session);
  75. IkiWiki::decode_form_utf8($form);
  76. if ($form->submitted eq 'Cancel') {
  77. error("canceled"); # TODO load state
  78. }
  79. elsif ($form->submitted eq 'Remove' && $form->validate) {
  80. error("removal not yet implemented"); # TODO
  81. }
  82. else {
  83. IkiWiki::showform($form, $buttons, $session, $q);
  84. exit 0;
  85. }
  86. }
  87. }
  88. 1