diff options
author | mkanat%bugzilla.org <> | 2009-10-21 01:08:03 +0200 |
---|---|---|
committer | mkanat%bugzilla.org <> | 2009-10-21 01:08:03 +0200 |
commit | 700f6a062970e2c23510e3f6a47c88e069047a04 (patch) | |
tree | d53c1c06e4f64c4978d666be6131258d1582e1bd | |
parent | 41d57c9f222ccf154eda5ecc2db94b406029a71c (diff) | |
download | bugzilla-700f6a062970e2c23510e3f6a47c88e069047a04.tar.gz bugzilla-700f6a062970e2c23510e3f6a47c88e069047a04.tar.xz |
Bug 394438: Add a hook for adding template vars to any page (Override Template->process)
Patch by Matt Rogers <mattr@kde.org> r=mkanat, a=mkanat
-rw-r--r-- | Bugzilla/Hook.pm | 31 | ||||
-rw-r--r-- | Bugzilla/Template.pm | 13 | ||||
-rw-r--r-- | extensions/example/code/template-before_process.pl | 33 |
3 files changed, 77 insertions, 0 deletions
diff --git a/Bugzilla/Hook.pm b/Bugzilla/Hook.pm index 2cd99c3e7..51bce7fbe 100644 --- a/Bugzilla/Hook.pm +++ b/Bugzilla/Hook.pm @@ -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 diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm index f94cb2e38..2e2ac4b08 100644 --- a/Bugzilla/Template.pm +++ b/Bugzilla/Template.pm @@ -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 index 000000000..66f9a56f6 --- /dev/null +++ b/extensions/example/code/template-before_process.pl @@ -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; +} |