#!/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 (<KC>) {
- 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 "<br> Results $dispnum to $offset2 displayed";
+print mktablehdr;
+if ($type ne 'opac'){
+ if ($subject ne ''){
+ print mktablerow(1,$main,'<b>SUBJECT</b>','/images/background-mem.gif');
+ } elsif ($illustrator ne '') {
+ print mktablerow(7,$main,'<b>TITLE</b>','<b>AUTHOR</b>', '<b>ILLUSTRATOR<b>', bold('©'),'<b>COUNT</b>',bold('LOCATION'),'','/images/background-mem.gif');
+ } else {
+ print mktablerow(6,$main,'<b>TITLE</b>','<b>AUTHOR</b>',bold('©'),'<b>COUNT</b>',bold('LOCATION'),'','/images/background-mem.gif');
+ }
+} else {
+ if ($subject ne ''){
+ print mktablerow(6,$main,'<b>SUBJECT</b>',' ',' ');
+ } elsif ($illustrator ne '') {
+ print mktablerow(7,$main,'<b>TITLE</b>','<b>AUTHOR</b>','<b>ILLUSTRATOR</b>', bold('©'),'<b>COUNT</b>',bold('BRANCH'),'');
+ } else {
+ print mktablerow(6,$main,'<b>TITLE</b>','<b>AUTHOR</b>',bold('©'),'<b>COUNT</b>',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 "<br>";
+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;
+ $input=~ s/^%//g;
+ return($input);
+}