From 49c5392ae6c27bac09730138c4a66d38771e8e62 Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Wed, 18 Oct 2023 16:24:52 +0200 Subject: [PATCH] Bug 35070: Add plugin hook template_include_paths It allows to add paths to Template::Toolkit's INCLUDE_PATH option http://template-toolkit.org/docs/manual/Config.html#section_INCLUDE_PATH Test plan: 1. Install the modified kitchen sink plugin: git clone --branch template-include-paths \ https://github.com/jajm/dev-koha-plugin-kitchen-sink.git 2. Run misc/devel/install_plugins.pl 3. Restart memcached and koha 4. Go to Administration -> Manage Plugins 5. Run the KitchenSink plugin's tool 6. Click on "Schedule greeting" 7. Go to Administration -> Manage jobs 8. If you don't see any jobs, uncheck "Current jobs only" 9. You should see a job of type "Unknown job type 'plugin_kitchensink_greeter". Click on the "View" button 10. Under the Report section you should see "This is the report block" 11. Under the Detailed messages section you should see "This is the detail block" 12. Open the browser console, you should see a message "This is the js block" Signed-off-by: David Nind Signed-off-by: Tomas Cohen Arazi Signed-off-by: Katrin Fischer (cherry picked from commit 5047e0761cbb975c262c96cf395e6d6285fdb3c1) Signed-off-by: Fridolin Somers (cherry picked from commit fe5b461cbf127916ae9b2c1c0577541ff4d7e29f) Signed-off-by: Lucas Gass --- C4/Templates.pm | 5 ++ .../Koha/Plugins/TemplateIncludePathHook.t | 57 +++++++++++++++++++ t/lib/plugins/Koha/Plugin/Test.pm | 8 +++ t/lib/plugins/Koha/Plugin/Test/inc/test.inc | 1 + 4 files changed, 71 insertions(+) create mode 100644 t/db_dependent/Koha/Plugins/TemplateIncludePathHook.t create mode 100644 t/lib/plugins/Koha/Plugin/Test/inc/test.inc diff --git a/C4/Templates.pm b/C4/Templates.pm index dd54a6e3f4..ea10a6bd20 100644 --- a/C4/Templates.pm +++ b/C4/Templates.pm @@ -61,6 +61,11 @@ sub new { push @includes, "$htdocs/$_/$lang/includes"; push @includes, "$htdocs/$_/en/includes" unless $lang eq 'en'; } + + my @plugins_include_paths = Koha::Plugins->call( 'template_include_paths', + { interface => $interface, lang => $lang } ); + push @includes, map { $_ ? @$_ : () } @plugins_include_paths; + # Do not use template cache if script is called from commandline my $use_template_cache = C4::Context->config('template_cache_dir') && defined $ENV{GATEWAY_INTERFACE}; my $template = Template->new( diff --git a/t/db_dependent/Koha/Plugins/TemplateIncludePathHook.t b/t/db_dependent/Koha/Plugins/TemplateIncludePathHook.t new file mode 100644 index 0000000000..674127504c --- /dev/null +++ b/t/db_dependent/Koha/Plugins/TemplateIncludePathHook.t @@ -0,0 +1,57 @@ +#!/usr/bin/perl + +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with Koha; if not, see . + +use Modern::Perl; + +use Test::More tests => 4; +use Test::MockModule; +use Test::Warn; + +use File::Basename; + + +BEGIN { + # Mock pluginsdir before loading Plugins module + my $path = dirname(__FILE__) . '/../../../lib/plugins'; + require t::lib::Mocks; + t::lib::Mocks::mock_config( 'enable_plugins', 1 ); + t::lib::Mocks::mock_config( 'pluginsdir', $path ); + + use_ok('Koha::Plugins'); + use_ok('Koha::Plugins::Handler'); + use_ok('Koha::Plugin::Test'); +} + +my $schema = Koha::Database->new->schema; + +subtest 'template_include_paths' => sub { + plan tests => 1; + + $schema->storage->txn_begin; + + Koha::Plugins->new->InstallPlugins(); + Koha::Plugin::Test->new->enable; + + require C4::Templates; + my $c4_template = C4::Templates::gettemplate('intranet-main.tt', 'intranet'); + my $template = $c4_template->{TEMPLATE}; + my $output = ''; + $template->process(\"[% INCLUDE test.inc %]", {}, \$output) || die $template->error(); + is($output, 'included content'); + + $schema->storage->txn_commit; + #Koha::Plugins::Methods->delete; +}; diff --git a/t/lib/plugins/Koha/Plugin/Test.pm b/t/lib/plugins/Koha/Plugin/Test.pm index 6744a7e7f3..1012663cdf 100644 --- a/t/lib/plugins/Koha/Plugin/Test.pm +++ b/t/lib/plugins/Koha/Plugin/Test.pm @@ -369,6 +369,14 @@ sub after_recall_action { "after_recall_action called with action: $action, ref: " . ref($recall) ); } +sub template_include_paths { + my ($self) = @_; + + return [ + $self->mbf_path('inc'), + ]; +} + sub _private_sub { return ""; } diff --git a/t/lib/plugins/Koha/Plugin/Test/inc/test.inc b/t/lib/plugins/Koha/Plugin/Test/inc/test.inc new file mode 100644 index 0000000000..e6edb86a3c --- /dev/null +++ b/t/lib/plugins/Koha/Plugin/Test/inc/test.inc @@ -0,0 +1 @@ +[% 'included content' ~%] -- 2.39.5