X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FOutput.pm;h=9087075ee5153866725466d6583ec73fc8a5f51c;hb=e7971380e8ff699b57d0c02b2406eca254dfd04a;hp=abd8fc36398f1d1727c161762c00b6ebbfcf3889;hpb=51f067fcb23ae2c84ead4acfd3b65e825b976e1a;p=koha.git diff --git a/C4/Output.pm b/C4/Output.pm index abd8fc3639..9087075ee5 100644 --- a/C4/Output.pm +++ b/C4/Output.pm @@ -29,12 +29,10 @@ 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; -#use HTML::Template::Pro; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); BEGIN { @@ -43,202 +41,26 @@ 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 + &output_html_with_http_headers &output_with_http_headers FormatData FormatNumber pagination_bar ); } + =head1 NAME -C4::Output - Functions for managing templates +C4::Output - Functions for managing output, is slowly being deprecated =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'); - my ( $htdocs, $theme, $lang, $filename ) = _get_template_file( $tmplbase, $interface, $query ); - -# my $template = HTML::Template::Pro->new( -# filename => $filename, -# die_on_bad_params => 1, -# global_vars => 1, -# case_sensitive => 1, -# loop_context_vars => 1, # enable: __first__, __last__, __inner__, __odd__, __counter__ -# path => ["$htdocs/$theme/$lang/$path"] -# ); - $filename =~ s/\.tmpl$/.tt/; - my $template = C4::Templates->new( $interface, $filename); - 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 - ); -} - -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 sub FormatNumber{ @@ -469,17 +291,18 @@ sub output_with_http_headers($$$$;$) { $options->{'Content-Style-Type' } = 'text/css'; $options->{'Content-Script-Type'} = 'text/javascript'; } - # remove SUDOC specific NSB NSE - $data =~ s/\x{C2}\x{98}|\x{C2}\x{9C}/ /g; - $data =~ s/\x{C2}\x{88}|\x{C2}\x{89}/ /g; - utf8::encode($data) if utf8::is_utf8($data); +# We can't encode here, that will double encode our templates, and xslt +# We need to fix the encoding as it comes out of the database, or when we pass the variables to templates + +# utf8::encode($data) if utf8::is_utf8($data); + + $data =~ s/\&\;amp\; /\&\; /g; print $query->header($options), $data; } sub output_html_with_http_headers ($$$;$) { my ( $query, $cookie, $data, $status ) = @_; - $data =~ s/\&\;amp\; /\&\; /; output_with_http_headers( $query, $cookie, $data, 'html', $status ); }