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. # # Koha is free software; you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the Free Software # Foundation; either version 2 of the License, or (at your option) any later # version. # # Koha is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along with # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA use strict; require Exporter; use C4::Context; use HTML::Template::Pro; use vars qw($VERSION @ISA @EXPORT); # set the version for version checking $VERSION = 0.01; =head1 NAME C4::Output - Functions for managing templates =head1 FUNCTIONS =over 2 =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/"; #--------------------------------------------------------------------------------------------------------- # 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 $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; } #--------------------------------------------------------------------------------------------------------- # 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"); } }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"); } } # 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 =~ /[-_]/; } } } if ($theme and $lang) { return ($theme, $lang); } else { return ('default', 'en'); } } sub setlanguagecookie { my ($query,$language,$uri)=@_; my $cookie=$query->cookie(-name => 'KohaOpacLanguage', -value => $language, -expires => ''); print $query->redirect(-uri=>$uri, -cookie=>$cookie); } =item pagination_bar pagination_bar($base_url, $nb_pages, $current_page, $startfrom_name) Build an HTML pagination bar based on the number of page to display, the current page and the url to give to each page link. C<$base_url> is the URL for each page link. The C<$startfrom_name>=page_number is added at the end of the each URL. C<$nb_pages> is the total number of pages available. C<$current_page> is the current page number. This page number won't become a link. This function returns HTML, without any language dependency. =cut sub pagination_bar { 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.'=' ; my $pagination_bar = ''; # current page detection if (not defined $current_page) { $current_page = 1; } # navigation bar useful only if more than one page to display ! if ($nb_pages > 1) { # link to first page? if ($current_page > 1) { $pagination_bar.= "\n".' ' .'' .'<<' .'' ; } else { $pagination_bar.= "\n".' <<'; } # link on previous page ? if ($current_page > 1) { my $previous = $current_page - 1; $pagination_bar.= "\n".' ' .'' ; } else { $pagination_bar.= "\n".' <'; } 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 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".' ...' ; } if ($page_number == $current_page) { $pagination_bar.= "\n".' ' .''.$page_number.'' ; } else { $pagination_bar.= "\n".' ' .''.$page_number.'' ; } $last_displayed_page = $page_number; } } # link on next page? if ($current_page < $nb_pages) { my $next = $current_page + 1; $pagination_bar.= "\n".' ' ; } else { $pagination_bar.= "\n".' >' ; } # link to last page? if ($current_page != $nb_pages) { $pagination_bar.= "\n".' ' .'>>' .'' ; } else { $pagination_bar.= "\n".' >>'; } } return $pagination_bar; } END { } # module clean-up code here (global destructor) 1; __END__ =back =head1 AUTHOR Koha Developement team =cut