From cb4f9ff1b99f389e8890f9c964170027d17e0fd1 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" --- 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 dd54a6e3f41..ea10a6bd20e 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 00000000000..674127504c3 --- /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 6744a7e7f3f..1012663cdfe 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 00000000000..e6edb86a3c2 --- /dev/null +++ b/t/lib/plugins/Koha/Plugin/Test/inc/test.inc @@ -0,0 +1 @@ +[% 'included content' ~%] -- 2.30.2