Koha/opac/searchoptions.pl
2005-06-02 04:36:22 +00:00

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");