skeleton of web setup plugin
authorJoey Hess <joey@kodama.kitenet.net>
Sat, 2 Aug 2008 17:27:58 +0000 (13:27 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Sat, 2 Aug 2008 20:41:35 +0000 (16:41 -0400)
IkiWiki/Plugin/websetup.pm [new file with mode: 0644]

diff --git a/IkiWiki/Plugin/websetup.pm b/IkiWiki/Plugin/websetup.pm
new file mode 100644 (file)
index 0000000..e1536a1
--- /dev/null
@@ -0,0 +1,90 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::websetup;
+
+use warnings;
+use strict;
+use IkiWiki 2.00;
+
+sub import { #{{{
+       hook(type => "sessioncgi", id => "websetup",
+            call => \&sessioncgi);
+       hook(type => "formbuilder_setup", id => "websetup",
+            call => \&formbuilder_setup);
+} # }}}
+
+sub showform ($$) { #{{{
+       my $cgi=shift;
+       my $session=shift;
+
+       if (! defined $session->param("name") || 
+           ! IkiWiki::is_admin($session->param("name"))) {
+               error(gettext("you are not logged in as an admin"));
+       }
+
+       eval q{use CGI::FormBuilder};
+       error($@) if $@;
+
+       my $form = CGI::FormBuilder->new(
+               title => "setup",
+               name => "setup",
+               header => 0,
+               charset => "utf-8",
+               method => 'POST',
+               params => $cgi,
+               action => $config{cgiurl},
+               template => {type => 'div'},
+               stylesheet => IkiWiki::baseurl()."style.css",
+       );
+       my $buttons=["Save Setup", "Cancel"];
+
+       IkiWiki::decode_form_utf8($form);
+       IkiWiki::run_hooks(formbuilder_setup => sub {
+               shift->(form => $form, cgi => $cgi, session => $session,
+                       buttons => $buttons);
+       });
+       IkiWiki::decode_form_utf8($form);
+
+       $form->field(name => "do", type => "hidden", value => "setup",
+               force => 1);
+
+       if (! $form->submitted) {
+               # TODO
+       }
+
+       if ($form->submitted eq "Cancel") {
+               IkiWiki::redirect($cgi, $config{url});
+               return;
+       }
+       elsif ($form->submitted eq 'Save Setup' && $form->validate) {
+               # TODO
+
+               $form->text(gettext("Setup saved."));
+       }
+
+       IkiWiki::showform($form, $buttons, $session, $cgi);
+} #}}}
+
+sub sessioncgi ($$) { #{{{
+       my $cgi=shift;
+       my $session=shift;
+
+       if ($cgi->param("do") eq "setup") {
+               showform($cgi, $session);
+               exit;
+       }
+} #}}}
+
+sub formbuilder_setup (@) { #{{{
+       my %params=@_;
+
+       my $form=$params{form};
+       if ($form->title eq "preferences") {
+               push @{$params{buttons}}, "Wiki Setup";
+               if ($form->submitted && $form->submitted eq "Wiki Setup") {
+                       showform($params{cgi}, $params{session});
+                       exit;
+               }
+       }
+} #}}}
+
+1