]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 394438: Add a hook for adding template vars to any page (Override Template->process)
authormkanat%bugzilla.org <>
Tue, 20 Oct 2009 23:08:03 +0000 (23:08 +0000)
committermkanat%bugzilla.org <>
Tue, 20 Oct 2009 23:08:03 +0000 (23:08 +0000)
Patch by Matt Rogers <mattr@kde.org> r=mkanat, a=mkanat

Bugzilla/Hook.pm
Bugzilla/Template.pm
extensions/example/code/template-before_process.pl [new file with mode: 0644]

index 2cd99c3e7cdbc09132ba791c99c30e2127575f67..51bce7fbeb92c4bee857c7f7348ec7cf9799f5c3 100644 (file)
@@ -649,6 +649,37 @@ to the user. (F<sanitycheck.cgi>'s C<Status>)
 
 =back
 
+=head2 template-before_process
+
+This hook allows you to define additional variables that will be available to
+the template being processed. You probably want to restrict your hook
+to operating only if a certain file is being loaded (which is why you
+get a C<file> argument below). Otherwise, modifying the C<vars> argument
+will affect every single template in Bugzilla.
+
+Params:
+
+=over
+
+=item C<vars>
+
+The template vars hashref--these are the values that get passed to the
+template. Adding new keys to this hashref will cause those new values
+to also get passed to the template.
+
+=item C<file> 
+
+The name of the template being processed. This is relative
+to the main template directory for the language (i.e. for
+F<template/en/default/bug/show.html.tmpl>, this variable will contain
+C<bug/show.html.tmpl>).
+
+=item C<template>
+
+The L<Bugzilla::Template> object that C<process> was called on.
+
+=back
+
 =head2 webservice
 
 This hook allows you to add your own modules to the WebService. (See
index f94cb2e3805b642d9524c69a476096b5461acccb..2e2ac4b08dfcababeb5029d681709a5baf5a9d0d 100644 (file)
@@ -79,6 +79,19 @@ sub _load_constants {
     return \%constants;
 }
 
+# Overload Template::Process in order to add a hook to allow additional
+# variables to be made available by an extension
+sub process {
+    my $self = shift;
+    my ($file, $vars) = @_;
+
+    Bugzilla::Hook::process("template-before_process", 
+                            { vars => $vars, file => $file, 
+                              template => $self });
+
+    return $self->SUPER::process(@_);
+}
+
 # Returns the path to the templates based on the Accept-Language
 # settings of the user and of the available languages
 # If no Accept-Language is present it uses the defined default
diff --git a/extensions/example/code/template-before_process.pl b/extensions/example/code/template-before_process.pl
new file mode 100644 (file)
index 0000000..66f9a56
--- /dev/null
@@ -0,0 +1,33 @@
+# -*- 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 Matt Rogers.
+# Portions created by the Initial Developer are Copyright (C) 2009
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s): 
+#   Matt Rogers <mattr@kde.org>
+
+use strict;
+use warnings;
+use Bugzilla;
+
+my %args = %{ Bugzilla->hook_args };
+my ($vars, $file, $template) = $args{qw(vars file template)};
+
+$vars->{'example'} = 1;
+
+if ($file =~ m{^bug/show}) {
+    $vars->{'showing_a_bug'} = 1;
+}