]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 430909 - add hook for parameters
authorbbaetz%acm.org <>
Tue, 6 May 2008 04:01:22 +0000 (04:01 +0000)
committerbbaetz%acm.org <>
Tue, 6 May 2008 04:01:22 +0000 (04:01 +0000)
r=mkanat, r/a=lpsolit

Bugzilla/Config.pm
editparams.cgi
extensions/example/code/config.pl [new file with mode: 0644]
extensions/example/lib/ConfigExample.pm [new file with mode: 0644]
extensions/example/template/en/default/admin/params/example.html.tmpl [new file with mode: 0644]

index d84970e8cf34b991afe332e2429750a969a56f90..428c13fe51fed2faa99717b52481a94507844d82 100644 (file)
@@ -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 {
index 39faa16c6ecbd4d5f62dcff7a8b09258a9d06524..9b0094799362961dc698b20f076ed28b9f95f48d 100755 (executable)
@@ -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 (file)
index 0000000..1da490c
--- /dev/null
@@ -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 (file)
index 0000000..5ee612d
--- /dev/null
@@ -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 (file)
index 0000000..e2bb5f3
--- /dev/null
@@ -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",
+}
+%]