From 637b35d05add84f71adcf7d0d3cb060b1c3e7349 Mon Sep 17 00:00:00 2001 From: "myk%mozilla.org" <> Date: Mon, 12 Jan 2004 01:12:13 +0000 Subject: Fix for bug 229658: Implements a mechanism for extensions to hook into standard Bugzilla templates so they can extend the Bugzilla UI without having to modify the standard templates themselves, making it easier to develop and use Bugzilla extensions. r=bbaetz, gerv a=myk --- Bugzilla/Template/Plugin/Hook.pm | 83 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Bugzilla/Template/Plugin/Hook.pm (limited to 'Bugzilla/Template/Plugin/Hook.pm') 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 +# + +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, +L -- cgit v1.2.1