diff options
author | Joey Hess <joey@kodama.kitenet.net> | 2008-08-02 23:06:25 -0400 |
---|---|---|
committer | Joey Hess <joey@kodama.kitenet.net> | 2008-08-02 23:06:25 -0400 |
commit | 94c59d3254dd97be541cd8ff03ccf3c29b5a55b8 (patch) | |
tree | 8ab27bee7fcb9078cf7517b7f6cd619d7212ec38 /IkiWiki/Plugin/websetup.pm | |
parent | c762b65ce42c18f026a16ee702cec5dc168a39be (diff) | |
download | ikiwiki-94c59d3254dd97be541cd8ff03ccf3c29b5a55b8.tar ikiwiki-94c59d3254dd97be541cd8ff03ccf3c29b5a55b8.tar.gz |
collect a hash of shown fields
Need to do this to know what fields to take from CGI.
(Can't trust that only safe ones are sent..)
Diffstat (limited to 'IkiWiki/Plugin/websetup.pm')
-rw-r--r-- | IkiWiki/Plugin/websetup.pm | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/IkiWiki/Plugin/websetup.pm b/IkiWiki/Plugin/websetup.pm index 150c792a5..64c4d0991 100644 --- a/IkiWiki/Plugin/websetup.pm +++ b/IkiWiki/Plugin/websetup.pm @@ -78,15 +78,19 @@ sub showfields ($$$@) { #{{{ push @show, $key, \%info; } - return 0 unless @show; + return unless @show; my $section=defined $plugin ? $plugin." ".gettext("plugin") : gettext("main"); + my %shownfields; if (defined $plugin) { - if (! showplugintoggle($form, $plugin, $enabled, $section) && ! $enabled) { + if (showplugintoggle($form, $plugin, $enabled, $section)) { + $shownfields{"enable.$plugin"}=$plugin; + } + elsif (! $enabled) { # plugin not enabled and cannot be, so skip showing # its configuration - return 0; + return; } } @@ -149,9 +153,12 @@ sub showfields ($$$@) { #{{{ $form->field(name => $name, disabled => 1); $form->text(gettext("Note: Disabled options cannot be configured here, but only by editing the setup file.")); } + else { + $shownfields{$name}=$key; + } } - return 1; + return %shownfields; } #}}} sub showplugintoggle ($$$$) { #{{{ @@ -170,7 +177,7 @@ sub showplugintoggle ($$$$) { #{{{ } $form->field( - name => "enable.$plugin", + ame => "enable.$plugin", label => "", type => "checkbox", options => [ [ 1 => sprintf(gettext("enable %s?"), $plugin) ] ], @@ -217,7 +224,7 @@ sub showform ($$) { #{{{ $form->field(name => "do", type => "hidden", value => "setup", force => 1); - showfields($form, undef, undef, IkiWiki::getsetup()); + my %fields=showfields($form, undef, undef, IkiWiki::getsetup()); # record all currently enabled plugins before all are loaded my %enabled_plugins=%IkiWiki::loaded_plugins; @@ -232,19 +239,31 @@ sub showform ($$) { #{{{ # skip all rcs plugins except for the one in use next if $plugin ne $config{rcs} && grep { $_ eq $plugin } @rcs_plugins; - delete $plugins{$plugin} if showfields($form, $plugin, $enabled_plugins{$plugin}, @{$setup}); + my %shown=showfields($form, $plugin, $enabled_plugins{$plugin}, @{$setup}); + if (%shown) { + delete $plugins{$plugin}; + $fields{$_}=$shown{$_} foreach keys %shown; + } } # list all remaining plugins (with no setup options) at the end - showplugintoggle($form, $_, $enabled_plugins{$_}, gettext("other plugins")) - foreach sort keys %plugins; + foreach (sort keys %plugins) { + if (showplugintoggle($form, $_, $enabled_plugins{$_}, gettext("other plugins"))) { + $fields{"enable.$_"}=$_; + } + } if ($form->submitted eq "Cancel") { IkiWiki::redirect($cgi, $config{url}); return; } elsif ($form->submitted eq 'Save Setup' && $form->validate) { - # TODO + foreach my $field (keys %fields) { + # TODO plugin enable/disable + next if $field=~/^enable\./; # plugin + $config{$fields{$field}}=$form->field($field); + } + # TODO save to real path IkiWiki::Setup::dump("/tmp/s"); $form->text(gettext("Setup saved.")); } |