X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=vhost%2Fwebpac2.cgi;h=fd76b657b4f95a9c989e24be91b19ed7cc75a209;hb=270b0142ec5a98e84ecb5beaf1a020130ab9e013;hp=2abdb4c0f21aa1d51bf069082bf1898bd69e6363;hpb=993fbf73916a251ce6007b3a66a2ffb9898e2de2;p=webpac2 diff --git a/vhost/webpac2.cgi b/vhost/webpac2.cgi index 2abdb4c..fd76b65 100755 --- a/vhost/webpac2.cgi +++ b/vhost/webpac2.cgi @@ -13,6 +13,7 @@ use SWISH::API; use JSON; use Text::Unaccent::PurePerl qw/unac_string/; use HTML::FillInForm::Lite; +use Encode; my $range_around = 5; my @entries_per_page = ( 30, 50, 100, 500 ); @@ -202,7 +203,7 @@ print if ( my $search = param('search') ) { - $search = unac_string( $search ); + $search = unac_string( Encode::decode('utf-8',$search) ); print qq| @@ -216,7 +217,7 @@ if ( my $search = param('search') ) { my @attrs = param('attr'); my $op = param('attr_operator'); - if ( $search =~ m{(=|"|AND|OR)} ) { + if ( $search =~ m{(=|"|\bAND\b|\bOR\b)} ) { push @search, $search; } elsif ( @attrs ) { @@ -233,6 +234,9 @@ if ( my $search = param('search') ) { $template =~ s{Q}{$v}; $whitespace = " AND " if $whitespace; + # don't return -* &* and other non-word characters + return '' if $template =~ m/^\W\*$/ || $template =~ m/\band\b/i; + return $whitespace . $attr . '="' . $template . '"'; @@ -261,7 +265,11 @@ if ( my $search = param('search') ) { $q .= ' AND ((' . join(') OR (', map { "input=\"$_\"" } @only_input) . '))' if @only_input; warn "# query: $q\n"; - my $swish_results = $swish->query( $q ); + my $search_obj = $swish->new_search_object; + if ( my $sort = param('sort') ) { + $search_obj->set_sort( $sort ); + } + my $swish_results = $search_obj->execute( $q ); dump_yaml( 'swish_results', $swish_results );