From 0d8647eaef2d72c1da8498b9d2afce3c7306081a Mon Sep 17 00:00:00 2001 From: Fridolin Somers Date: Thu, 9 Oct 2014 16:10:24 +0200 Subject: [PATCH] Bug 13053 - Do not use template cache when from commandline You may define in config a folder (usually /tmp) for TT cache : template_cache_dir in etc/koha-conf.xml. Some perl pages may be launched from commandline, like tools/export.pl. Also, the script gather_print_notices.pl uses C4::Templates. The problem is that when script is launched from Apache, the Unix owner of cache files will be www-data. When script is launched from commandline, like in a cronjob, the Unix owner will be different (like a user named "koha"), causing a crash because cache files can only be read by its owner. This script disables the template cache if perl script is called from commandline. This cache is certainly only useful for web access. Using GATEWAY_INTERFACE env var comes from tools/export.pl Test plan : - Use a dev install of koha installed in a user home, ie "/home/kohadev" - Define a folder for template_cache_dir in etc/koha-conf.xml. For example : /tmp - Check there is no cached templates already in this forder - Create a file "bib.list" containing a few existing biblionumbers - As user kohadev, launch : tools/export.pl --record-type=bibs --id_list_file=bib.list - Look at cache folder => Without patch you see cache files owned by user kohadev => With patch there are no cache files - Use the Koha interfaces OPAC and Intranet => Without patch you get an error : Template process failed: file error - cache failed to write ... => With patch you have no error and cache files are generated with Apache user as owner Signed-off-by: Chris Cormack --- C4/Templates.pm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/C4/Templates.pm b/C4/Templates.pm index 6a9d48b..ae1c878 100644 --- a/C4/Templates.pm +++ b/C4/Templates.pm @@ -59,12 +59,14 @@ sub new { push @includes, "$htdocs/$_/$lang/includes"; push @includes, "$htdocs/$_/en/includes" unless $lang eq 'en'; } + # 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( { EVAL_PERL => 1, ABSOLUTE => 1, PLUGIN_BASE => 'Koha::Template::Plugin', - COMPILE_EXT => C4::Context->config('template_cache_dir')?'.ttc':'', - COMPILE_DIR => C4::Context->config('template_cache_dir')?C4::Context->config('template_cache_dir'):'',, + COMPILE_EXT => $use_template_cache ? '.ttc' : '', + COMPILE_DIR => $use_template_cache ? C4::Context->config('template_cache_dir') : '', INCLUDE_PATH => \@includes, FILTERS => {}, } -- 2.1.0