my @attr = keys %{ $estraier->{attr} }; # FIXME replace with real gnerated lookup
+# XXX pipe delimit list!
+my $select_attr_operators = << '__ATTR_OPERATORS__';
+Q* | Bilo koja riječ
+BW Q | Početak
+BW Q EW | Točan oblik
+__ATTR_OPERATORS__
+
+my $attr_operator;
+
+foreach ( split(/[\n\r]+/, $select_attr_operators ) ) {
+ my ( $operator,$label ) = split(/\s+\|\s+/,$_,2);
+ push @{ $attr_operator->{ '-values' } }, $operator;
+ $attr_operator->{ '-labels' }->{$operator} = $label;
+}
+
+warn "## attr_operator = ", dump( $attr_operator );
+
print
start_html(
-title => $db->{name},
# -linebreak => 0,
),
textfield( -name => 'search' ),
- popup_menu( -name => 'attr_operator', -values => [ '', 'STRBW', 'STREQ' ],
- -labels => {
- '' => 'Bilo koja riječ',
- 'STRBW' => 'Početak',
- 'STREQ' => 'Točan oblik',
- },
- ),
+ popup_menu( -name => 'attr_operator', %$attr_operator ),
submit,
hidden( -name => 'entries_per_page', -default => $entries_per_page ),
hidden( -name => 'current_page', -default => 1 ),
dump_yaml( 'pager', $pager );
- my @search = ( "xml=$search" );
-
-# if ( my $op = param('attr_operator') ) {
-# $cond->add_attr( param('attr') . " $op " . param('search') );
-# }
+ my @search = ();
+
+ if ( $search =~ m{(=|"|AND|OR)} ) {
+ push @search, $search;
+ } elsif ( my $op = param('attr_operator') ) {
+ my $attr = param('attr');
+ my $v = $search;
+ $v =~ s/^\s+//;
+ warn "-- v: $v\n";
+ sub rewrite {
+ my ( $whitespace, $v ) = @_;
+ warn "## filter $op $whitespace $v\n";
+ my $template = $op;
+ $template =~ s{Q}{$v};
+ $whitespace = " AND " if $whitespace;
+
+ return
+ $whitespace .
+ $attr . '="' . $template . '"';
+ ;
+ };
+ $v =~ s{(\s*)(\S+)}{rewrite($1,$2)}ge;
+
+ push @search, $v;
+ } else {
+ push @search, "xml=$search";
+ }
my @only_input = param('only_input');
push @search, '(' . join(') or (', @only_input) . ')' if @only_input;
my $q = '(' . join(') and (', @search) . ')';
+ $q =~ s{\(\((.+)\)\)}{($1)};
warn "# query: $q\n";
my $swish_results = $swish->query( $q );
- $swish->abort_last_error if $swish->Error;
dump_yaml( 'swish_results', $swish_results );
$pager->total_entries( $swish_results->hits );
if ( ! $pager->total_entries ) {
- my $no_results = "No results for search '%s'";
- printf qq|<div class="error">$no_results</div>\n\n|, $search;
+ my $no_results = 'No results for search <b>%s</b>';
+ $no_results = $swish->error_string . '<br><b>%s</b>' if $swish->error;
+ printf qq|<div class="error">$no_results</div>\n\n|, $q;
} else {
my $results = "<b>%d</b> results for search <b>%s</b> showing results %d - %d";
- printf qq|<div class="message">$results</div>\n\n|, $pager->total_entries, $search, $pager->first, $pager->last;
+ printf qq|<div class="message">$results</div>\n\n|, $pager->total_entries, $q, $pager->first, $pager->last;
my $pager_html = join("\n", show_pager( $pager ));