--- trunk/WebPac.pm 2003/07/08 08:24:13 80 +++ trunk/WebPac.pm 2003/09/04 13:47:36 126 @@ -26,6 +26,7 @@ my $INDEX = $cfg_global->val('webpac', 'index') || die "need index in global.conf, section webpac"; my $MAX_HITS = $cfg_global->val('webpac', 'max_hits') || 0; my $ON_PAGE =$cfg_global->val('webpac', 'on_page') || 10; +my $MIN_WILDCARD =$cfg_global->val('webpac', 'min_wildcard') || 1; Text::Iconv->raise_error(0); # Conversion errors raise exceptions @@ -77,12 +78,22 @@ my @path_arr = $q->param('path'); my $full = $q->param('full'); + my @persist_vars = ( 'rm' ); + my @url_params = ( 'rm=results', 'show_full=1', 'last_PAGER_offset='.$q->param('PAGER_offset') || 0 ); + for(my $i = 1; $i <=30; $i++) { return show_index($self, $i) if ($q->param("f".$i."_index")); + next if (! $q->param("v$i")); next if (! $q->param("f$i")); + push @persist_vars, "f$i"; + push @persist_vars, "v$i"; + + push @url_params,"f$i=".$q->url_param("f$i"); + push @url_params,"v$i=".$q->url_param("v$i"); + # re-write query from +/- to and/and not my @param_vals = $q->param("v$i"); my @swish_q; @@ -101,7 +112,10 @@ $s.= ($s) ? "and " : ""; $s.="not " if ($1 eq "-"); $s.="$2* "; - } elsif (m/(and|or|not)/i) { + } elsif (m/^\s*(and|or|not)\s*$/i) { + $s.="$_ "; + # don't add * to words with less than x chars + } elsif (length($_) <= $MIN_WILDCARD) { $s.="$_ "; } else { $s.="$_* "; @@ -115,7 +129,7 @@ push @s_arr, $q->param("f$i")."_swish=(".join(" or ",@swish_q).")"; } - my $tmpl = $self->load_tmpl('results.html'); + my $tmpl = $self->load_tmpl('results.html', global_vars => 1); sub esc_html { my $html = shift; @@ -147,11 +161,13 @@ die $SWISH::errstr unless $sh; # construct swish query my $sw_q = join(" and ",@s_arr); - if (@path_arr) { + if (@path_arr && $q->param('show_full')) { $sw_q .= "and (swishdocpath=\""; $sw_q .= join("\" or swishdocpath=\"",@path_arr); $sw_q .= "\")"; $tmpl->param('full',1); # show full records + } else { + $tmpl->param('full',0); } my $hits = $sh->query($sw_q); @@ -162,6 +178,8 @@ $tmpl->param('PAGER_offset',$q->param("PAGER_offset") || 0); $tmpl->param('last_PAGER_offset',$q->param("last_PAGER_offset") || 0); + $tmpl->param('url_params',"?".join("&",@url_params)); + # create a Pager object my $pager = HTML::Pager->new( # required parameters @@ -171,25 +189,21 @@ my @result; for (my $i=0; $i<$rows; $i++) { - push @result, $swish_results[$offset+$i] if $swish_results[$offset+$i]; + my $r = $swish_results[$offset+$i]; + if ($r && $tmpl->param('full')) { + push @result, $r; + } elsif ($r) { + # if not full output, skip html + delete $r->{html}; + push @result, $r; + } } return \@result; }, rows => $hits, page_size => $ON_PAGE, # some optional parameters - persist_vars => [ - 'rm', - 'f1', 'v1', - 'f2', 'v2', - 'f3', 'v3', - 'f4', 'v4', - 'f5', 'v5', - 'f6', 'v6', - 'f7', 'v7', - 'f8', 'v8', - 'f9', 'v9', - ], + persist_vars => [ @persist_vars ], #cell_space_color => '#000000', #cell_background_color => '#ffffff', #nav_background_color => '#dddddd', @@ -229,7 +243,7 @@ return $html; } - my $tmpl = $self->load_tmpl('index_res.html'); + my $tmpl = $self->load_tmpl('index_res.html', global_vars => 1); $tmpl->param('field',$field); $tmpl->param('limit',$limit); $tmpl->param('total',$total);