--- trunk/WebPac.pm 2003/01/22 20:24:32 11
+++ trunk/WebPac.pm 2003/06/01 15:33:08 51
@@ -6,21 +6,25 @@
use HTML::Pager;
use HTML::FillInForm;
use SWISH;
-use Unicode::MapUTF8 qw(to_utf8 from_utf8 utf8_supported_charset);
+use Text::Iconv;
use DBI;
use lib '..';
use index_DBI;
+use back2html;
# configuration options
-# FIX: they really should go in configuration file!
+# FIXME they really should go in configuration file!
my $TEMPLATE_PATH = '/data/webpac/template_html';
my $CHARSET = 'ISO-8859-2';
-my $SWISH = '/usr/local/bin/swish-e';
+my $SWISH = '/usr/bin/swish-e';
my $INDEX = '/data/webpac/index/isis.index';
my $MAX_HITS = 500;
my $ON_PAGE = 10;
+Text::Iconv->raise_error(0); # Conversion errors raise exceptions
+
+my $from_utf8 = Text::Iconv->new('UTF8', $CHARSET);
sub setup {
my $self = shift;
@@ -63,6 +67,9 @@
my @s_arr; # all queries are located here
+ my @path_arr = $q->param('path');
+ my $full = $q->param('full');
+
for(my $i = 1; $i <=10; $i++) {
return show_index($self, $i) if ($q->param("f".$i."_index"));
@@ -87,6 +94,7 @@
$s.="$_* ";
}
}
+ $s =~ s/\*+/*/g;
push @s_arr,$q->param("f$i")."_swish=($s)";
}
@@ -97,29 +105,40 @@
my $sh = SWISH->connect('Fork',
prog => $SWISH,
indexes => $INDEX,
- #properties => [qw/god br nr/],
+ properties => [qw/swishdocpath swishrank swishtitle headline html/],
results => sub {
my ($sh,$hit) = @_;
push @swish_results, {
nr => ($#swish_results + 2),
path => $hit->swishdocpath,
- title => to_utf8({ -string => $hit->swishtitle, -charset => $CHARSET }),
+ headline => $from_utf8->convert($hit->headline),
+ html => back2html($from_utf8->convert($hit->html)),
rank => $hit->swishrank };
-# my @fields = $hit->field_names;
-# print "Field '$_' = '", $hit->$_, "'
\n" for sort @fields;
},
#startnum => 0,
- maxhits => $MAX_HITS,
+ maxhits => $MAX_HITS
);
die $SWISH::errstr unless $sh;
- my $hits = $sh->query(join(" and ",@s_arr)) || 0; # FIX: and/or
+ # construct swish query
+ my $sw_q = join(" and ",@s_arr);
+ if (@path_arr) {
+ $sw_q .= "and (swishdocpath=\"";
+ $sw_q .= join("\" or swishdocpath=\"",@path_arr);
+ $sw_q .= "\")";
+ $tmpl->param('full',1); # show full records
+ }
+
+ my $hits = $sh->query($sw_q);
$tmpl->param('hits',$hits);
- $tmpl->param('search',join(" and ",@s_arr));
+ $tmpl->param('search',$sw_q);
+
+ $tmpl->param('PAGER_offset',$q->param("PAGER_offset") || 0);
+ $tmpl->param('last_PAGER_offset',$q->param("last_PAGER_offset") || 0);
# create a Pager object
my $pager = HTML::Pager->new(
@@ -171,28 +190,48 @@
my $field = $q->param("f$i");
my $limit = $q->param("v$i");
-
my $html;
my $index = new index_DBI();
- if (! $index->check($field)) {
+ my $total = $index->check($field);
+ if (! $total) {
my $tmpl = $self->load_tmpl('no_index.html');
$tmpl->param('field',$field);
$html = $tmpl->output;
return $html;
}
- my @index_arr = $index->fetch($field,'item',$limit);
+ my $tmpl = $self->load_tmpl('index_res.html');
+ $tmpl->param('field',$field);
+ $tmpl->param('limit',$limit);
+ $tmpl->param('total',$total);
+
+# FIXME I should set offset and leave out limit from fetch!!
+# if (! $q->param("PAGER_offset") {
+# $q->param("Pager_offet)
+# }
- $html .= "show index of $field";
- $html .= " for $limit" if ($limit);
+ my $pager = HTML::Pager->new(
+ query => $q,
+ get_data_callback => sub {
+ my ($offset, $rows) = @_;
- while (my $row = shift @index_arr) {
- $html .= "
".$row->{item}."\n";
- }
+ my @result = $index->fetch($field,'item',$limit, $offset, $rows);
+ return \@result;
+ },
+ rows => $total,
+ page_size => $ON_PAGE,
+ persist_vars => [
+ 'rm',
+ "f$i", "v$i", "f".$i."_index",
+ 'offset',
+ ],
+ debug => 1,
+ template => $tmpl,
+ );
- return $html;
+ return $pager->output;
}
1;