diff options
Diffstat (limited to 'Bugzilla/Template/Plugin/Hook.pm')
-rw-r--r-- | Bugzilla/Template/Plugin/Hook.pm | 111 |
1 files changed, 55 insertions, 56 deletions
diff --git a/Bugzilla/Template/Plugin/Hook.pm b/Bugzilla/Template/Plugin/Hook.pm index 669c77614..c57db4223 100644 --- a/Bugzilla/Template/Plugin/Hook.pm +++ b/Bugzilla/Template/Plugin/Hook.pm @@ -14,81 +14,80 @@ use warnings; use parent qw(Template::Plugin); use Bugzilla::Constants; -use Bugzilla::Install::Util qw(template_include_path); +use Bugzilla::Install::Util qw(template_include_path); use Bugzilla::Util; use Bugzilla::Error; use File::Spec; sub new { - my ($class, $context) = @_; - return bless { _CONTEXT => $context }, $class; + my ($class, $context) = @_; + return bless {_CONTEXT => $context}, $class; } sub _context { return $_[0]->{_CONTEXT} } sub process { - my ($self, $hook_name, $template) = @_; - my $context = $self->_context(); - $template ||= $context->stash->{component}->{name}; - - # sanity check: - if (!$template =~ /[\w\.\/\-_\\]+/) { - ThrowCodeError('template_invalid', { name => $template }); - } - - my (undef, $path, $filename) = File::Spec->splitpath($template); - $path ||= ''; - $filename =~ m/(.+)\.(.+)\.tmpl$/; - my $template_name = $1; - my $type = $2; - - # Hooks are named like this: - my $extension_template = "$path$template_name-$hook_name.$type.tmpl"; - - # Get the hooks out of the cache if they exist. Otherwise, read them - # from the disk. - my $cache = Bugzilla->request_cache->{template_plugin_hook_cache} ||= {}; - my $lang = $context->{bz_language} || ''; - $cache->{"${lang}__$extension_template"} - ||= $self->_get_hooks($extension_template); - - # process() accepts an arrayref of templates, so we just pass the whole - # arrayref. - $context->{bz_in_hook} = 1; # See Bugzilla::Template::Context - return $context->process($cache->{"${lang}__$extension_template"}); + my ($self, $hook_name, $template) = @_; + my $context = $self->_context(); + $template ||= $context->stash->{component}->{name}; + + # sanity check: + if (!$template =~ /[\w\.\/\-_\\]+/) { + ThrowCodeError('template_invalid', {name => $template}); + } + + my (undef, $path, $filename) = File::Spec->splitpath($template); + $path ||= ''; + $filename =~ m/(.+)\.(.+)\.tmpl$/; + my $template_name = $1; + my $type = $2; + + # Hooks are named like this: + my $extension_template = "$path$template_name-$hook_name.$type.tmpl"; + + # Get the hooks out of the cache if they exist. Otherwise, read them + # from the disk. + my $cache = Bugzilla->request_cache->{template_plugin_hook_cache} ||= {}; + my $lang = $context->{bz_language} || ''; + $cache->{"${lang}__$extension_template"} + ||= $self->_get_hooks($extension_template); + + # process() accepts an arrayref of templates, so we just pass the whole + # arrayref. + $context->{bz_in_hook} = 1; # See Bugzilla::Template::Context + return $context->process($cache->{"${lang}__$extension_template"}); } sub _get_hooks { - my ($self, $extension_template) = @_; - - my $template_sets = $self->_template_hook_include_path(); - my @hooks; - foreach my $dir_set (@$template_sets) { - foreach my $template_dir (@$dir_set) { - my $file = "$template_dir/hook/$extension_template"; - if (-e $file) { - my $template = $self->_context->template($file); - push(@hooks, $template); - # Don't run the hook for more than one language. - last; - } - } + my ($self, $extension_template) = @_; + + my $template_sets = $self->_template_hook_include_path(); + my @hooks; + foreach my $dir_set (@$template_sets) { + foreach my $template_dir (@$dir_set) { + my $file = "$template_dir/hook/$extension_template"; + if (-e $file) { + my $template = $self->_context->template($file); + push(@hooks, $template); + + # Don't run the hook for more than one language. + last; + } } + } - return \@hooks; + return \@hooks; } sub _template_hook_include_path { - my $self = shift; - my $cache = Bugzilla->request_cache; - my $language = $self->_context->{bz_language} || ''; - my $cache_key = "template_plugin_hook_include_path_$language"; - $cache->{$cache_key} ||= template_include_path({ - language => $language, - hook => 1, - }); - return $cache->{$cache_key}; + my $self = shift; + my $cache = Bugzilla->request_cache; + my $language = $self->_context->{bz_language} || ''; + my $cache_key = "template_plugin_hook_include_path_$language"; + $cache->{$cache_key} + ||= template_include_path({language => $language, hook => 1,}); + return $cache->{$cache_key}; } 1; |