+
+=item pathtotemplate
+
+ %values = &pathtotemplate(template => $template,
+ theme => $themename,
+ language => $language,
+ type => $ptype,
+ path => $includedir);
+
+Finds a directory containing the desired template. The C<template>
+argument specifies the template you're looking for (this should be the
+name of the script you're using to generate an HTML page, without the
+C<.pl> extension). Only the C<template> argument is required; the
+others are optional.
+
+C<theme> specifies the name of the theme to use. This will be used
+only if it is allowed by the C<allowthemeoverride> system preference
+option (in the C<systempreferences> table of the Koha database).
+
+C<language> specifies the desired language. If not specified,
+C<&pathtotemplate> will use the list of acceptable languages specified
+by the browser, then C<all>, and finally C<en> as fallback options.
+
+C<type> may be C<intranet>, C<opac>, C<none>, or some other value.
+C<intranet> and C<opac> specify that you want a template for the
+internal web site or the public OPAC, respectively. C<none> specifies
+that the template you're looking for is at the top level of one of the
+include directories. Any other value is taken as-is, as a subdirectory
+of one of the include directories.
+
+C<path> specifies an include directory.
+
+C<&pathtotemplate> searches first in the directory given by the
+C<path> argument, if any, then in the directories given by the
+C<templatedirectory> and C<includes> directives in F</etc/koha.conf>,
+in that order.
+
+C<&pathtotemplate> returns a hash with the following keys:
+
+=over 4
+
+=item C<path>
+
+The full pathname to the desired template.
+
+=item C<foundlanguage>
+
+The value is set to 1 if a template in the desired language was found,
+or 0 otherwise.
+
+=item C<foundtheme>
+
+The value is set to 1 if a template of the desired theme was found, or
+0 otherwise.
+
+=back
+
+If C<&pathtotemplate> cannot find an acceptable template, it returns 0.
+
+Note that if a template of the desired language or theme cannot be
+found, C<&pathtotemplate> will print a warning message. Unless you've
+set C<$SIG{__WARN__}>, though, this won't show up in the output HTML
+document.
+
+=cut
+#'
+# FIXME - Fix POD: it doesn't look in the directory given by the
+# 'includes' option in /etc/koha.conf.
+sub pathtotemplate {
+ my %params = @_;
+ my $template = $params{'template'};
+ my $themeor = $params{'theme'};
+ my $languageor = lc($params{'language'});
+ my $ptype = lc($params{'type'} or 'intranet');
+
+ # FIXME - Make sure $params{'template'} was given. Or else assume
+ # "default".
+ my $type;
+ if ($ptype eq 'opac') {$type = 'opac-tmpl/'; }
+ elsif ($ptype eq 'none') {$type = ''; }
+ elsif ($ptype eq 'intranet') {$type = 'intranet-tmpl/'; }
+ else {$type = $ptype . '/'; }
+
+ my %returns;
+ my $theme = C4::Context->preference("theme") || "default";
+ if ($themeor and
+ C4::Context->preference("allowthemeoverride") =~ qr/$themeor/i)
+ {
+ $theme = $themeor;
+ }
+ my @languageorder = getlanguageorder();
+ my $language = $languageor || shift(@languageorder);
+
+ #where to search for templates
+ my @tmpldirs = ("$path/templates", $path);
+ unshift (@tmpldirs, C4::Context->config('templatedirectory')) if C4::Context->config('templatedirectory');
+ unshift (@tmpldirs, $params{'path'}) if $params{'path'};
+
+ my ($etheme, $elanguage, $epath);
+
+ CHECK: foreach my $edir (@tmpldirs) {
+ foreach $etheme ($theme, 'all', 'default') {
+ foreach $elanguage ($language, @languageorder, 'all','en') {
+ # 'en' is the fallback-language
+ if (-e "$edir/$type$etheme/$elanguage/$template") {
+ $epath = "$edir/$type$etheme/$elanguage/$template";
+ last CHECK;
+ }
+ }
+ }
+ }
+
+ unless ($epath) {
+ warn "Could not find $template in @tmpldirs";
+ return 0;
+ }
+
+ if ($language eq $elanguage) {
+ $returns{'foundlanguage'} = 1;
+ } else {
+ $returns{'foundlanguage'} = 0;
+ warn "The language $language could not be found for $template of $theme.\nServing $elanguage instead.\n";
+ }
+ if ($theme eq $etheme) {
+ $returns{'foundtheme'} = 1;
+ } else {
+ $returns{'foundtheme'} = 0;
+ warn "The template $template could not be found for theme $theme.\nServing $template of $etheme instead.\n";
+ }
+
+ $returns{'path'} = $epath;
+
+ return (%returns);