use HTML::Pager;
use HTML::FillInForm;
use SWISH;
-use Unicode::String qw(utf8 utf16);
-require Unicode::Map8;
+use Text::Iconv;
+use DBI;
+
+use lib '..';
+use index_DBI;
+use back2html;
# configuration options
# FIX: they really should go in configuration file!
my $TEMPLATE_PATH = '/data/webpac/template_html';
my $CHARSET = 'ISO-8859-2';
-my $SWISH = '/data/swish/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(1); # Conversion errors raise exceptions
+
+my $from_utf8 = Text::Iconv->new('UTF8', $CHARSET);
sub setup {
my $self = shift;
$self->run_modes(
'search' => 'show_search_form',
'results' => 'show_results_list',
-# 'user' => 'show_user_detail'
+# 'user' => 'show_user_detail',
+ 'index' => 'show_index',
);
$self->start_mode('search');
$self->mode_param('rm');
my @swish_results; # results from swish
# load template for this page
- my $tmpl = $self->load_tmpl('results.html');
my @s_arr; # all queries are located here
for(my $i = 1; $i <=10; $i++) {
- last if (! $q->param("f$i"));
+ return show_index($self, $i) if ($q->param("f".$i."_index"));
+ next if (! $q->param("f$i"));
next if (! $q->param("v$i"));
# re-write query from +/- to and/and not
}
}
- push @s_arr,$q->param("f$i")."=($s)";
+ push @s_arr,$q->param("f$i")."_swish=($s)";
}
- my $l2_map = Unicode::Map8->new($CHARSET) || die;
- my $us = Unicode::String->new();
+ my $tmpl = $self->load_tmpl('results.html');
# call swish
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) = @_;
- $us->utf8($hit->swishtitle);
-
push @swish_results, {
nr => ($#swish_results + 2),
path => $hit->swishdocpath,
- title => $l2_map->to8($us->utf16),
+ headline => $from_utf8->convert($hit->headline),
+ html => back2html($from_utf8->convert($hit->html)),
rank => $hit->swishrank };
-# my @fields = $hit->field_names;
-# print "Field '$_' = '", $hit->$_, "'<br>\n" for sort @fields;
},
#startnum => 0,
maxhits => $MAX_HITS,
return $html;
}
+sub show_index {
+ my $self = shift;
+ my $i = shift; # field number
+
+ my $q = $self->query();
+
+ my $field = $q->param("f$i");
+ my $limit = $q->param("v$i");
+
+ my $html;
+
+ my $index = new index_DBI();
+
+ 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 $tmpl = $self->load_tmpl('index_res.html');
+ $tmpl->param('field',$field);
+ $tmpl->param('limit',$limit);
+ $tmpl->param('total',$total);
+
+ my $pager = HTML::Pager->new(
+ query => $q,
+ get_data_callback => sub {
+ my ($offset, $rows) = @_;
+
+ 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 $pager->output;
+}
+
1;