@@ -, +, @@ (#1 or #3) and #6 --- C4/Search/History.pm | 32 ++++++++++ catalogue/search-history.pl | 32 ++-------- .../prog/en/modules/catalogue/search-history.tt | 70 ++++------------------ .../bootstrap/en/modules/opac-search-history.tt | 58 ++++-------------- opac/opac-search-history.pl | 43 ++----------- 5 files changed, 64 insertions(+), 171 deletions(-) --- a/C4/Search/History.pm +++ a/C4/Search/History.pm @@ -228,6 +228,38 @@ sub set_to_session { uri_escape( encode_json($search_history) ) ); } +sub get_query { + my ($id, $borrowernumber, $lang, $default) = @_; + + my $searches = C4::Search::History::get({ + type => 'biblio', + userid => $borrowernumber, + id => $id, + }); + + if (ref $searches eq 'ARRAY' && scalar @$searches > 0) { + my $search = $searches->[0]; + my $scgi = new CGI($search->{query_cgi}); + my @operators = map uri_unescape($_), $scgi->multi_param('op'); + my @indexes = map uri_unescape($_), $scgi->multi_param('idx'); + my @operands = map uri_unescape($_), $scgi->multi_param('q'); + my @limits = map uri_unescape($_), $scgi->multi_param('limit'); + my @sort_by = $scgi->multi_param('sort_by'); + my $scan = $scgi->param('scan'); + + require C4::Search; + my ( undef, $query ) = + C4::Search::buildQuery( \@operators, \@operands, \@indexes, \@limits, \@sort_by, + $scan, $lang ); + + return "($query)"; + } + + # Default if not found + return "allrecords,alwaysmatches=''"; +} + + 1; __END__ --- a/catalogue/search-history.pl +++ a/catalogue/search-history.pl @@ -44,34 +44,10 @@ my $action = $cgi->param('action') || q{list}; if ( $action eq 'search' ) { # Start a new search - my @ids = $cgi->multi_param('id'); - my @nots = $cgi->multi_param('not'); - my $searches = C4::Search::History::get({ - userid => $loggedinuser, - id => \@ids, - }); - my @ccl_queries; - foreach my $search (@$searches) { - my $scgi = new CGI($search->{query_cgi}); - my @operators = map uri_unescape($_), $scgi->multi_param('op'); - my @indexes = map uri_unescape($_), $scgi->multi_param('idx'); - my @operands = map uri_unescape($_), $scgi->multi_param('q'); - my @limits = map uri_unescape($_), $scgi->multi_param('limit'); - my @sort_by = $scgi->param('sort_by'); - my $scan = $scgi->param('scan'); - my $lang = C4::Languages::getlanguage($cgi); - my ( $error, $query ) = - buildQuery( \@operators, \@operands, \@indexes, \@limits, \@sort_by, - $scan, $lang ); - - if (grep {$_ == $search->{id}} @nots) { - $query = "allrecords,alwaysmatches='' not ($query)"; - } - - push @ccl_queries, $query; - } - my $join = ($cgi->param('join') eq 'or') ? 'or' : 'and'; - my $query = 'ccl=(' . join(") $join (", @ccl_queries) . ')'; + my $lang = C4::Languages::getlanguage($cgi); + my $search = $cgi->param('search'); + $search =~ s|#(\d+)|C4::Search::History::get_query($1, $loggedinuser, $lang)|eg; + my $query = "ccl=$search"; print $cgi->redirect("/cgi-bin/koha/catalogue/search.pl?q=$query"); exit; } elsif ( $action eq 'delete' ) { --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/search-history.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/search-history.tt @@ -4,22 +4,8 @@ [% USE date %] [% BLOCK search_history_table %] -