summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbbaetz%acm.org <>2008-05-06 06:01:22 +0200
committerbbaetz%acm.org <>2008-05-06 06:01:22 +0200
commit183719adf844b5497699c60625c6268e1640d9de (patch)
treeaba035a87ca988b7712c9bfff386fbe972fe53be
parent82361875f25e4fba6326ef73bdcecc80b846d79e (diff)
downloadbugzilla-183719adf844b5497699c60625c6268e1640d9de.tar.gz
bugzilla-183719adf844b5497699c60625c6268e1640d9de.tar.xz
Bug 430909 - add hook for parameters
r=mkanat, r/a=lpsolit
-rw-r--r--Bugzilla/Config.pm16
-rwxr-xr-xeditparams.cgi13
-rw-r--r--extensions/example/code/config.pl26
-rw-r--r--extensions/example/lib/ConfigExample.pm41
-rw-r--r--extensions/example/template/en/default/admin/params/example.html.tmpl28
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",
+}
+%]