X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=acqui%2Fz3950_search.pl;h=68cd0d6a5dfad7ca328218952ea09906bf59885f;hb=827ef0e83c594d92c2fc387760b3f0e43adfe032;hp=1238e16ae24929177e74dd52717682c45d5af599;hpb=4d6b38c794115586f03bf1ca7c0f22dae13c19af;p=koha_fer diff --git a/acqui/z3950_search.pl b/acqui/z3950_search.pl index 1238e16ae2..68cd0d6a5d 100755 --- a/acqui/z3950_search.pl +++ b/acqui/z3950_search.pl @@ -30,6 +30,7 @@ use C4::Context; use C4::Breeding; use C4::Koha; use C4::Charset; +use C4::Bookseller qw/ GetBookSellerFromId /; use ZOOM; my $input = new CGI; @@ -44,23 +45,31 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); -my $dbh = C4::Context->dbh; -my $error = $input->param('error'); -my $biblionumber = $input->param('biblionumber'); -$biblionumber = 0 unless $biblionumber; -my $frameworkcode = $input->param('frameworkcode'); -my $title = $input->param('title'); -my $author = $input->param('author'); -my $isbn = $input->param('isbn'); -my $issn = $input->param('issn'); -my $lccn = $input->param('lccn'); -my $subject= $input->param('subject'); -my $dewey = $input->param('dewey'); -my $op = $input->param('op'); -my $booksellerid = $input->param('booksellerid'); -my $basketno = $input->param('basketno'); + +my $dbh = C4::Context->dbh; +my $error = $input->param('error'); +my $biblionumber = $input->param('biblionumber'); +$biblionumber = 0 unless $biblionumber; +my $frameworkcode = $input->param('frameworkcode'); +my $title = $input->param('title'); +my $author = $input->param('author'); +my $isbn = $input->param('isbn'); +my $issn = $input->param('issn'); +my $lccn = $input->param('lccn'); +my $lccall = $input->param('lccall'); +my $subject = $input->param('subject'); +my $dewey = $input->param('dewey'); +my $controlnumber = $input->param('controlnumber'); +my $op = $input->param('op'); +my $booksellerid = $input->param('booksellerid'); +my $basketno = $input->param('basketno'); + +my $page = $input->param('current_page') || 1; +$page = $input->param('goto_page') if $input->param('changepage_goto'); +my $show_next = 0; +my $total_pages = 0; + my $noconnection; -my $numberpending; my $attr = ''; my $term; my $host; @@ -84,7 +93,7 @@ unless ($random) $random = rand(1000000000); } -my $DEBUG = 0; # if set to 1, many debug message are send on syslog. +my $DEBUG = $ENV{DEBUG} || 0; # if set to 1, many debug message are send on syslog. # get framework list my $frameworks = getframeworks; @@ -97,42 +106,66 @@ foreach my $thisframeworkcode ( keys %$frameworks ) { if ( $row{'value'} eq $frameworkcode){ $row{'active'} = 'true'; } - push @frameworkcodeloop, $row; + push @frameworkcodeloop, \%row; } +my $vendor = GetBookSellerFromId($booksellerid); $template->param( frameworkcode => $frameworkcode, frameworkcodeloop => \@frameworkcodeloop, booksellerid => $booksellerid, - basketno => $basketno); + basketno => $basketno, + name => $vendor->{'name'} + ); + +$template->param( + isbn => $isbn, + issn => $issn, + lccn => $lccn, + lccall => $lccall, + title => $title, + author => $author, + controlnumber=> $controlnumber, + biblionumber => $biblionumber, + dewey => $dewey, + subject => $subject, +); if ( $op ne "do_search" ) { my $sth = $dbh->prepare("select id,host,name,checked from z3950servers order by host"); $sth->execute(); my $serverloop = $sth->fetchall_arrayref( {} ); $template->param( - isbn => $isbn, - issn => $issn, - lccn => $lccn, - title => $title, - author => $author, serverloop => $serverloop, opsearch => "search", - biblionumber => $biblionumber, ); output_html_with_http_headers $input, $cookie, $template->output; + exit; } -else { + my @id = $input->param('id'); + + if ( not @id ) { + # empty server list -> report and exit + $template->param( emptyserverlist => 1 ); + output_html_with_http_headers $input, $cookie, $template->output; + exit; + } + my @oConnection; my @oResult; + my @errconn; my $s = 0; my $query; my $nterms; - if ($isbn || $issn) { - $term=$isbn if ($isbn); - $term=$issn if ($issn); - $query .= " \@or \@attr 1=8 \"$term\" \@attr 1=7 \"$term\" "; + if ($isbn) { + $term=$isbn; + $query .= " \@attr 1=7 \@attr 5=1 \"$term\" "; + $nterms++; + } + if ($issn) { + $term=$issn; + $query .= " \@attr 1=8 \@attr 5=1 \"$term\" "; $nterms++; } if ($title) { @@ -154,10 +187,18 @@ else { $query .= " \@attr 1=21 \"$subject\" "; $nterms++; } - if ($lccn) { + if ($lccn) { $query .= " \@attr 1=9 $lccn "; $nterms++; } + if ($lccall) { + $query .= " \@attr 1=16 \@attr 2=3 \@attr 3=1 \@attr 4=1 \@attr 5=1 \@attr 6=1 \"$lccall\" "; + $nterms++; + } + if ($controlnumber) { + $query .= " \@attr 1=12 \"$controlnumber\" "; + $nterms++; + } for my $i (1..$nterms-1) { $query = "\@and " . $query; } @@ -168,7 +209,6 @@ warn "query ".$query if $DEBUG; $sth->execute($servid); while ( $server = $sth->fetchrow_hashref ) { warn "serverinfo ".join(':',%$server) if $DEBUG; - my $noconnection = 0; my $option1 = new ZOOM::Options(); $option1->option( 'async' => 1 ); $option1->option( 'elementSetName', 'F' ); @@ -202,7 +242,10 @@ warn "query ".$query if $DEBUG; # $oResult[$z] = $oConnection[$z]->search_pqf($query); } -sub displayresults { + warn "# nremaining = $nremaining\n" if $DEBUG; + + while ( $nremaining-- ) { + my $k; my $event; while ( ( $k = ZOOM::event( \@oConnection ) ) != 0 ) { @@ -215,25 +258,24 @@ sub displayresults { if ( $k != 0 ) { $k--; - warn $serverhost[$k] if $DEBUG; + warn "event from $k server = ",$serverhost[$k] if $DEBUG; my ( $error, $errmsg, $addinfo, $diagset ) = $oConnection[$k]->error_x(); if ($error) { - warn "$k $serverhost[$k] error $query: $errmsg ($error) $addinfo\n" - if $DEBUG; - + if ($error =~ m/^(10000|10007)$/ ) { + push(@errconn, {'server' => $serverhost[$k]}); + } + $DEBUG and warn "$k $serverhost[$k] error $query: $errmsg ($error) $addinfo\n"; } else { my $numresults = $oResult[$k]->size(); + warn "numresults = $numresults" if $DEBUG; my $i; my $result = ''; - if ( $numresults > 0 ) { - for ( - $i = 0 ; - $i < ( ( $numresults < 20 ) ? ($numresults) : (20) ) ; - $i++ - ) - { + if ( $numresults > 0 and $numresults >= (($page-1)*20)) { + $show_next = 1 if $numresults >= ($page*20); + $total_pages = int($numresults/20)+1 if $total_pages < ($numresults/20); + for ($i = ($page-1)*20; $i < (($numresults < ($page*20)) ? $numresults : ($page*20)); $i++) { my $rec = $oResult[$k]->record($i); if ($rec) { my $marcrecord; @@ -246,22 +288,26 @@ sub displayresults { ## In HEAD i change everything to UTF-8 # In rel2_2 i am not sure what encoding is so no character conversion is done here ##Add necessary encoding changes to here -TG + + # Normalize the record so it doesn't have separated diacritics + SetUTF8Flag($marcrecord); + my $oldbiblio = TransformMarcToKoha( $dbh, $marcrecord, "" ); $oldbiblio->{isbn} =~ s/ |-|\.//g if $oldbiblio->{isbn}; - $oldbiblio->{issn} =~ s/ |-|\.//g if $oldbiblio->{issn}; + # pad | and ( with spaces to allow line breaks in the HTML + $oldbiblio->{isbn} =~ s/\|/ \| /g if $oldbiblio->{isbn}; + $oldbiblio->{isbn} =~ s/\(/ \(/g if $oldbiblio->{isbn}; + + $oldbiblio->{issn} =~ s/ |-|\.//g if $oldbiblio->{issn}; + # pad | and ( with spaces to allow line breaks in the HTML + $oldbiblio->{issn} =~ s/\|/ \| /g if $oldbiblio->{issn}; + $oldbiblio->{issn} =~ s/\(/ \(/g if $oldbiblio->{issn}; my ( $notmarcrecord, $alreadyindb, $alreadyinfarm, $imported, $breedingid ) = ImportBreeding( $marcdata, 2, $serverhost[$k], $encoding[$k], $random, 'z3950' ); my %row_data; - if ( $i % 2 ) { - $toggle = 1; - } - else { - $toggle = 0; - } - $row_data{toggle} = $toggle; $row_data{server} = $servername[$k]; $row_data{isbn} = $oldbiblio->{isbn}; $row_data{lccn} = $oldbiblio->{lccn}; @@ -270,27 +316,41 @@ sub displayresults { $row_data{breedingid} = $breedingid; $row_data{biblionumber} = $biblionumber; push( @breeding_loop, \%row_data ); - + } else { - push(@breeding_loop,{'toggle'=>($i % 2)?1:0,'server'=>$servername[$k],'title'=>join(': ',$oConnection[$k]->error_x()),'breedingid'=>-1,'biblionumber'=>-1}); + push(@breeding_loop,{'server'=>$servername[$k],'title'=>join(': ',$oConnection[$k]->error_x()),'breedingid'=>-1,'biblionumber'=>-1}); } # $rec } # upto 5 results } #$numresults } } # if $k !=0 - $numberpending = $nremaining - 1; + my $numberpending = $nremaining - 1; + + my @servers = (); + foreach my $id (@id) { + push(@servers,{id => $id}); + } + $template->param( breeding_loop => \@breeding_loop, server => $servername[$k], numberpending => $numberpending, + current_page => $page, + servers => \@servers, + total_pages => $total_pages, ); - output_html_with_http_headers $input, $cookie, $template->output if $numberpending == 0; + $template->param(show_nextbutton=>1) if $show_next; + $template->param(show_prevbutton=>1) if $page != 1; - # print $template->output if $firstresult !=1; + # print $template->output if $firstresult !=1; $firstresult++; -} -displayresults(); -while ( --$nremaining > 0 ) { - displayresults(); - } -} ## if op=search + + } # while nremaining + +$template->param( +breeding_loop => \@breeding_loop, +#server => $servername[$k], +numberpending => $nremaining > 0 ? $nremaining : 0, +errconn => \@errconn +); +output_html_with_http_headers $input, $cookie, $template->output;