@ -29,7 +29,6 @@ use strict;
#use warnings; FIXME - Bug 2505
use C4::Context ;
use C4::Languages qw( getTranslatedLanguages get_bidi regex_lang_subtags language_get_description accept_language ) ;
use C4::Dates qw( format_date ) ;
use C4::Budgets qw( GetCurrency ) ;
use C4::Templates ;
@ -43,192 +42,16 @@ BEGIN {
require Exporter ;
@ ISA = qw( Exporter ) ;
@ EXPORT_OK = qw( &is_ajax ajax_fail ) ; # More stuff should go here instead
% EXPORT_TAGS = ( all = > [ qw( &themelanguage &gettemplate setlanguagecookie pagination_bar
& output_with_http_headers & output_html_with_http_headers ) ] ,
% EXPORT_TAGS = ( all = > [ qw( &pagination_bar
& output_with_http_headers & output_html_with_http_headers ) ] ,
ajax = > [ qw( &output_with_http_headers is_ajax ) ] ,
html = > [ qw( &output_with_http_headers &output_html_with_http_headers ) ]
) ;
push @ EXPORT , qw(
& themelanguage & gettemplate setlanguagecookie getlanguagecookie pagination_bar
) ;
push @ EXPORT , qw(
& output_html_with_http_headers & output_with_http_headers FormatData FormatNumber
) ;
}
= head1 NAME
C4:: Output - Functions for managing templates
= head1 FUNCTIONS
= over 2
= cut
#FIXME: this is a quick fix to stop rc1 installing broken
#Still trying to figure out the correct fix.
my $ path = C4::Context - > config ( 'intrahtdocs' ) . "/prog/en/includes/" ;
#---------------------------------------------------------------------------------------------------------
# FIXME - POD
sub _get_template_file {
my ( $ tmplbase , $ interface , $ query ) = @ _ ;
my $ htdocs = C4::Context - > config ( $ interface ne 'intranet' ? 'opachtdocs' : 'intrahtdocs' ) ;
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/modules/$tmplbase" ;
}
return ( $ htdocs , $ theme , $ lang , $ filename ) ;
}
sub gettemplate {
my ( $ tmplbase , $ interface , $ query ) = @ _ ;
( $ query ) or warn "no query in gettemplate" ;
my $ path = C4::Context - > preference ( 'intranet_includes' ) || 'includes' ;
my $ opacstylesheet = C4::Context - > preference ( 'opacstylesheet' ) ;
$ tmplbase =~ s/\.tmpl$/.tt/ ;
my ( $ htdocs , $ theme , $ lang , $ filename ) = _get_template_file ( $ tmplbase , $ interface , $ query ) ;
my $ template = C4::Templates - > new ( $ interface , $ filename , $ tmplbase ) ;
my $ themelang = ( $ interface ne 'intranet' ? '/opac-tmpl' : '/intranet-tmpl' )
. "/$theme/$lang" ;
$ template - > param (
themelang = > $ themelang ,
yuipath = > ( C4::Context - > preference ( "yuipath" ) eq "local" ? "$themelang/lib/yui" : C4::Context - > preference ( "yuipath" ) ) ,
interface = > ( $ interface ne 'intranet' ? '/opac-tmpl' : '/intranet-tmpl' ) ,
theme = > $ theme ,
lang = > $ lang
) ;
# Bidirectionality
my $ current_lang = regex_lang_subtags ( $ lang ) ;
my $ bidi ;
$ bidi = get_bidi ( $ current_lang - > { script } ) if $ current_lang - > { script } ;
# Languages
my $ languages_loop = getTranslatedLanguages ( $ interface , $ theme , $ lang ) ;
my $ num_languages_enabled = 0 ;
foreach my $ lang ( @$ languages_loop ) {
foreach my $ sublang ( @ { $ lang - > { 'sublanguages_loop' } } ) {
$ num_languages_enabled + + if $ sublang - > { enabled } ;
}
}
$ template - > param (
languages_loop = > $ languages_loop ,
bidi = > $ bidi ,
one_language_enabled = > ( $ num_languages_enabled <= 1 ) ? 1 : 0 , # deal with zero enabled langs as well
) unless @$ languages_loop < 2 ;
return $ template ;
}
# FIXME - this is a horrible hack to cache
# the current known-good language, temporarily
# put in place to resolve bug 4403. It is
# used only by C4::XSLT::XSLTParse4Display;
# the language is set via the usual call
# to themelanguage.
my $ _current_language = 'en' ;
sub _current_language {
return $ _current_language ;
}
#---------------------------------------------------------------------------------------------------------
# FIXME - POD
sub themelanguage {
my ( $ htdocs , $ tmpl , $ interface , $ query ) = @ _ ;
( $ query ) or warn "no query in themelanguage" ;
# Set some defaults for language and theme
# First, check the user's preferences
my $ lang ;
my $ http_accept_language = $ ENV { HTTP_ACCEPT_LANGUAGE } ;
$ lang = accept_language ( $ http_accept_language ,
getTranslatedLanguages ( $ interface , 'prog' ) )
if $ http_accept_language ;
# But, if there's a cookie set, obey it
$ lang = $ query - > cookie ( 'KohaOpacLanguage' ) if ( defined $ query and $ query - > cookie ( 'KohaOpacLanguage' ) ) ;
# Fall back to English
my @ languages ;
if ( $ interface eq 'intranet' ) {
@ languages = split "," , C4::Context - > preference ( "language" ) ;
} else {
@ languages = split "," , C4::Context - > preference ( "opaclanguages" ) ;
}
if ( $ lang ) {
@ languages = ( $ lang , @ languages ) ;
} else {
$ lang = $ languages [ 0 ] ;
}
my $ theme = 'prog' ; # in the event of theme failure default to 'prog' -fbcit
my $ dbh = C4::Context - > dbh ;
my @ themes ;
if ( $ interface eq "intranet" ) {
@ themes = split " " , C4::Context - > preference ( "template" ) ;
}
else {
# we are in the opac here, what im trying to do is let the individual user
# set the theme they want to use.
# and perhaps the them as well.
#my $lang = $query->cookie('KohaOpacLanguage');
@ themes = split " " , C4::Context - > preference ( "opacthemes" ) ;
}
# searches through the themes and languages. First template it find it returns.
# Priority is for getting the theme right.
THEME:
foreach my $ th ( @ themes ) {
foreach my $ la ( @ languages ) {
#for ( my $pass = 1 ; $pass <= 2 ; $pass += 1 ) {
# warn "$htdocs/$th/$la/modules/$interface-"."tmpl";
#$la =~ s/([-_])/ $1 eq '-'? '_': '-' /eg if $pass == 2;
if ( - e "$htdocs/$th/$la/modules/$tmpl" ) {
#".($interface eq 'intranet'?"modules":"")."/$tmpl" ) {
$ theme = $ th ;
$ lang = $ la ;
last THEME ;
}
last unless $ la =~ /[-_]/ ;
#}
}
}
$ _current_language = $ lang ; # FIXME part of bad hack to paper over bug 4403
return ( $ theme , $ lang ) ;
}
sub setlanguagecookie {
my ( $ query , $ language , $ uri ) = @ _ ;
my $ cookie = $ query - > cookie (
- name = > 'KohaOpacLanguage' ,
- value = > $ language ,
- expires = > ''
) ;
print $ query - > redirect (
- uri = > $ uri ,
- cookie = > $ cookie
& output_html_with_http_headers & output_with_http_headers FormatData FormatNumber pagination_bar
) ;
}
sub getlanguagecookie {
my ( $ query ) = @ _ ;
my $ lang ;
if ( $ query - > cookie ( 'KohaOpacLanguage' ) ) {
$ lang = $ query - > cookie ( 'KohaOpacLanguage' ) ;
} else {
$ lang = $ ENV { HTTP_ACCEPT_LANGUAGE } ;
}
$ lang = substr ( $ lang , 0 , 2 ) ;
return $ lang ;
}
= item FormatNumber
= cut