X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=search.pl;h=75de430ce47d410b2d5f4deaef24f2a0d86d9628;hb=c431f61277bd3ab7fef6b4b4b0f498e52a3ea594;hp=08912076ab9c830ff2879952f115c121be512923;hpb=564fd1d8ecfd4c65067613a10515a6019c9f4a16;p=koha.git diff --git a/search.pl b/search.pl index 08912076ab..75de430ce4 100755 --- a/search.pl +++ b/search.pl @@ -1,310 +1,211 @@ #!/usr/bin/perl -#script to provide intranet (librarian) advanced search facility + +# $Id$ +# Copyright 2000-2002 Katipo Communications +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +# $Log$ +# Revision 1.32 2003/06/11 18:37:55 tonnesen +# Using boolean_preference instead of preference for 'marc' setting +# +# Revision 1.31 2003/05/11 07:31:37 rangi +# Removing duplicate use C4::Auth +# use strict; -use C4::Search; +require Exporter; use CGI; +use C4::Auth; +use HTML::Template; +use C4::Context; +use C4::Search; use C4::Output; +use C4::Interface::CGI::Output; + +my $query=new CGI; +my $type=$query->param('type'); + +#(-e "opac") && ($type='opac'); -my $env; -my $input = new CGI; -print $input->header; -#print $input->dump; -#whether it is called from the opac of the intranet -my $type=$input->param('type'); -if ($type eq ''){ - $type = 'intra'; +my ($loggedinuser, $cookie, $sessionID) = checkauth($query, ($type eq 'opac') ? (1) : (0)); + +my $startfrom=$query->param('startfrom'); +($startfrom) || ($startfrom=0); + +my $subject=$query->param('subject'); +# if it's a subject we need to use the subject.tmpl +my ($template, $loggedinuser, $cookie); +if ($subject) { + ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "catalogue/subject.tmpl", + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => {catalogue => 1}, + debug => 1, + }); +} else { + ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "catalogue/searchresults.tmpl", + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => {catalogue => 1}, + debug => 1, + }); } -my $ttype=$input->param('ttype'); -#setup colours -my $main; -my $secondary; -if ($type eq 'opac'){ - $main='#99cccc'; - $secondary='#efe5ef'; -} else { - $main='#cccc99'; - $secondary='#ffffcc'; -} -#print $input->Dump; -my $blah; -my %search; -#build hash of users input -my $title=validate($input->param('title')); -$search{'title'}=$title; -my $keyword=validate($input->param('keyword')); -$search{'keyword'}=$keyword; -$search{'front'}=validate($input->param('front')); -my $author=validate($input->param('author')); -$search{'author'}=$author; -my $illustrator=validate($input->param('illustrator')); -$search{'illustrator'}=$illustrator; -my $subject=validate($input->param('subject')); -$search{'subject'}=$subject; -my $itemnumber=validate($input->param('item')); -$search{'item'}=$itemnumber; -my $isbn=validate($input->param('isbn')); -$search{'isbn'}=$isbn; -my $datebefore=validate($input->param('date-before')); -$search{'date-before'}; -my $class=$input->param('class'); -$search{'class'}=$class; -$search{'ttype'}=$ttype; -my $dewey=validate($input->param('dewey')); -$search{'dewey'}=$dewey; -my $branch=validate($input->param('branch')); -$search{'branch'}=$branch; +# %env +# Additional parameters for &catalogsearch +my %env = ( + itemcount => 1, # If set to 1, &catalogsearch enumerates + # the results found and returns the number + # of items found, where they're located, + # etc. + ); + +# get all the search variables +# we assume that C4::Search will validate these values for us +my %search; # Search terms. If the key is "author", + # then $search{author} is the author the + # user is looking for. + +my @forminputs; # This is used in the form template. + +foreach my $term (qw(keyword subject author illustrator itemnumber + isbn date-before class dewey branch title abstract + publisher ttype)) +{ + my $value = $query->param($term); + next unless defined $value && $value ne ""; + # Skip blank search terms + $search{$term} = $value; + push @forminputs, { term => $term, + value =>$value }; +} + +$template->param(FORMINPUTS => \@forminputs); + +# whats this for? +# I think it is (or was) a search from the "front" page... [st] +$search{'front'}=$query->param('front'); + +my $num=10; my @results; -my $offset=$input->param('offset'); -if ($offset eq ''){ - $offset=0; +my $count; +if (my $subject=$query->param('subjectitems')) { + my $blah; + @results=subsearch(\$blah,$subject); + $count=$#results+1; +} else { + ($count,@results)=catalogsearch(\%env,'',\%search,$num,$startfrom); } -my $num=$input->param('num'); -if ($num eq ''){ - $num=10; + +#my $resultsarray=\@results; +my $resultsarray; + +foreach my $result (@results) { + $result->{'authorhtmlescaped'}=$result->{'author'}; + $result->{'authorhtmlescaped'}=~s/ /%20/g; + ($result->{'copyrightdate'}==0) && ($result->{'copyrightdate'}=''); + ($type eq 'opac') ? ($result->{'opac'}=1) : ($result->{'opac'}=0); + push (@$resultsarray, $result); } -print startpage(); -print startmenu($type); -#print $type; -#print $search{'ttype'}; -if ($type eq 'intra'){ - print mkheadr(1,'Catalogue Search Results'); -} elsif ($type eq 'catmain'){ - print mkheadr(1,'Catalogue Maintenance'); -} else { - print mkheadr(1,'Opac Search Results'); +($resultsarray) || (@$resultsarray=()); +my $search="num=20"; +my $searchdesc=''; +if ($search{"keyword"}) { + $search .= "&keyword=$search{keyword}"; + $searchdesc.="keyword $search{keyword}, "; } -print center(); -my $count; -my @results; -if ($itemnumber ne '' || $isbn ne ''){ - ($count,@results)=&CatSearch(\$blah,'precise',\%search,$num,$offset); -} else { - if ($subject ne ''){ - ($count,@results)=&CatSearch(\$blah,'subject',\%search,$num,$offset); - } else { - if ($keyword ne ''){ - ($count,@results)=&KeywordSearch(\$blah,'intra',\%search,$num,$offset); - }elsif ($title ne '' || $author ne '' || $illustrator ne '' || $dewey ne '' || $class ne '') { - ($count,@results)=&CatSearch(\$blah,'loose',\%search,$num,$offset); - } - } +if (my $subjectitems=$query->param('subjectitems')){ + $search .= "&subjectitems=$subjectitems"; + $searchdesc.="subject $subjectitems, "; } -print "You searched on "; -while ( my ($key, $value) = each %search) { - if ($value ne '' && $key ne 'ttype'){ - $value=~ s/\\//g; - print bold("$key $value,"); - } +if ($subject){ + $search .= "&subject=$subject"; + $searchdesc.="subject $subject, "; } -print " $count results found"; -my $offset2=$num+$offset; -my $dispnum=$offset+1; -print "
Results $dispnum to $offset2 displayed"; -print mktablehdr; -if ($type ne 'opac'){ - if ($subject ne ''){ - print mktablerow(1,$main,'SUBJECT','/images/background-mem.gif'); - } elsif ($illustrator ne '') { - print mktablerow(7,$main,'TITLE','AUTHOR', 'ILLUSTRATOR', bold('©'),'COUNT',bold('LOCATION'),'','/images/background-mem.gif'); - } else { - print mktablerow(6,$main,'TITLE','AUTHOR',bold('©'),'COUNT',bold('LOCATION'),'','/images/background-mem.gif'); - } -} else { - if ($subject ne ''){ - print mktablerow(6,$main,'SUBJECT','   ','   '); - } elsif ($illustrator ne '') { - print mktablerow(7,$main,'TITLE','AUTHOR','ILLUSTRATOR', bold('©'),'COUNT',bold('BRANCH'),''); - } else { - print mktablerow(6,$main,'TITLE','AUTHOR',bold('©'),'COUNT',bold('BRANCH'),''); - } +if ($search{"author"}){ + $search .= "&author=$search{author}"; + $searchdesc.="author $search{author}, "; } -my $count2=@results; -if ($keyword ne '' && $offset > 0){ - $count2=$count-$offset; - if ($count2 > 10){ - $count2=10; - } +if ($search{"class"}){ + $search .= "&class=$search{class}"; + $searchdesc.="class $search{class}, "; } -#print $count2; -my $i=0; -my $colour=1; -while ($i < $count2){ -# print $results[$i]."\n"; - my @stuff=split('\t',$results[$i]); - $stuff[1]=~ s/\`/\\\'/g; - my $title2=$stuff[1]; - $title2=~ s/ /%20/g; - if ($subject eq ''){ -# print $stuff[0]; - $stuff[1]=mklink("/cgi-bin/koha/detail.pl?type=$type&bib=$stuff[2]&title=$title2",$stuff[1]); - my $word=$stuff[0]; -# print $word; - $word=~ s/([a-z]) +([a-z])/$1%20$2/ig; - $word=~ s/ //g; - $word=~ s/ /%20/g; - $word=~ s/\,/\,%20/g; - $word=~ s/\n//g; - my $url="/cgi-bin/koha/search.pl?author=$word&type=$type"; - $stuff[7]=$stuff[5]; - $stuff[5]=''; - $stuff[0]=mklink($url,$stuff[0]); - my ($count,$lcount,$nacount,$fcount,$scount,$lostcount,$mending,$transit,$ocount)=itemcount($env,$stuff[2],$type); - $stuff[4]=$count; - if ($nacount > 0){ - $stuff[5]=$stuff[5]."On Loan"; - if ($nacount >1 ){ - $stuff[5]=$stuff[5]." ($nacount)"; - } - $stuff[5].=" "; - } - if ($lcount > 0){ - $stuff[5]=$stuff[5]."Levin"; - if ($lcount >1 ){ - $stuff[5]=$stuff[5]." ($lcount)"; - } - $stuff[5].=" "; - } - if ($fcount > 0){ - $stuff[5]=$stuff[5]."Foxton"; - if ($fcount >1 ){ - $stuff[5]=$stuff[5]." ($fcount)"; - } - $stuff[5].=" "; - } - if ($scount > 0){ - $stuff[5]=$stuff[5]."Shannon"; - if ($scount >1 ){ - $stuff[5]=$stuff[5]." ($scount)"; - } - $stuff[5].=" "; - } - if ($lostcount > 0){ - $stuff[5]=$stuff[5]."Lost"; - if ($lostcount >1 ){ - $stuff[5]=$stuff[5]." ($lostcount)"; - } - $stuff[5].=" "; - } - if ($mending > 0){ - $stuff[5]=$stuff[5]."Mending"; - if ($mending >1 ){ - $stuff[5]=$stuff[5]." ($mending)"; - } - $stuff[5].=" "; - } - if ($transit > 0){ - $stuff[5]=$stuff[5]."In Transiit"; - if ($transit >1 ){ - $stuff[5]=$stuff[5]." ($transit)"; - } - $stuff[5].=" "; - } - if ($ocount > 0){ - $stuff[5]=$stuff[5]."On Order"; - if ($ocount >1 ){ - $stuff[5]=$stuff[5]." ($ocount)"; - } - $stuff[5].=" "; - } - - if ($type ne 'opac'){ - $stuff[6]=mklink("/cgi-bin/koha/request.pl?bib=$stuff[2]","Request"); - } - } else { - my $word=$stuff[1]; - $word=~ s/ /%20/g; - - $stuff[1]=mklink("/cgi-bin/koha/subjectsearch.pl?subject=$word&type=$type",$stuff[1]); - - } - - if ($colour == 1){ - if ($illustrator) { - print mktablerow(7,$secondary,$stuff[1],$stuff[0],$stuff[7],$stuff[3],$stuff[4],$stuff[5],$stuff[6]); - } else { - print mktablerow(6,$secondary,$stuff[1],$stuff[0],$stuff[3],$stuff[4],$stuff[5],$stuff[6]); - } - $colour=0; - } else { - if ($illustrator) { - print mktablerow(7,'white',$stuff[1],$stuff[0],$stuff[7],$stuff[3],$stuff[4],$stuff[5],$stuff[6]); - } else { - print mktablerow(6,'white',$stuff[1],$stuff[0],$stuff[3],$stuff[4],$stuff[5],$stuff[6]); - } - $colour=1; - } - $i++; +if ($search{"title"}){ + $search .= "&title=$search{title}"; + $searchdesc.="title $search{title}, "; } -$offset=$num+$offset; -if ($type ne 'opac'){ - if ($illustrator) { - print mktablerow(7,$main,'   ','   ','  ','  ','','','','/images/background-mem.gif'); - } else { - print mktablerow(6,$main,'   ','   ','  ','  ','','','/images/background-mem.gif'); - } -} else { - if ($illustrator) { - print mktablerow(7,$main,'   ','   ','  ','   ','', '',''); - } else { - print mktablerow(6,$main,'   ','   ','  ','   ','',''); - } +if ($search{"dewey"}){ + $search .= "&dewey=$search{dewey}"; + $searchdesc.="dewey $search{dewey}, "; } -print mktableft(); -my $search; +$search.="&ttype=$search{ttype}"; - $search="num=$num&offset=$offset&type=$type"; - if ($subject ne ''){ - $subject=~ s/ /%20/g; - $search=$search."&subject=$subject"; - } - if ($title ne ''){ - $title=~ s/ /%20/g; - $search=$search."&title=$title"; - } - if ($author ne ''){ - $author=~ s/ /%20/g; - $search=$search."&author=$author"; - } - if ($keyword ne ''){ - $keyword=~ s/ /%20/g; - $search=$search."&keyword=$keyword"; - } - if ($class ne ''){ - $keyword=~ s/ /%20/g; - $search=$search."&class=$class"; - } - if ($dewey ne ''){ - $search=$search."&dewey=$dewey"; +$search=~ s/ /%20/g; +$template->param(startfrom => $startfrom+1); +($startfrom+$num<=$count) ? ($template->param(endat => $startfrom+$num)) : ($template->param(endat => $count)); +$template->param(numrecords => $count); +my $nextstartfrom=($startfrom+$num<$count) ? ($startfrom+$num) : (-1); +my $prevstartfrom=($startfrom-$num>=0) ? ($startfrom-$num) : (-1); +$template->param(nextstartfrom => $nextstartfrom); +my $displaynext=1; +my $displayprev=0; +($nextstartfrom==-1) ? ($displaynext=0) : ($displaynext=1); +($prevstartfrom==-1) ? ($displayprev=0) : ($displayprev=1); +$template->param(displaynext => $displaynext); +$template->param(displayprev => $displayprev); +($type eq 'opac') ? ($template->param(opac => 1)) : ($template->param(opac => 0)); +$template->param(prevstartfrom => $prevstartfrom); +$template->param(search => $search); +$template->param(searchdesc => $searchdesc); +$template->param(SEARCH_RESULTS => $resultsarray); +#$template->param(includesdir => $includes); + +my @numbers = (); +if ($count>10) { + for (my $i=1; $i<$count/10+1; $i++) { + if ($i<16) { + if ($search{"title"}) + { + push @forminputs, { line => "title=$search{title}"}; + } + my $highlight=0; + ($startfrom==($i-1)*10) && ($highlight=1); + my $formelements=''; + foreach (@forminputs) { + my $line=$_->{line}; + $formelements.="$line&"; + } + $formelements=~s/ /+/g; + push @numbers, { number => $i, highlight => $highlight , FORMELEMENTS => $formelements, FORMINPUTS => \@forminputs, startfrom => ($i-1)*10, opac => (($type eq 'opac') ? (1) : (0))}; + } } - $search.="&ttype=$ttype"; -if ($offset < $count){ - my $stuff=mklink("/cgi-bin/koha/search.pl?$search",'Next'); - print $stuff; } -print "
"; -my $pages=$count/10; -$pages++; -for (my $i=1;$i<$pages;$i++){ - my $temp=$i*10; - $temp=$temp-10; - $search=~ s/offset=[0-9]+/offset=$temp/; - my $stuff=mklink("/cgi-bin/koha/search.pl?$search",$i); - print "$stuff "; + +$template->param(numbers => \@numbers); +if (C4::Context->boolean_preference('marc') eq '1') { + $template->param(script => "MARCdetail.pl"); +} else { + $template->param(script => "detail.pl"); } - -print endcenter(); -print endmenu($type); -print endpage(); +# Print the page +output_html_with_http_headers $query, $cookie, $template->output; -sub validate { - my ($input)=@_; - $input=~ s/\<[a-z]+\>//gi; - $input=~ s/\<\/[a-z]+\>//gi; - $input=~ s/\//g; - $input=~ s/^%//g; - return($input); -}