-# warn "PATH : $path";
-my $filter=sub {
-#my $win=shift;
-$_=~s /\xef\xbb\xbf//g;
-};
- my ($theme, $lang) = themelanguage($htdocs, $tmplbase, $opac, $query);
- my $opacstylesheet = C4::Context->preference('opacstylesheet');
-
-my $template = HTML::Template::Pro->new(filename => "$htdocs/$theme/$lang/$tmplbase", case_sensitive=>1,
- die_on_bad_params => 0,
- global_vars => 1,
- path => ["$htdocs/$theme/$lang/$path"]);
-
- $template->param(themelang => ($opac ne 'intranet'? '/opac-tmpl': '/intranet-tmpl') . "/$theme/$lang",
- interface => ($opac ne 'intranet'? '/opac-tmpl': '/intranet-tmpl'),
- theme => $theme,
- opacstylesheet => $opacstylesheet,
- opaccolorstylesheet => C4::Context->preference('opaccolorstylesheet'),
- opacsmallimage => C4::Context->preference('opacsmallimage'),
- lang => $lang);
-
-
- return $template;
+
+ my ( $theme, $lang ) = themelanguage( $htdocs, $tmplbase, $interface, $query );
+ my $opacstylesheet = C4::Context->preference('opacstylesheet');
+
+ # if the template doesn't exist, load the English one as a last resort
+ my $filename = "$htdocs/$theme/$lang/modules/$tmplbase";
+ unless (-f $filename) {
+ $lang = 'en';
+ $filename = "$htdocs/$theme/$lang/".($interface eq 'intranet'?"modules":"")."/$tmplbase";
+ }
+ my $template = HTML::Template::Pro->new(
+ filename => $filename,
+ die_on_bad_params => 1,
+ global_vars => 1,
+ case_sensitive => 1,
+ path => ["$htdocs/$theme/$lang/$path"]
+ );
+
+ $template->param(
+ themelang => ( $interface ne 'intranet' ? '/opac-tmpl' : '/intranet-tmpl' )
+ . "/$theme/$lang",
+ interface => ( $interface ne 'intranet' ? '/opac-tmpl' : '/intranet-tmpl' ),
+ theme => $theme,
+ opacstylesheet => $opacstylesheet,
+ opaccolorstylesheet => C4::Context->preference('opaccolorstylesheet'),
+ opacsmallimage => C4::Context->preference('opacsmallimage'),
+ lang => $lang
+ );
+
+ # Bidirectionality
+ my $current_lang = regex_lang_subtags($lang);
+ my $bidi;
+ $bidi = get_bidi($current_lang->{script}) if $current_lang->{script};
+
+ # Languages
+ my @template_languages;
+ my $languages_loop = getTranslatedLanguages($interface,$theme);
+
+ for my $language_hashref (@$languages_loop) {
+ $language_hashref->{'current_lang'} = $current_lang->{'language'};
+ $language_hashref->{'native_description'} = language_get_description($language_hashref->{'language_code'},$language_hashref->{'language_code'},'language');
+ #warn "($language_hashref->{'language_code'},$language_hashref->{'current_lang'},$language_hashref->{'script_code'}";
+ $language_hashref->{'locale_description'} = language_get_description($language_hashref->{'language_code'},$language_hashref->{'current_lang'},'language');
+ $language_hashref->{'language_description'} = language_get_description($language_hashref->{'language_code'},$language_hashref->{'current_lang'},'language');
+ $language_hashref->{'script_description'} = language_get_description($language_hashref->{'script_code'},$language_hashref->{'current_lang'},'script');
+ $language_hashref->{'region_description'} = language_get_description($language_hashref->{'region_code'},$language_hashref->{'current_lang'},'region');
+ $language_hashref->{'variant_description'} = language_get_description($language_hashref->{'variant_code'},$language_hashref->{'current_lang'},'variant');
+
+ if ($language_hashref->{'language_lang'} eq $lang) {
+ $language_hashref->{current}++;
+ }
+ push @template_languages, $language_hashref;
+ }
+ # load the languages ( for switching from one template to another )
+ $template->param( languages_loop => \@template_languages,
+ bidi => $bidi
+ );
+
+ return $template;