# amazon_s3 is not something that should be enabled via the web.
# external is not a standalone plugin.
-my @default_force_plugins=(qw{amazon_s3 external});
+my @force_plugins=(qw{amazon_s3 external});
sub import { #{{{
hook(type => "getsetup", id => "websetup", call => \&getsetup);
return
websetup_force_plugins => {
type => "string",
- example => \@default_force_plugins,
+ example => [],
description => "list of plugins that cannot be enabled/disabled via the web interface",
safe => 0,
rebuild => 0,
my $key=shift;
my %info=%{shift()};
- # skip complex or internal settings
- next if ref $config{$key} || ref $info{example} || $info{type} eq "internal";
+ # skip internal settings
+ next if $info{type} eq "internal";
+ # XXX hashes not handled yet
+ next if ref $config{$key} && ref $config{$key} eq 'HASH' || ref $info{example} eq 'HASH';
# maybe skip unsafe settings
next if ! $info{safe} && ! $config{websetup_show_unsafe};
# these are handled specially, so don't show
my $key=shift @show;
my %info=%{shift @show};
- my $description=exists $info{description_html} ? $info{description_html} : $info{description};
+ my $description=$info{description};
+ if (exists $info{link} && length $info{link}) {
+ if ($info{link} =~ /^\w+:\/\//) {
+ $description="<a href=\"$info{link}\">$description</a>";
+ }
+ else {
+ $description=htmllink("", "", $info{link}, noimageinline => 1, linktext => $description);
+ }
+ }
+
my $value=$config{$key};
+ if (ref $config{$key} eq 'ARRAY' || ref $info{example} eq 'ARRAY') {
+ push @{$value}, "", ""; # blank items for expansion
+ }
+
# multiple plugins can have the same field
my $name=defined $plugin ? $plugin.".".$key : $key;
-
+
if ($info{type} eq "string") {
$form->field(
name => $name,
my $section=shift;
if (exists $config{websetup_force_plugins} &&
- grep { $_ eq $plugin } @{$config{websetup_force_plugins}}, @rcs_plugins) {
+ grep { $_ eq $plugin } @{$config{websetup_force_plugins}}) {
return 0;
}
- elsif (! exists $config{websetup_force_plugins} &&
- grep { $_ eq $plugin } @default_force_plugins, @rcs_plugins) {
+ if (grep { $_ eq $plugin } @force_plugins, @rcs_plugins) {
return 0;
}
$form->field(
- ame => "enable.$plugin",
+ name => "enable.$plugin",
label => "",
type => "checkbox",
options => [ [ 1 => sprintf(gettext("enable %s?"), $plugin) ] ],
elsif (($form->submitted eq 'Save Setup' || $form->submitted eq 'Rebuild Wiki') && $form->validate) {
my %rebuild;
foreach my $field (keys %fields) {
- # TODO plugin enable/disable
- next if $field=~/^enable\./; # plugin
-
- my $key=$fields{$field}->[0];
+ if ($field=~/^enable\./) {
+ # rebuild is overkill for many plugins,
+ # but no good way to tell which
+ $rebuild{$field}=1; # TODO only if state changed tho
+ # TODO plugin enable/disable
+ next;
+ }
+
my %info=%{$fields{$field}->[1]};
- my $value=$form->field($field);
-
+ my $key=$fields{$field}->[0];
+ my @value=$form->field($field);
+
if (! $info{safe}) {
- error("unsafe field $key"); # should never happen
+ error("unsafe field $key"); # should never happen
}
- next unless defined $value;
+ next unless @value;
# Avoid setting fields to empty strings,
# if they were not set before.
- next if ! defined $config{$key} && ! length $value;
+ next if ! defined $config{$key} && ! grep { length $_ } @value;
- if ($info{rebuild} && (! defined $config{$key} || $config{$key} ne $value)) {
- $rebuild{$field}=1;
+ if (ref $config{$key} eq "ARRAY" || ref $info{example} eq "ARRAY") {
+ if ($info{rebuild} && (! defined $config{$key} || (@{$config{$key}}) != (@value))) {
+ $rebuild{$field}=1;
+ }
+ $config{$key}=\@value;
}
-
- $config{$key}=$value;
+ elsif (ref $config{$key} || ref $info{example}) {
+ error("complex field $key"); # should never happen
+ }
+ else {
+ if ($info{rebuild} && (! defined $config{$key} || $config{$key} ne $value[0])) {
+ $rebuild{$field}=1;
+ }
+ $config{$key}=$value[0];
+ }
}
if (%rebuild && $form->submitted eq 'Save Setup') {