From 57e9d113b65e1f0ff1717ce288a771cfe618326e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric=20Demians?= Date: Sat, 29 Jun 2019 08:55:34 +0200 Subject: [PATCH] Bug 23237: Plugin allow [% INCLUDE %] from template From a plugin template it is useful to be able to include other templates with [% INCLUDE %] directives. But TT module is used by Koha with absolute paths. Relative paths are forbidden for security reasons. A new param [% PLUGIN_DIR %] allow plugin templates to know where to find plugin home directory. How to test: 1. Install kitchen-sink plugin. 2. Find tool-step1.tt file, and add this at the begining of the file: [% INCLUDE "$PLUGIN_DIR/header.tt" %] It ask to include a template header.tt which doesn't exit. 3. Run kitchen-sink plugin tool. You must have this error message: Template process failed: file error - _path to plugin directory_/Koha/Plugin/Com/ByWaterSolutions/KitchenSink/header.tt: not found quod erat demonstrandum Signed-off-by: Maryse Simard Signed-off-by: Nick Clemens Signed-off-by: Martin Renvoize (cherry picked from commit 8c517d2f2860c08263f44dfde8d3cadea418694e) Signed-off-by: Fridolin Somers --- Koha/Plugins/Base.pm | 48 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/Koha/Plugins/Base.pm b/Koha/Plugins/Base.pm index 7fe47fcfc5..8a66872215 100644 --- a/Koha/Plugins/Base.pm +++ b/Koha/Plugins/Base.pm @@ -117,6 +117,32 @@ sub retrieve_data { get_template returns a Template object. Eventually this will probably be calling C4:Template, but at the moment, it does not. +The returned template contains 3 variables that can be used in the plugin +templates: + +=over 8 + +=item B + +The name of the plugin class. + +=item B + +Then name of the plugin method used. For example 'tool' or 'report'. + +=item B + +The URL path to the plugin. It can be used in templates in order to localize +ressources like images in html tags, or other templates. + +=item B + +The absolute pathname to the plugin directory. Necessary to include other +templates from a template with the [% INCLUDE %] directive. + +=over + + =cut sub get_template { @@ -140,6 +166,7 @@ sub get_template { CLASS => $self->{'class'}, METHOD => scalar $self->{'cgi'}->param('method'), PLUGIN_PATH => $self->get_plugin_http_path(), + PLUGIN_DIR => $self->get_plugin_dir(), ); return $template; @@ -148,7 +175,10 @@ sub get_template { sub get_metadata { my ( $self, $args ) = @_; - return $self->{'metadata'}; + #FIXME: Why another encoding issue? For metadata containg non latin characters. + my $metadata = $self->{metadata}; + utf8::decode($metadata->{$_}) for keys %$metadata; + return $metadata; } =head2 get_qualified_table_name @@ -183,6 +213,22 @@ sub get_plugin_http_path { return "/plugin/" . join( '/', split( '::', $self->{'class'} ) ); } +=head2 get_plugin_dir + +To [% INCLUDE %] another TT template from a template, an absolute path to the +template is required. This method returns that absolute file system path. + +usage: my $path = $self->get_plugin_dir(); + +=cut + +sub get_plugin_dir { + my ($self) = @_; + + my $base = C4::Context->config('pluginsdir'); + return "$base/" . join( '/', split( '::', $self->{'class'} ) ); +} + =head2 go_home go_home is a quick redirect to the Koha plugins home page -- 2.39.5