X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FOutput.pm;h=f0f5f5f0397b0e9ffee08d51fa482fe99e030f6f;hb=3de59aba2776184a6fd2e9943d86a7c66e8f7648;hp=4759c7ff95a376ee210ab5d933b6bbb4785a43ef;hpb=0451359813e49cf2fc35c582dab6a6dc0a11b213;p=koha_gimpoz diff --git a/C4/Output.pm b/C4/Output.pm index 4759c7ff95..f0f5f5f039 100644 --- a/C4/Output.pm +++ b/C4/Output.pm @@ -1,11 +1,9 @@ package C4::Output; -# $Id$ #package to deal with marking up output #You will need to edit parts of this pm #set the value of path to be where your html lives - # Copyright 2000-2002 Katipo Communications # # This file is part of Koha. @@ -24,16 +22,29 @@ package C4::Output; # Suite 330, Boston, MA 02111-1307 USA +# NOTE: I'm pretty sure this module is deprecated in favor of +# templates. + use strict; -require Exporter; use C4::Context; -use HTML::Template::Pro; +use C4::Languages qw(getTranslatedLanguages get_bidi regex_lang_subtags language_get_description accept_language ); +use HTML::Template::Pro; use vars qw($VERSION @ISA @EXPORT); -# set the version for version checking -$VERSION = 0.01; +BEGIN { + # set the version for version checking + $VERSION = 3.01; + require Exporter; + @ISA = qw(Exporter); + push @EXPORT, qw( + &themelanguage &gettemplate setlanguagecookie pagination_bar + ); + push @EXPORT, qw( + &output_html_with_http_headers + ); +} =head1 NAME @@ -45,124 +56,160 @@ C4::Output - Functions for managing templates =cut -@ISA = qw(Exporter); -@EXPORT = qw( - &themelanguage &gettemplate setlanguagecookie pagination_bar - ); - #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')."/default/en/includes/"; +my $path = C4::Context->config('intrahtdocs') . "/prog/en/includes/"; #--------------------------------------------------------------------------------------------------------- # FIXME - POD sub gettemplate { - my ($tmplbase, $opac, $query) = @_; -if (!$query){ - warn "no query in gettemplate"; - } - my $htdocs; - if ($opac ne "intranet") { - $htdocs = C4::Context->config('opachtdocs'); - } else { - $htdocs = C4::Context->config('intrahtdocs'); - } + my ( $tmplbase, $interface, $query ) = @_; + if ( !$query ) { + warn "no query in gettemplate"; + } + my $htdocs; + if ( $interface ne "intranet" ) { + $htdocs = C4::Context->config('opachtdocs'); + } + else { + $htdocs = C4::Context->config('intrahtdocs'); + } my $path = C4::Context->preference('intranet_includes') || 'includes'; -# 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; } #--------------------------------------------------------------------------------------------------------- # FIXME - POD sub themelanguage { - my ($htdocs, $tmpl, $section, $query) = @_; -# if (!$query) { -# warn "no query"; -# } - my $dbh = C4::Context->dbh; - my @languages; - my @themes; -my ($theme, $lang); - if ($section eq "intranet"){ - $lang=$query->cookie('KohaOpacLanguage'); - - if ($lang){ - - push @languages,$lang; - @themes = split " ", C4::Context->preference("template"); - } - else { - @languages = split " ", C4::Context->preference("opaclanguages"); - @themes = split " ", C4::Context->preference("template"); + my ( $htdocs, $tmpl, $interface, $query ) = @_; + + # Set some defaults for language and theme + # First, check the user's preferences + my $lang; + my $http_accept_language = regex_lang_subtags($ENV{HTTP_ACCEPT_LANGUAGE})->{language}; + $lang = accept_language($http_accept_language,getTranslatedLanguages($interface,'prog')); + + # But, if there's a cookie set, obey it + $lang = $query->cookie('KohaOpacLanguage') if $query->cookie('KohaOpacLanguage'); + + # Fall back to English + $lang = 'en' unless $lang; + my $theme = 'prog'; + + my $dbh = C4::Context->dbh; + my @languages; + my @themes; + if ( $interface eq "intranet" ) { + @languages = split " ", C4::Context->preference("opaclanguages"); + @themes = split " ", C4::Context->preference("template"); + pop @languages, $lang if $lang; } - }else{ - $lang=$query->cookie('KohaOpacLanguage'); - - if ($lang){ - - push @languages,$lang; - @themes = split " ", C4::Context->preference("opacthemes"); - } - else { - @languages = split " ", C4::Context->preference("opaclanguages"); - @themes = split " ", C4::Context->preference("opacthemes"); + 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'); + if ($lang) { + + push @languages, $lang; + @themes = split " ", C4::Context->preference("opacthemes"); + } + else { + @languages = split " ", C4::Context->preference("opaclanguages"); + @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. + # 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) { - $la =~ s/([-_])/ $1 eq '-'? '_': '-' /eg if $pass == 2; - if (-e "$htdocs/$th/$la/$tmpl") { - $theme = $th; - $lang = $la; - last THEME; - } - last unless $la =~ /[-_]/; - } + foreach my $th (@themes) { + foreach my $la (@languages) { + for ( my $pass = 1 ; $pass <= 2 ; $pass += 1 ) { + $la =~ s/([-_])/ $1 eq '-'? '_': '-' /eg if $pass == 2; + if ( -e "$htdocs/$th/$la/".($interface eq 'intranet'?"modules":"")."/$tmpl" ) { + $theme = $th; + $lang = $la; + last THEME; + } + last unless $la =~ /[-_]/; + } + } } - } - if ($theme and $lang) { - return ($theme, $lang); - } else { - return ('default', 'en'); - } + 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); -} + my ( $query, $language, $uri ) = @_; + my $cookie = $query->cookie( + -name => 'KohaOpacLanguage', + -value => $language, + -expires => '' + ); + print $query->redirect( + -uri => $uri, + -cookie => $cookie + ); +} =item pagination_bar @@ -184,126 +231,147 @@ This function returns HTML, without any language dependency. =cut sub pagination_bar { - my ($base_url, $nb_pages, $current_page, $startfrom_name) = @_; + my ( $base_url, $nb_pages, $current_page, $startfrom_name ) = @_; # how many pages to show before and after the current page? my $pages_around = 2; my $url = - $base_url - .($base_url =~ m/&/ ? '&' : '?') - .$startfrom_name.'=' - ; + $base_url . ( $base_url =~ m/&/ ? '&' : '?' ) . $startfrom_name . '='; my $pagination_bar = ''; # current page detection - if (not defined $current_page) { + if ( not defined $current_page ) { $current_page = 1; } # navigation bar useful only if more than one page to display ! - if ($nb_pages > 1) { + if ( $nb_pages > 1 ) { + # link to first page? - if ($current_page > 1) { - $pagination_bar.= - "\n".' ' - .'' - .'<<' - .'' - ; + if ( $current_page > 1 ) { + $pagination_bar .= + "\n" . ' ' + . '' + . '<<' . ''; } else { - $pagination_bar.= - "\n".' <<'; + $pagination_bar .= + "\n" . ' <<'; } # link on previous page ? - if ($current_page > 1) { + if ( $current_page > 1 ) { my $previous = $current_page - 1; - $pagination_bar.= - "\n".' ' - .'' - ; + $pagination_bar .= + "\n" . ' ' + . ''; } else { - $pagination_bar.= - "\n".' <'; + $pagination_bar .= + "\n" . ' <'; } - my $min_to_display = $current_page - $pages_around; - my $max_to_display = $current_page + $pages_around; + my $min_to_display = $current_page - $pages_around; + my $max_to_display = $current_page + $pages_around; my $last_displayed_page = undef; - for my $page_number (1..$nb_pages) { - if ($page_number == 1 + for my $page_number ( 1 .. $nb_pages ) { + if ( + $page_number == 1 or $page_number == $nb_pages - or ($page_number >= $min_to_display and $page_number <= $max_to_display) - ) { - if (defined $last_displayed_page - and $last_displayed_page != $page_number - 1 - ) { - $pagination_bar.= - "\n".' ...' - ; + or ( $page_number >= $min_to_display + and $page_number <= $max_to_display ) + ) + { + if ( defined $last_displayed_page + and $last_displayed_page != $page_number - 1 ) + { + $pagination_bar .= + "\n" . ' ...'; } - if ($page_number == $current_page) { - $pagination_bar.= - "\n".' ' - .''.$page_number.'' - ; + if ( $page_number == $current_page ) { + $pagination_bar .= + "\n" . ' ' + . '' + . $page_number + . ''; } else { - $pagination_bar.= - "\n".' ' - .''.$page_number.'' - ; + $pagination_bar .= + "\n" . ' ' + . '' + . $page_number . ''; } $last_displayed_page = $page_number; } } # link on next page? - if ($current_page < $nb_pages) { + if ( $current_page < $nb_pages ) { my $next = $current_page + 1; - $pagination_bar.= - "\n".' ' - ; + $pagination_bar .= "\n" + . ' '; } else { - $pagination_bar.= - "\n".' >' - ; + $pagination_bar .= + "\n" . ' >'; } # link to last page? - if ($current_page != $nb_pages) { - $pagination_bar.= - "\n".' ' - .'>>' - .'' - ; + if ( $current_page != $nb_pages ) { + $pagination_bar .= "\n" + . ' ' + . '>>' . ''; } else { - $pagination_bar.= - "\n".' >>'; + $pagination_bar .= + "\n" . ' >>'; } } return $pagination_bar; } +=item output_html_with_http_headers + + &output_html_with_http_headers($query, $cookie, $html) + +Outputs the HTML page $html with the appropriate HTTP headers, +with the authentication cookie $cookie and a Content-Type that +corresponds to the HTML page $html. + +=cut + +sub output_html_with_http_headers ($$$) { + my($query, $cookie, $html) = @_; + print $query->header( + -type => 'text/html', + -charset => 'UTF-8', + -cookie => $cookie, + -Pragma => 'no-cache', + -'Cache-Control' => 'no-cache', + ), $html; +} -END { } # module clean-up code here (global destructor) +END { } # module clean-up code here (global destructor) 1; __END__