From 5444413a4f6183960f71a7f7eab69e953c515d69 Mon Sep 17 00:00:00 2001 From: Colin Campbell Date: Wed, 6 Apr 2011 11:42:40 +0200 Subject: [PATCH] Bug 5415 More consistent returns from SimpleSearch SimpleSearch returns a 3 element array the first pf which is an error indication. If an error is returned the other elements are undefined. If error is undef the other elements are defined This restores the consistency of the interface as it was before the addition of zebra Signed-off-by: Christophe Croullebois Signed-off-by: Chris Cormack --- C4/Search.pm | 77 ++++++++++++++++++++++++++++------------------------ 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/C4/Search.pm b/C4/Search.pm index a8d5ba7b44..3b1ec79e0e 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -121,18 +121,19 @@ sub FindDuplicate { } } - # FIXME: add error handling - my ( $error, $searchresults ) = SimpleSearch($query); # FIXME :: hardcoded ! + my ( $error, $searchresults, undef ) = SimpleSearch($query); # FIXME :: hardcoded ! my @results; - foreach my $possible_duplicate_record (@$searchresults) { - my $marcrecord = - MARC::Record->new_from_usmarc($possible_duplicate_record); - my $result = TransformMarcToKoha( $dbh, $marcrecord, '' ); - - # FIXME :: why 2 $biblionumber ? - if ($result) { - push @results, $result->{'biblionumber'}; - push @results, $result->{'title'}; + if (!defined $error) { + foreach my $possible_duplicate_record (@{$searchresults}) { + my $marcrecord = + MARC::Record->new_from_usmarc($possible_duplicate_record); + my $result = TransformMarcToKoha( $dbh, $marcrecord, '' ); + + # FIXME :: why 2 $biblionumber ? + if ($result) { + push @results, $result->{'biblionumber'}; + push @results, $result->{'title'}; + } } } return @results; @@ -154,12 +155,16 @@ This function provides a simple search API on the bibliographic catalog * $max_results - if present, determines the maximum number of records to fetch. undef is All. defaults to undef. -=item C +=item C - * $error is a empty unless an error is detected - * \@results is an array of records. + Returns an array consisting of three elements + * $error is undefined unless an error is detected + * $results is a reference to an array of records. * $total_hits is the number of hits that would have been returned with no limit + If an error is returned the two other return elements are undefined. If error itself is undefined + the other two elements are always defined + =item C =back @@ -173,23 +178,23 @@ if (defined $error) { exit; } -my $hits = scalar @$marcresults; +my $hits = @{$marcresults}; my @results; -for my $i (0..$hits) { - my %resultsloop; - my $marcrecord = MARC::File::USMARC::decode($marcresults->[$i]); - my $biblio = TransformMarcToKoha(C4::Context->dbh,$marcrecord,''); - - #build the hash for the template. - $resultsloop{title} = $biblio->{'title'}; - $resultsloop{subtitle} = $biblio->{'subtitle'}; - $resultsloop{biblionumber} = $biblio->{'biblionumber'}; - $resultsloop{author} = $biblio->{'author'}; - $resultsloop{publishercode} = $biblio->{'publishercode'}; - $resultsloop{publicationyear} = $biblio->{'publicationyear'}; +for my $r ( @{$marcresults} ) { + my $marcrecord = MARC::File::USMARC::decode($r); + my $biblio = TransformMarcToKoha(C4::Context->dbh,$marcrecord,q{}); + + #build the iarray of hashs for the template. + push @results, { + title => $biblio->{'title'}, + subtitle => $biblio->{'subtitle'}, + biblionumber => $biblio->{'biblionumber'}, + author => $biblio->{'author'}, + publishercode => $biblio->{'publishercode'}, + publicationyear => $biblio->{'publicationyear'}, + }; - push @results, \%resultsloop; } $template->param(result=>\@results); @@ -207,14 +212,14 @@ sub SimpleSearch { return ( undef, $search_result, scalar($result->{hits}) ); } else { + return ( 'No query entered', undef, undef ) unless $query; # FIXME hardcoded value. See catalog/search.pl & opac-search.pl too. - my @servers = defined ( $servers ) ? @$servers : ( "biblioserver" ); - my @results; + my @servers = defined ( $servers ) ? @$servers : ( 'biblioserver' ); my @zoom_queries; my @tmpresults; my @zconns; - my $total_hits; - return ( "No query entered", undef, undef ) unless $query; + my $results = []; + my $total_hits = 0; # Initialize & Search Zebra for ( my $i = 0 ; $i < @servers ; $i++ ) { @@ -258,7 +263,7 @@ sub SimpleSearch { for my $j ( $first_record..$last_record ) { my $record = $tmpresults[ $i - 1 ]->record( $j-1 )->raw(); # 0 indexed - push @results, $record; + push @{$results}, $record; } } } @@ -270,7 +275,7 @@ sub SimpleSearch { $zoom_query->destroy(); } - return ( undef, \@results, $total_hits ); + return ( undef, $results, $total_hits ); } } @@ -2641,11 +2646,11 @@ AND (authtypecode IS NOT NULL AND authtypecode<>\"\")|); warn "BIBLIOADDSAUTHORITIES: $error"; return (0,0) ; } - if ($results && scalar(@$results)==1) { + if ( @{$results} == 1 ) { my $marcrecord = MARC::File::USMARC::decode($results->[0]); $field->add_subfields('9'=>$marcrecord->field('001')->data); $countlinked++; - } elsif (scalar(@$results)>1) { + } elsif ( @{$results} > 1 ) { #More than One result #This can comes out of a lack of a subfield. # my $marcrecord = MARC::File::USMARC::decode($results->[0]); -- 2.39.5