summaryrefslogtreecommitdiffstats
path: root/Bugzilla
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla')
-rw-r--r--Bugzilla/Template.pm5
-rw-r--r--Bugzilla/Template/Plugin/Hook.pm83
2 files changed, 88 insertions, 0 deletions
diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm
index d981c7a59..d370627d3 100644
--- a/Bugzilla/Template.pm
+++ b/Bugzilla/Template.pm
@@ -79,6 +79,7 @@ sub getTemplateIncludePath () {
if (not ($languages =~ /,/)) {
return $template_include_path =
["$templatedir/$languages/custom",
+ "$templatedir/$languages/extension",
"$templatedir/$languages/default"];
}
my @languages = sortAcceptLanguage($languages);
@@ -97,6 +98,7 @@ sub getTemplateIncludePath () {
push(@usedlanguages, Param('defaultlanguage'));
return $template_include_path =
[map(("$templatedir/$_/custom",
+ "$templatedir/$_/extension",
"$templatedir/$_/default"),
@usedlanguages)];
}
@@ -185,6 +187,9 @@ sub create {
COMPILE_DIR => "$datadir/template",
+ # Initialize templates (f.e. by loading plugins like Hook).
+ PRE_PROCESS => "global/initialize.none.tmpl",
+
# Functions for processing text within templates in various ways.
# IMPORTANT! When adding a filter here that does not override a
# built-in filter, please also add a stub filter to checksetup.pl
diff --git a/Bugzilla/Template/Plugin/Hook.pm b/Bugzilla/Template/Plugin/Hook.pm
new file mode 100644
index 000000000..b189c5d26
--- /dev/null
+++ b/Bugzilla/Template/Plugin/Hook.pm
@@ -0,0 +1,83 @@
+# -*- 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 Bug Tracking System.
+#
+# The Initial Developer of the Original Code is Netscape Communications
+# Corporation. Portions created by Netscape are
+# Copyright (C) 1998 Netscape Communications Corporation. All
+# Rights Reserved.
+#
+# Contributor(s): Myk Melez <myk@mozilla.org>
+#
+
+package Bugzilla::Template::Plugin::Hook;
+
+use strict;
+
+use base qw(Template::Plugin);
+
+sub load {
+ my ($class, $context) = @_;
+ return $class;
+}
+
+sub new {
+ my ($class, $context) = @_;
+ return bless { _CONTEXT => $context }, $class;
+}
+
+sub process {
+ my ($self, $hook_name) = @_;
+
+ my $paths = $self->{_CONTEXT}->{LOAD_TEMPLATES}->[0]->paths;
+ my $template = $self->{_CONTEXT}->stash->{component}->{name};
+ my @hooks = ();
+
+ foreach my $path (@$paths) {
+ my @files = glob("$path/hook/$template/$hook_name/*.tmpl");
+
+ # Have to remove the templates path (INCLUDE_PATH) from the
+ # file path since the template processor auto-adds it back.
+ @files = map($_ =~ /^$path\/(.*)$/ ? $1 : {}, @files);
+
+ # Add found files to the list of hooks, but removing duplicates,
+ # which can happen when there are identical hooks or duplicate
+ # directories in the INCLUDE_PATH (the latter probably being a TT bug).
+ foreach my $file (@files) {
+ push(@hooks, $file) unless grep($file eq $_, @hooks);
+ }
+ }
+
+ my $output;
+ foreach my $hook (@hooks) {
+ $output .= $self->{_CONTEXT}->process($hook);
+ }
+ return $output;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Bugzilla::Template::Plugin::Hook
+
+=head1 DESCRIPTION
+
+Template Toolkit plugin to process hooks added into templates by extensions.
+
+=head1 SEE ALSO
+
+L<Template::Plugin>,
+L<http://bugzilla.mozilla.org/show_bug.cgi?id=229658>