--- trunk/WebPac.pm 2005/01/23 15:18:03 643
+++ trunk/WebPac.pm 2009/05/25 13:49:51 789
@@ -10,6 +10,7 @@
use Config::IniFiles;
use Text::Unaccent;
use Data::Pageset;
+use POSIX qw(locale_h);
use lib '..';
use index_DBI_filter;
@@ -32,11 +33,15 @@
my $BASE_PATH =$cfg_global->val('webpac', 'base_path');
# for pager
my $pages_per_set = $cfg_global->val('webpac', 'pages_per_set') || 10;
+my $locale = $cfg_global->val('locale') || 'hr_HR';
Text::Iconv->raise_error(0); # Conversion errors raise exceptions
my $from_utf8 = Text::Iconv->new('UTF8', $CHARSET);
+setlocale(LC_CTYPE, $locale);
+setlocale(LC_COLLATE, $locale);
+
if ($UNAC_FILTER) {
require $UNAC_FILTER;
} else {
@@ -58,6 +63,10 @@
return $tpl if (! $base_path);
+ #warn "base_path: $base_path, p: $p, path: $path, tpl: $tpl\n";
+
+ $p =~ s#/[^/]*$##;
+
# strip everything to and including base path, leaving only
# additional (virtual) path
if ($base_path eq "/") {
@@ -134,37 +143,58 @@
#
my ($pager_prev,$pager_next, $pager_jump) = ('','','');
- my $nav_fmt=qq{ %s };
+ sub url_with_params {
+ my ($q,$text) = @_;
+ my %param = $q->Vars;
+ my @p;
+ foreach my $p ( keys %param ) {
+ my $v = $param{$p};
+ next unless defined $v and length($v) > 0;
+ if ( $v =~ m{\0} ) {
+ push @p, $p . '=' . my_unac_string($CHARSET, $_)
+ foreach (split(/\0/, $v ));
+ } else {
+ push @p, $p . '=' . my_unac_string($CHARSET, $v);
+ }
+ }
+
+ return
+ qq{ $text };
+ }
if ($pager->current_page() > $pager->first_page) {
$q->param('PAGER_offset', $pager->current_page - 1);
- $pager_prev .= sprintf($nav_fmt,$q->url(-relative=>1, -query=>1),'<<');
+ $pager_prev .= url_with_params( $q, '<<');
}
if ($pager->previous_set) {
$q->param('PAGER_offset', $pager->previous_set);
- $pager_prev .= sprintf($nav_fmt,$q->url(-relative=>1, -query=>1),'..');
+ $pager_prev .= url_with_params( $q,'..');
}
foreach my $p (@{$pager->pages_in_set()}) {
- next if ($p < 0);
+ next if ($p <= 0);
if($p == $pager->current_page()) {
$pager_jump .= "$p ";
} else {
$q->param('PAGER_offset', $p);
- $pager_jump .= sprintf($nav_fmt,$q->url(-relative=>1, -query=>1),$p);
+ $pager_jump .= url_with_params($q,$p);
}
}
if ($pager->next_set) {
$q->param('PAGER_offset', $pager->next_set);
- $pager_next .= sprintf($nav_fmt,$q->url(-relative=>1, -query=>1),'..');
+ $pager_next .= url_with_params($q,'..');
}
if ($pager->current_page() < $pager->last_page) {
$q->param('PAGER_offset', $pager->current_page + 1);
- $pager_next .= sprintf($nav_fmt,$q->url(-relative=>1, -query=>1),'>>');
+ $pager_next .= url_with_params($q,'>>');
}
$tmpl->param('PAGER_PREV', $pager_prev);
@@ -182,14 +212,18 @@
my $tmpl = shift @_;
my @persist_vars = @_;
my $hidden_vars = '';
+ my $hidden_search = '';
foreach my $v (@persist_vars) {
foreach my $val ($q->param($v)) {
next if (! $val || $val eq '');
+ $val =~ s/"/"/g;
$hidden_vars .= ''."\n";
+ $hidden_search .= ''."\n" if ($v ne "rm");
}
}
$tmpl->param('PAGER_HIDDEN', $hidden_vars);
+ $tmpl->param('SEARCH_HIDDEN', $hidden_search);
$tmpl->param('PAGER_JAVASCRIPT', qq#