From a9ec34d1c1c7973ccc6718c63d1823310d842df0 Mon Sep 17 00:00:00 2001 From: Frédéric Buclin Date: Tue, 11 Jan 2011 00:05:53 +0100 Subject: Bug 624349: Let the config_modify_panels hook add new parameters to existing panels r/a=mkanat --- Bugzilla/Config.pm | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'Bugzilla/Config.pm') diff --git a/Bugzilla/Config.pm b/Bugzilla/Config.pm index a7184866f..a211e3021 100644 --- a/Bugzilla/Config.pm +++ b/Bugzilla/Config.pm @@ -48,8 +48,6 @@ use File::Temp; ); Exporter::export_ok_tags('admin'); -use vars qw(@param_list); - # INITIALISATION CODE # Perl throws a warning if we use bz_locations() directly after do. our %params; @@ -62,15 +60,17 @@ sub _load_params { eval("require $module") || die $@; my @new_param_list = $module->get_param_list(); $hook_panels{lc($panel)} = { params => \@new_param_list }; - foreach my $item (@new_param_list) { - $params{$item->{'name'}} = $item; - } - push(@param_list, @new_param_list); } # This hook is also called in editparams.cgi. This call here is required # to make SetParam work. Bugzilla::Hook::process('config_modify_panels', { panels => \%hook_panels }); + + foreach my $panel (keys %hook_panels) { + foreach my $item (@{$hook_panels{$panel}->{params}}) { + $params{$item->{'name'}} = $item; + } + } } # END INIT CODE @@ -203,8 +203,8 @@ sub update_params { # --- DEFAULTS FOR NEW PARAMS --- _load_params unless %params; - foreach my $item (@param_list) { - my $name = $item->{'name'}; + foreach my $name (keys %params) { + my $item = $params{$name}; unless (exists $param->{$name}) { print "New parameter: $name\n" unless $new_install; if (exists $answer->{$name}) { @@ -223,9 +223,8 @@ sub update_params { my %oldparams; # Remove any old params foreach my $item (keys %$param) { - if (!grep($_ eq $item, map ($_->{'name'}, @param_list))) { - $oldparams{$item} = $param->{$item}; - delete $param->{$item}; + if (!exists $params{$item}) { + $oldparams{$item} = delete $param->{$item}; } } -- cgit v1.2.3-24-g4f1b