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 <david@davidnind.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
(cherry picked from commit 5047e0761c)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
Julian Maurice 2023-10-18 16:24:52 +02:00 committed by Fridolin Somers
parent 6694512cf0
commit fe5b461cbf
4 changed files with 71 additions and 0 deletions

View file

@ -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(

View file

@ -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 <http://www.gnu.org/licenses>.
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;
};

View file

@ -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 "";
}

View file

@ -0,0 +1 @@
[% 'included content' ~%]