diff options
-rw-r--r-- | Bugzilla/Config.pm | 16 | ||||
-rwxr-xr-x | editparams.cgi | 13 | ||||
-rw-r--r-- | extensions/example/code/config.pl | 26 | ||||
-rw-r--r-- | extensions/example/lib/ConfigExample.pm | 41 | ||||
-rw-r--r-- | extensions/example/template/en/default/admin/params/example.html.tmpl | 28 |
5 files changed, 113 insertions, 11 deletions
diff --git a/Bugzilla/Config.pm b/Bugzilla/Config.pm index d84970e8c..428c13fe5 100644 --- a/Bugzilla/Config.pm +++ b/Bugzilla/Config.pm @@ -53,9 +53,11 @@ use vars qw(@param_list); our %params; # Load in the param definitions sub _load_params { - foreach my $module (param_panels()) { - eval("require Bugzilla::Config::$module") || die $@; - my @new_param_list = "Bugzilla::Config::$module"->get_param_list(); + my $panels = param_panels(); + foreach my $panel (keys %$panels) { + my $module = $panels->{$panel}; + eval("require $module") || die $@; + my @new_param_list = "$module"->get_param_list(); foreach my $item (@new_param_list) { $params{$item->{'name'}} = $item; } @@ -67,14 +69,16 @@ sub _load_params { # Subroutines go here sub param_panels { - my @param_panels; + my $param_panels = {}; my $libpath = bz_locations()->{'libpath'}; foreach my $item ((glob "$libpath/Bugzilla/Config/*.pm")) { $item =~ m#/([^/]+)\.pm$#; my $module = $1; - push(@param_panels, $module) unless $module eq 'Common'; + $param_panels->{$module} = "Bugzilla::Config::$module" unless $module eq 'Common'; } - return @param_panels; + # Now check for any hooked params + Bugzilla::Hook::process('config', { config => $param_panels }); + return $param_panels; } sub SetParam { diff --git a/editparams.cgi b/editparams.cgi index 39faa16c6..9b0094799 100755 --- a/editparams.cgi +++ b/editparams.cgi @@ -29,6 +29,7 @@ use Bugzilla; use Bugzilla::Constants; use Bugzilla::Config qw(:admin); use Bugzilla::Config::Common; +use Bugzilla::Hook; use Bugzilla::Util; use Bugzilla::Error; use Bugzilla::Token; @@ -56,13 +57,15 @@ $current_panel = $1; my $current_module; my @panels = (); -foreach my $panel (Bugzilla::Config::param_panels()) { - eval("require Bugzilla::Config::$panel") || die $@; - my @module_param_list = "Bugzilla::Config::${panel}"->get_param_list(1); +my $param_panels = Bugzilla::Config::param_panels(); +foreach my $panel (keys %$param_panels) { + my $module = $param_panels->{$panel}; + eval("require $module") || die $@; + my @module_param_list = "$module"->get_param_list(1); my $item = { name => lc($panel), current => ($current_panel eq lc($panel)) ? 1 : 0, param_list => \@module_param_list, - sortkey => eval "\$Bugzilla::Config::${panel}::sortkey;" + sortkey => eval "\$${module}::sortkey;" }; push(@panels, $item); $current_module = $panel if ($current_panel eq lc($panel)); @@ -73,7 +76,7 @@ $vars->{panels} = \@panels; if ($action eq 'save' && $current_module) { check_token_data($token, 'edit_parameters'); my @changes = (); - my @module_param_list = "Bugzilla::Config::${current_module}"->get_param_list(1); + my @module_param_list = "$param_panels->{$current_module}"->get_param_list(1); foreach my $i (@module_param_list) { my $name = $i->{'name'}; diff --git a/extensions/example/code/config.pl b/extensions/example/code/config.pl new file mode 100644 index 000000000..1da490cc2 --- /dev/null +++ b/extensions/example/code/config.pl @@ -0,0 +1,26 @@ +# -*- Mode: perl; indent-tabs-mode: nil -*- +# +# The contents of this file are subject to the Mozilla Public +# License Version 1.1 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS +# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +# implied. See the License for the specific language governing +# rights and limitations under the License. +# +# The Original Code is the Bugzilla Example Plugin. +# +# The Initial Developer of the Original Code is Canonical Ltd. +# Portions created by Canonical Ltd. are Copyright (C) 2008 +# Canonical Ltd. All Rights Reserved. +# +# Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org> +# Bradley Baetz <bbaetz@acm.org> + +use strict; +use warnings; +use Bugzilla; +my $config = Bugzilla->hook_args->{config}; +$config->{Example} = "extensions::example::lib::ConfigExample"; diff --git a/extensions/example/lib/ConfigExample.pm b/extensions/example/lib/ConfigExample.pm new file mode 100644 index 000000000..5ee612de2 --- /dev/null +++ b/extensions/example/lib/ConfigExample.pm @@ -0,0 +1,41 @@ +# -*- Mode: perl; indent-tabs-mode: nil -*- +# +# The contents of this file are subject to the Mozilla Public +# License Version 1.1 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS +# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +# implied. See the License for the specific language governing +# rights and limitations under the License. +# +# The Original Code is the Bugzilla Example Plugin. +# +# The Initial Developer of the Original Code is Canonical Ltd. +# Portions created by Canonical Ltd. are Copyright (C) 2008 +# Canonical Ltd. All Rights Reserved. +# +# Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org> +# Bradley Baetz <bbaetz@acm.org> + +package extensions::example::lib::ConfigExample; +use strict; +use warnings; + +use Bugzilla::Config::Common; + +sub get_param_list { + my ($class) = @_; + + my @param_list = ( + { + name => 'example_string', + type => 't', + default => 'EXAMPLE', + }, + ); + return @param_list; +} + +1; diff --git a/extensions/example/template/en/default/admin/params/example.html.tmpl b/extensions/example/template/en/default/admin/params/example.html.tmpl new file mode 100644 index 000000000..e2bb5f35c --- /dev/null +++ b/extensions/example/template/en/default/admin/params/example.html.tmpl @@ -0,0 +1,28 @@ +[%# + # The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Example Plugin. + # + # The Initial Developer of the Original Code is Canonical Ltd. + # Portions created by Canonical Ltd. are Copyright (C) 2008 + # Canonical Ltd. All Rights Reserved. + # + # Contributor(s): Bradley Baetz <bbaetz@acm.org> + #%] +[% + title = "Example Extension" + desc = "Configure example extension" +%] + +[% param_descs = { + example_string => "Example string", +} +%] |