121 lines
4 KiB
Perl
121 lines
4 KiB
Perl
#!/usr/bin/perl
|
|
use strict;
|
|
require Exporter;
|
|
# Searching within results is done by simply adding on parameters onto the query, being careful to have the requried marclist etc fields.
|
|
use C4::Database;
|
|
use C4::Interface::CGI::Output;
|
|
use C4::Context;
|
|
use CGI;
|
|
my $query = new CGI;
|
|
my $newquery='';
|
|
my $allitemtypesbool = $query->param("allitemtypes");
|
|
my $allbranchesbool = $query->param("allbranches");
|
|
my $allcategoriesbool = $query->param("allcategories");
|
|
my $allsubcategoriesbool = $query->param("allsubcategories");
|
|
my $allmediatypesbool = $query->param("allmediatypes");
|
|
my $nbstatements = $query->param("nbstatementsori");
|
|
my $orderby = $query->param("orderbyori");
|
|
my @keywords = $query->param("keyword");
|
|
my @marclist = $query->param('marclist');
|
|
my @and_or = $query->param('and_or');
|
|
my @excluding = $query->param('excluding');
|
|
my @operator = $query->param('operator');
|
|
my @value = $query->param('value');
|
|
my $searchtype = $query->param('searchtype');
|
|
my $category = $query->param('categorylist');
|
|
my @itemtypeswanted = $query->param("itemtypeswanted");
|
|
my $itemtypessearched = $query->param("itemtypessearched");
|
|
my @mediatypeswanted = $query->param("mediatypeswanted");
|
|
my @subcategorieswanted = $query->param("subcategorieswanted");
|
|
my @brancheswanted = $query->param("brancheswanted");
|
|
my $avail = $query->param("avail");
|
|
|
|
my $brancheslist;
|
|
my $count=0;
|
|
my $newquery='';
|
|
my $keywordfoundbool=0;
|
|
my $itemtypeslist;
|
|
my $itemtypescatlist;
|
|
my $itemtypessubcatlist;
|
|
my $mediatypeslist;
|
|
|
|
$count=0;
|
|
my $dbh=C4::Context->dbh;
|
|
$newquery='op=do_search&nbstatements='.$nbstatements;
|
|
if ($allcategoriesbool == 0 && $category ne ''){
|
|
|
|
my $sth=$dbh->prepare("select itemtypecodes from categorytable where categorycode=?");
|
|
$sth->execute($category);
|
|
$itemtypescatlist = $sth->fetchrow .'|';
|
|
$sth->finish;
|
|
}
|
|
if ($allmediatypesbool == 0 && @mediatypeswanted ne ''){
|
|
foreach my $mediatype (@mediatypeswanted){
|
|
my $sth=$dbh->prepare("select itemtypecodes from mediatypetable where mediatypecode=?");
|
|
$sth->execute($mediatype);
|
|
$mediatypeslist .= $sth->fetchrow.'|';
|
|
$sth->finish;
|
|
|
|
}
|
|
}
|
|
if ($allsubcategoriesbool == 0 && @subcategorieswanted ne ''){
|
|
foreach my $subcategory (@subcategorieswanted){
|
|
my $sth=$dbh->prepare("select itemtypecodes from subcategorytable where subcategorycode=?");
|
|
$sth->execute($subcategory);
|
|
$itemtypessubcatlist .= $sth->fetchrow.'|';
|
|
$sth->finish;
|
|
|
|
}
|
|
}
|
|
if ($allitemtypesbool == 0){
|
|
|
|
$itemtypeslist .=$itemtypescatlist.$itemtypessubcatlist.$mediatypeslist.$itemtypessearched.join ("|", @itemtypeswanted)
|
|
} else {
|
|
$itemtypeslist .=$itemtypescatlist.$itemtypessubcatlist.$mediatypeslist.$itemtypessearched
|
|
}
|
|
|
|
if ($allbranchesbool == 0){
|
|
$brancheslist = join("|",@brancheswanted)
|
|
}
|
|
|
|
if ($searchtype eq 'NewSearch'){
|
|
|
|
$newquery .= '&marclist=';
|
|
$newquery .= '&and_or=and';
|
|
$newquery .= '&excluding=';
|
|
$newquery .= '&operator=contains';
|
|
$newquery .= '&value=';
|
|
$newquery .=join(" ",@keywords)
|
|
} elsif ($searchtype eq 'SearchWithin'){
|
|
foreach my $marclistitem (@marclist) {
|
|
$newquery .= '&marclist='.$marclist[$count];
|
|
$newquery .= '&and_or='.$and_or[$count];
|
|
$newquery .= '&excluding='.$excluding[$count];
|
|
$newquery .= '&operator=';
|
|
$newquery .= $operator[$count];
|
|
$newquery .= '&value='.$value[$count];
|
|
if ($marclist[$count] eq ''){
|
|
if ($keywordfoundbool=0){
|
|
$keywordfoundbool=1;
|
|
$newquery .=" ".join(" ",@keywords)
|
|
}
|
|
}
|
|
$count++;
|
|
|
|
}
|
|
if ($keywordfoundbool == 0 && $query->param('keysub') ne ''){
|
|
$newquery .= '&marclist=&and_or=and&excluding=&operator=contains&value=';
|
|
$newquery .=join(" ",@keywords)
|
|
}
|
|
}
|
|
$newquery .= '&orderby='.$orderby;
|
|
if ($itemtypeslist ne ''){
|
|
$newquery .= '&itemtypesstring="'.$itemtypeslist.'"'
|
|
}
|
|
if ($brancheslist ne ''){
|
|
$newquery .= '&branchesstring="'.$brancheslist.'"';
|
|
}
|
|
if ($avail ne ''){
|
|
$newquery .= '&avail=1'
|
|
}
|
|
print $query->redirect("/cgi-bin/koha/opac-search.pl?$newquery");
|