use C4::Search;
use C4::Languages qw(getLanguages);
use C4::Koha;
-use C4::Members qw(GetMember);
use URI::Escape;
use POSIX qw(ceil floor);
-use C4::Branch; # GetBranches
use C4::Search::History;
+use Koha::ItemTypes;
use Koha::LibraryCategories;
-use Koha::Virtualshelves;
+use Koha::Patrons;
use Koha::SearchEngine::Search;
use Koha::SearchEngine::QueryBuilder;
+use Koha::Virtualshelves;
use URI::Escape;
# decide which template to use
my $template_name;
my $template_type;
-my @params = $cgi->param("limit");
+my @params = $cgi->multi_param("limit");
if ((@params>=1) || ($cgi->param("q")) || ($cgi->param('multibranchlimit')) || ($cgi->param('limit-yr')) ) {
$template_name = 'catalogue/results.tt';
}
}
if($cgi->cookie("holdfor")){
- my $holdfor_patron = GetMember('borrowernumber' => $cgi->cookie("holdfor"));
+ my $holdfor_patron = Koha::Patrons->find( $cgi->cookie("holdfor") );
$template->param(
holdfor => $cgi->cookie("holdfor"),
- holdfor_surname => $holdfor_patron->{'surname'},
- holdfor_firstname => $holdfor_patron->{'firstname'},
- holdfor_cardnumber => $holdfor_patron->{'cardnumber'},
+ holdfor_surname => $holdfor_patron->surname,
+ holdfor_firstname => $holdfor_patron->firstname,
+ holdfor_cardnumber => $holdfor_patron->cardnumber,
);
}
-# load the branches
-my $branches = GetBranches();
-
-# Populate branch_loop with all branches sorted by their name. If
-# IndependentBranches is activated, set the default branch to the borrower
-# branch, except for superlibrarian who need to search all libraries.
-my $user = C4::Context->userenv;
-my @branch_loop = map {
- {
- value => $_,
- branchname => $branches->{$_}->{branchname},
- selected => $user->{branch} eq $_ && C4::Branch::onlymine(),
- }
-} sort {
- $branches->{$a}->{branchname} cmp $branches->{$b}->{branchname}
-} keys %$branches;
+# get biblionumbers stored in the cart
+my @cart_list;
+if($cgi->cookie("intranet_bib_list")){
+ my $cart_list = $cgi->cookie("intranet_bib_list");
+ @cart_list = split(/\//, $cart_list);
+}
+
+# load the branches
my $categories = Koha::LibraryCategories->search( { categorytype => 'searchdomain' }, { order_by => [ 'categorytype', 'categorycode' ] } );
-$template->param(branchloop => \@branch_loop, searchdomainloop => $categories);
+$template->param(
+ selected_branchcode => ( C4::Context->IsSuperLibrarian ? C4::Context->userenv : '' ),
+ searchdomainloop => $categories
+);
# load the Type stuff
-my $itemtypes = GetItemTypes;
+my $itemtypes = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search_with_localization->unblessed } };
# the index parameter is different for item-level itemtypes
my $itype_or_itemtype = (C4::Context->preference("item-level_itypes"))?'itype':'itemtype';
my @advancedsearchesloop;
. C4::Context->preference('defaultSortOrder');
}
-@sort_by = $cgi->param('sort_by');
+@sort_by = $cgi->multi_param('sort_by');
$sort_by[0] = $default_sort_by unless $sort_by[0];
foreach my $sort (@sort_by) {
$template->param($sort => 1) if $sort;
$template->param('sort_by' => $sort_by[0]);
# Use the servers defined, or just search our local catalog(default)
-my @servers = $cgi->param('server');
+my @servers = $cgi->multi_param('server');
unless (@servers) {
#FIXME: this should be handled using Context.pm
@servers = ("biblioserver");
}
# operators include boolean and proximity operators and are used
# to evaluate multiple operands
-my @operators = map uri_unescape($_), $cgi->param('op');
+my @operators = map uri_unescape($_), $cgi->multi_param('op');
# indexes are query qualifiers, like 'title', 'author', etc. They
# can be single or multiple parameters separated by comma: kw,right-Truncation
-my @indexes = map uri_unescape($_), $cgi->param('idx');
+my @indexes = map uri_unescape($_), $cgi->multi_param('idx');
# if a simple index (only one) display the index used in the top search box
if ($indexes[0] && (!$indexes[1] || $params->{'scan'})) {
}
# an operand can be a single term, a phrase, or a complete ccl query
-my @operands = map uri_unescape($_), $cgi->param('q');
+my @operands = map uri_unescape($_), $cgi->multi_param('q');
# limits are use to limit to results to a pre-defined category such as branch or language
-my @limits = map uri_unescape($_), $cgi->param('limit');
-my @nolimits = map uri_unescape($_), $cgi->param('nolimit');
+my @limits = map uri_unescape($_), $cgi->multi_param('limit');
+my @nolimits = map uri_unescape($_), $cgi->multi_param('nolimit');
my %is_nolimit = map { $_ => 1 } @nolimits;
@limits = grep { not $is_nolimit{$_} } @limits;
my $limit_yr;
my $limit_yr_value;
if ($params->{'limit-yr'}) {
- if ($params->{'limit-yr'} =~ /\d{4}-\d{4}/) {
- my ($yr1,$yr2) = split(/-/, $params->{'limit-yr'});
- $limit_yr = "yr,st-numeric,ge=$yr1 and yr,st-numeric,le=$yr2";
- $limit_yr_value = "$yr1-$yr2";
- }
- elsif ($params->{'limit-yr'} =~ /\d{4}/) {
+ if ($params->{'limit-yr'} =~ /\d{4}/) {
$limit_yr = "yr,st-numeric=$params->{'limit-yr'}";
$limit_yr_value = $params->{'limit-yr'};
}
my $count = C4::Context->preference('numSearchResults') || 20;
my $results_per_page = $params->{'count'} || $count;
my $offset = $params->{'offset'} || 0;
+$offset = 0 if $offset < 0;
my $page = $cgi->param('page') || 1;
#my $offset = ($page-1)*$results_per_page;
my $hits;
my $searcher = Koha::SearchEngine::Search->new(
{ index => $Koha::SearchEngine::BIBLIOS_INDEX } );
-my @results;
-
## I. BUILD THE QUERY
(
$error, $query, $simple_query, $query_cgi,
## parse the query_cgi string and put it into a form suitable for <input>s
my @query_inputs;
my $scan_index_to_use;
+my $scan_search_term_to_use;
for my $this_cgi ( split('&',$query_cgi) ) {
next unless $this_cgi;
if ($input_name eq 'idx') {
$scan_index_to_use = $input_value; # unless $scan_index_to_use;
}
+ if ($input_name eq 'q') {
+ $scan_search_term_to_use = Encode::decode_utf8( uri_unescape( $input_value ));
+ }
}
$template->param ( QUERY_INPUTS => \@query_inputs,
- scan_index_to_use => $scan_index_to_use );
+ scan_index_to_use => $scan_index_to_use,
+ scan_search_term_to_use => $scan_search_term_to_use );
## parse the limit_cgi string and put it into a form suitable for <input>s
my @limit_inputs;
my $results_hashref;
eval {
- my $itemtypes = GetItemTypes;
+ my $itemtypes = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search_with_localization->unblessed } };
( $error, $results_hashref, $facets ) = $searcher->search_compat(
$query, $simple_query, \@sort_by, \@servers,
- $results_per_page, $offset, $expanded_facet, $branches,
+ $results_per_page, $offset, $expanded_facet, undef,
$itemtypes, $query_type, $scan
);
};
# in order to avoid problems generated by the default size value in TT
foreach my $line (@newresults) {
if ( not exists $line->{'size'} ) { $line->{'size'} = "" }
+ # while we're checking each line, see if item is in the cart
+ if ( grep {$_ eq $line->{'biblionumber'}} @cart_list) {
+ $line->{'incart'} = 1;
+ }
}
$template->param(SEARCH_RESULTS => \@newresults);
## FIXME: add a global function for this, it's better than the current global one
my @page_numbers;
# total number of pages there will be
my $pages = ceil($hits / $results_per_page);
+ my $last_page = ($pages * $results_per_page) - $results_per_page;
# default page number
my $current_page_number = 1;
$current_page_number = ($offset / $results_per_page + 1) if $offset;
}
# FIXME: no previous_page_offset when pages < 2
$template->param( PAGE_NUMBERS => \@page_numbers,
+ last_page => $last_page,
previous_page_offset => $previous_page_offset) unless $pages < 2;
$template->param( next_page_offset => $next_page_offset) unless $pages eq $current_page_number;
}
# the index parameter is different for item-level itemtypes
my $itype_or_itemtype =
( C4::Context->preference("item-level_itypes") ) ? 'itype' : 'itemtype';
- my $itemtypes = GetItemTypes;
+ my $itemtypes = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search_with_localization->unblessed } };
my ( $cnt, @result );
foreach my $advanced_srch_type (@advanced_search_types) {
my @itypesloop;
foreach my $thisitemtype (
sort {
- $itemtypes->{$a}->{'description'}
- cmp $itemtypes->{$b}->{'description'}
+ $itemtypes->{$a}->{'translated_description'}
+ cmp $itemtypes->{$b}->{'translated_description'}
} keys %$itemtypes
)
{
number => $cnt++,
ccl => "$itype_or_itemtype,phr",
code => $thisitemtype,
- description => $itemtypes->{$thisitemtype}->{'description'},
+ description => $itemtypes->{$thisitemtype}->{'translated_description'},
imageurl => getitemtypeimagelocation(
'intranet', $itemtypes->{$thisitemtype}->{'imageurl'}
),