From b355e2187c4b2e13a5177fa50b8b8145970394fc Mon Sep 17 00:00:00 2001 From: rangi Date: Wed, 15 May 2002 04:36:51 +0000 Subject: [PATCH] Reverting back to old search.pl (for now) The html::template version is in html-template --- search.pl | 419 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 305 insertions(+), 114 deletions(-) diff --git a/search.pl b/search.pl index 736f670fbd..4aba806db7 100755 --- a/search.pl +++ b/search.pl @@ -1,139 +1,330 @@ #!/usr/bin/perl -use HTML::Template; +#script to provide intranet (librarian) advanced search facility + use strict; -require Exporter; -use C4::Database; -use CGI; use C4::Search; -use C4::Output; # no contains picktemplate - -my $query=new CGI; - - -my $language='french'; - - -my %configfile; -open (KC, "/etc/koha.conf"); -while () { - chomp; - (next) if (/^\s*#/); - if (/(.*)\s*=\s*(.*)/) { - my $variable=$1; - my $value=$2; - # Clean up white space at beginning and end - $variable=~s/^\s*//g; - $variable=~s/\s*$//g; - $value=~s/^\s*//g; - $value=~s/\s*$//g; - $configfile{$variable}=$value; - } -} -#print $query->header; - -my $includes=$configfile{'includes'}; -($includes) || ($includes="/usr/local/www/hdl/htdocs/includes"); -my $templatebase="catalogue/searchresults.tmpl"; -my $startfrom=$query->param('startfrom'); -($startfrom) || ($startfrom=0); -my $theme=picktemplate($includes, $templatebase); - -my $subject=$query->param('subject'); -# if its a subject we need to use the subject.tmpl -if ($subject) { - $templatebase=~ s/searchresults\.tmpl/subject\.tmpl/; - $theme=picktemplate($includes, $templatebase); +use CGI; +use C4::Output; + +my $env; +my $input = new CGI; +print $input->header; +#print $input->dump; + +#whether it is called from the opac or the intranet +my $type=$input->param('type');if ($type eq ''){ + $type = 'intra'; } -my $template = HTML::Template->new(filename => "$includes/templates/$theme/$templatebase", die_on_bad_params => 0, path => [$includes]); +my $ttype=$input->param('ttype'); -my $env; -$env->{itemcount}=1; +#setup colours +my $main; +my $secondary; -# get all the search variables -# we assume that C4::Search will validate these values for us +if ($type eq 'opac'){ + $main='#99cccc'; + $secondary='#efe5ef'; +} else { + $main='#cccc99'; + $secondary='#ffffcc'; +} + +#print $input->Dump; +my $blah; my %search; -my $keyword=$query->param('keyword'); + +#build hash of users input +my $title=validate($input->param('title')); +$search{'title'}=$title; + +my $keyword=validate($input->param('keyword')); $search{'keyword'}=$keyword; -$search{'subject'}=$subject; -my $author=$query->param('author'); +$search{'front'}=validate($input->param('front')); + +my $author=validate($input->param('author')); $search{'author'}=$author; -my $illustrator=$query->param('illustrator'); -$search{'param'}=$illustrator; -my $itemnumber=$query->param('itemnumber'); -$search{'itemnumber'}=$itemnumber; -my $isbn=$query->param('isbn'); + +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=$query->param('date-before'); -$search{'date-before'}=$datebefore; -my $class=$query->param('class'); + +my $datebefore=validate($input->param('date-before')); +$search{'date-before'}; + +my $class=$input->param('class'); $search{'class'}=$class; -my $dewey=$query->param('dewey'); -$search{'dewey'}; -my $branch=$query->param('branch'); -$search{'branch'}=$branch; -my $title=$query->param('title'); -$search{'title'}=$title; -my $ttype=$query->param('ttype'); + $search{'ttype'}=$ttype; -my $forminputs; -($keyword) && (push @$forminputs, { line => "keyword=$keyword"}); -($subject) && (push @$forminputs, { line => "subject=$subject"}); -($author) && (push @$forminputs, { line => "author=$author"}); -($illustrator) && (push @$forminputs, { line => "illustrator=$illustrator"}); -($itemnumber) && (push @$forminputs, { line => "itemnumber=$itemnumber"}); -($isbn) && (push @$forminputs, { line => "isbn=$isbn"}); -($datebefore) && (push @$forminputs, { line => "date-before=$datebefore"}); -($class) && (push @$forminputs, { line => "class=$class"}); -($dewey) && (push @$forminputs, { line => "dewey=$dewey"}); -($branch) && (push @$forminputs, { line => "branch=$branch"}); -($title) && (push @$forminputs, { line => "title=$title"}); -($ttype) && (push @$forminputs, { line => "ttype=$ttype"}); -$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=20; -my ($count,@results)=catalogsearch($env,'',\%search,$num,$startfrom); - -my $resultsarray=\@results; - -my $search="num=20"; -if ($keyword){ - $search=$search."&keyword=$keyword"; +my $dewey=validate($input->param('dewey')); +$search{'dewey'}=$dewey; + +my $branch=validate($input->param('branch')); +$search{'branch'}=$branch; + +my @results; +my $offset=$input->param('offset'); +if ($offset eq ''){ + $offset=0; } -if ($subject){ - $search=$search."&subject=$subject"; +my $num=$input->param('num'); +if ($num eq ''){ + $num=10; } -if ($author){ - $search=$search."&author=$author"; +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'); } -if ($class){ - $search=$search."&class=$class"; +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 ($title){ - $search=$search."&title=$title"; +print "You searched on "; +while ( my ($key, $value) = each %search) { + if ($value ne '' && $key ne 'ttype'){ + $value=~ s/\\//g; + print bold("$key $value,"); + } } -if ($dewey){ - $search=$search."&dewey=$dewey"; +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'),''); + } } -$search.="&ttype=$ttype"; +my $count2=@results; +if ($keyword ne '' && $offset > 0){ + $count2=$count-$offset; + if ($count2 > 10){ + $count2=10; + } +} +#print $count2; +my $i=0; +my $colour=1; +while ($i < $count2){ +# print $results[$i]."\n"; +# my @stuff=split('\t',$results[$i]); + my $result=$results[$i]; + $result->{'title'}=~ s/\`/\\\'/g; + my $title2=$result->{'title'}; + $title2=~ s/ /%20/g; + my $location=''; + my $itemcount; + if ($subject eq ''){ + $result->{'title'}=mklink("/cgi-bin/koha/detail.pl?type=$type&bib=$result->{'biblionumber'}&title=$title2",$result->{'title'}); + my $word=$result->{'author'}; + $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"; + $result->{'author'}=mklink($url,$result->{'author'}); + my ($count,$lcount,$nacount,$fcount,$scount,$lostcount,$mending,$transit,$ocount)=itemcount($env,$result->{'biblionumber'},$type); + $itemcount=$count; + #### + # Fix this chunk below, remove all hardcoded branch references + # need to fix itemcount as well + ### + if ($nacount > 0){ + $location=$location."On Loan"; + if ($nacount >1 ){ + $location=$location." ($nacount)"; + } + $location.=" "; + } + if ($lcount > 0){ + $location=$location."Levin"; + if ($lcount >1 ){ + $location=$location." ($lcount)"; + } + $location.=" "; + } + if ($fcount > 0){ + $location=$location."Foxton"; + if ($fcount >1 ){ + $location=$location." ($fcount)"; + } + $location.=" "; + } + if ($scount > 0){ + $location=$location."Shannon"; + if ($scount >1 ){ + $location=$location." ($scount)"; + } + $location.=" "; + } + if ($lostcount > 0){ + $location=$location."Lost"; + if ($lostcount >1 ){ + $location=$location." ($lostcount)"; + } + $location.=" "; + } + if ($mending > 0){ + $location=$location."Mending"; + if ($mending >1 ){ + $location=$location." ($mending)"; + } + $location.=" "; + } + if ($transit > 0){ + $location=$location."In Transiit"; + if ($transit >1 ){ + $location=$location." ($transit)"; + } + $location.=" "; + } + if ($ocount > 0){ + $location=$location."On Order"; + if ($ocount >1 ){ + $location=$location." ($ocount)"; + } + $location.=" "; + } + +# if ($type ne 'opac'){ +# $result->{'request'}=mklink("/cgi-bin/koha/request.pl?bib=$stuff[2]","Request"); +# } + } else { + my $word=$result->{'subject'}; + $word=~ s/ /%20/g; + + $result->{'title'}=mklink("/cgi-bin/koha/subjectsearch.pl?subject=$word&type=$type",$result->{'subject'}); -$search=~ s/ /%20/g; -$template->param(startfrom => $startfrom+1); -$template->param(endat => $startfrom+20); -$template->param(numrecords => $count); -my $nextstartfrom=($startfrom+20<$count-20) ? ($startfrom+20) : ($count-20); -my $prevstartfrom=($startfrom-20>0) ? ($startfrom-20) : (0); -$template->param(nextstartfrom => $nextstartfrom); -$template->param(prevstartfrom => $prevstartfrom); -$template->param(search => $search); -$template->param(SEARCH_RESULTS => $resultsarray); -$template->param(includesdir => $includes); + } + if ($colour == 1){ + if ($illustrator) { + print mktablerow(7,$secondary,$result->{'title'},$result->{'author'},$result->{'illus'},$result->{'copyrightdate'},$itemcount,$location); + } else { + print mktablerow(6,$secondary,$result->{'title'},$result->{'author'},$result->{'copyrightdate'},$itemcount,$location); + } + $colour=0; + } else { + if ($illustrator) { + print mktablerow(7,'white',$result->{'title'},$result->{'author'},$result->{'illus'},$result->{'copyrightdate'},$itemcount,$location); + } else { + print mktablerow(6,'white',$result->{'title'},$result->{'author'},$result->{'copyrightdate'},$itemcount,$location); + } + $colour=1; + } + $i++; +} +$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,'   ','   ','  ','   ','',''); + } +} +print mktableft(); +my $search; -print "Content-Type: text/html\n\n", $template->output; + $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.="&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 "; +} + +print endcenter(); +print endmenu($type); +print endpage(); + +sub validate { + my ($input)=@_; + $input=~ s/\<[a-z]+\>//gi; + $input=~ s/\<\/[a-z]+\>//gi; + $input=~ s/\//g; + $input=~ s/^%//g; + return($input); +} -- 2.39.2