summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Template/Plugin
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla/Template/Plugin')
-rw-r--r--Bugzilla/Template/Plugin/Hook.pm83
1 files changed, 83 insertions, 0 deletions
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>