X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FSearch.pm;h=45a4a069a397cc22d5234f156f5441ac1ea42e1b;hb=97f8b3abfff5acefe8a5b948b3c63ef7e5cb851e;hp=cbff21f32d1a7881d08adf2230e7387280b889b1;hpb=faa9a396944953528c5edf56baa0fe5150d75840;p=koha.git diff --git a/C4/Search.pm b/C4/Search.pm index cbff21f32d..45a4a069a3 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -221,7 +221,7 @@ sub SimpleSearch { my $search_result = ( $result->{hits} && $result->{hits} > 0 ? $result->{'RECORDS'} : [] ); - return ( undef, $search_result ); + return ( undef, $search_result, scalar($search_result) ); } else { # FIXME hardcoded value. See catalog/search.pl & opac-search.pl too. @@ -229,7 +229,8 @@ sub SimpleSearch { my @results; my @tmpresults; my @zconns; - return ( "No query entered", undef ) unless $query; + my $total_hits; + return ( "No query entered", undef, undef ) unless $query; # Initialize & Search Zebra for ( my $i = 0 ; $i < @servers ; $i++ ) { @@ -246,7 +247,7 @@ sub SimpleSearch { . $zconns[$i]->addinfo() . " " . $zconns[$i]->diagset(); - return ( $error, undef ) if $zconns[$i]->errcode(); + return ( $error, undef, undef ) if $zconns[$i]->errcode(); }; if ($@) { @@ -257,16 +258,16 @@ sub SimpleSearch { . $@->addinfo() . " " . $@->diagset(); warn $error; - return ( $error, undef ); + return ( $error, undef, undef ); } } - while ( ( my $i = ZOOM::event( \@zconns ) ) != 0 ) { my $event = $zconns[ $i - 1 ]->last_event(); if ( $event == ZOOM::Event::ZEND ) { my $first_record = defined( $offset ) ? $offset+1 : 1; my $hits = $tmpresults[ $i - 1 ]->size(); + $total_hits += $hits; my $last_record = $hits; if ( defined $max_results && $offset + $max_results < $hits ) { $last_record = $offset + $max_results; @@ -279,7 +280,7 @@ sub SimpleSearch { } } - return ( undef, \@results ); + return ( undef, \@results, $total_hits ); } } @@ -329,13 +330,7 @@ sub getRecords { # perform the search, create the results objects # if this is a local search, use the $koha-query, if it's a federated one, use the federated-query - my $query_to_use; - if ( $servers[$i] =~ /biblioserver/ ) { - $query_to_use = $koha_query; - } - else { - $query_to_use = $simple_query; - } + my $query_to_use = ($servers[$i] =~ /biblioserver/) ? $koha_query : $simple_query; #$query_to_use = $simple_query if $scan; warn $simple_query if ( $scan and $DEBUG ); @@ -466,26 +461,16 @@ sub getRecords { my $tmpauthor; # the minimal record in author/title (depending on MARC flavour) - if ( C4::Context->preference("marcflavour") eq - "UNIMARC" ) - { - $tmptitle = MARC::Field->new( - '200', ' ', ' ', - a => $term, - f => $occ - ); + if (C4::Context->preference("marcflavour") eq "UNIMARC") { + $tmptitle = MARC::Field->new('200',' ',' ', a => $term, f => $occ); $tmprecord->append_fields($tmptitle); - } - else { - $tmptitle = - MARC::Field->new( '245', ' ', ' ', a => $term, ); - $tmpauthor = - MARC::Field->new( '100', ' ', ' ', a => $occ, ); + } else { + $tmptitle = MARC::Field->new('245',' ',' ', a => $term,); + $tmpauthor = MARC::Field->new('100',' ',' ', a => $occ,); $tmprecord->append_fields($tmptitle); $tmprecord->append_fields($tmpauthor); } - $results_hash->{'RECORDS'}[$j] = - $tmprecord->as_usmarc(); + $results_hash->{'RECORDS'}[$j] = $tmprecord->as_usmarc(); } # not an index scan @@ -950,27 +935,28 @@ sub buildQuery { if ( $index eq 'yr' ) { $index .= ",st-numeric"; $indexes_set++; - ( - $stemming, $auto_truncation, - $weight_fields, $fuzzy_enabled, - $remove_stopwords - ) = ( 0, 0, 0, 0, 0 ); + $stemming = $auto_truncation = $weight_fields = $fuzzy_enabled = $remove_stopwords = 0; } # Date of Acquisition elsif ( $index eq 'acqdate' ) { $index .= ",st-date-normalized"; $indexes_set++; - ( + $stemming = $auto_truncation = $weight_fields = $fuzzy_enabled = $remove_stopwords = 0; + } + # ISBN,ISSN,Standard Number, don't need special treatment + elsif ( $index eq 'nb' || $index eq 'ns' ) { + $indexes_set++; + ( $stemming, $auto_truncation, $weight_fields, $fuzzy_enabled, $remove_stopwords ) = ( 0, 0, 0, 0, 0 ); - } + } # Set default structure attribute (word list) my $struct_attr; - unless ( !$index || $index =~ /(st-|phr|ext|wrdl)/ ) { + unless ( $indexes_set || !$index || $index =~ /(st-|phr|ext|wrdl)/ ) { $struct_attr = ",wrdl"; } @@ -1220,12 +1206,9 @@ sub searchResults { ); $bsth->execute(); while ( my $bdata = $bsth->fetchrow_hashref ) { - $itemtypes{ $bdata->{'itemtype'} }->{description} = - $bdata->{'description'}; - $itemtypes{ $bdata->{'itemtype'} }->{imageurl} = $bdata->{'imageurl'}; - $itemtypes{ $bdata->{'itemtype'} }->{summary} = $bdata->{'summary'}; - $itemtypes{ $bdata->{'itemtype'} }->{notforloan} = - $bdata->{'notforloan'}; + foreach (qw(description imageurl summary notforloan)) { + $itemtypes{ $bdata->{'itemtype'} }->{$_} = $bdata->{$_}; + } } #search item field code @@ -1252,13 +1235,12 @@ sub searchResults { $times = $offset + $results_per_page; } else { - $times = $hits; + $times = $hits; # FIXME: if $hits is undefined, why do we want to equal it? } # loop through all of the records we've retrieved for ( my $i = $offset ; $i <= $times - 1 ; $i++ ) { - my $marcrecord; - $marcrecord = MARC::File::USMARC::decode( $marcresults[$i] ); + my $marcrecord = MARC::File::USMARC::decode( $marcresults[$i] ); my $oldbiblio = TransformMarcToKoha( $dbh, $marcrecord, '' ); $oldbiblio->{result_number} = $i + 1; @@ -1266,20 +1248,18 @@ sub searchResults { if ( $itemtypes{ $oldbiblio->{itemtype} }->{imageurl} =~ /^http:/ ) { $oldbiblio->{imageurl} = $itemtypes{ $oldbiblio->{itemtype} }->{imageurl}; - $oldbiblio->{description} = - $itemtypes{ $oldbiblio->{itemtype} }->{description}; - } - else { + } else { $oldbiblio->{imageurl} = getitemtypeimagesrc() . "/" . $itemtypes{ $oldbiblio->{itemtype} }->{imageurl} if ( $itemtypes{ $oldbiblio->{itemtype} }->{imageurl} ); - $oldbiblio->{description} = - $itemtypes{ $oldbiblio->{itemtype} }->{description}; } - my $aisbn=$oldbiblio->{'isbn'}; + my $biblio_authorised_value_images = C4::Items::get_authorised_value_images( C4::Biblio::get_biblio_authorised_values( $oldbiblio->{biblionumber} ) ); + $oldbiblio->{authorised_value_images} = $biblio_authorised_value_images; + my $aisbn = $oldbiblio->{'isbn'}; $aisbn =~ /(\d*[X]*)/; - $oldbiblio->{'amazonisbn'} = $1; + $oldbiblio->{amazonisbn} = $1; + $oldbiblio->{description} = $itemtypes{ $oldbiblio->{itemtype} }->{description}; # Build summary if there is one (the summary is defined in the itemtypes table) # FIXME: is this used anywhere, I think it can be commented out? -- JF if ( $itemtypes{ $oldbiblio->{itemtype} }->{summary} ) { @@ -1307,7 +1287,10 @@ s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g; $oldbiblio->{summary} = $summary; } -# Add search-term highlighting to the whole record where they match using s + # save an author with no tag, for the > link + $oldbiblio->{'author_nospan'} = $oldbiblio->{'author'}; + $oldbiblio->{'title_nospan'} = $oldbiblio->{'title'}; + # Add search-term highlighting to the whole record where they match using s if (C4::Context->preference("OpacHighlightedWords")){ my $searchhighlightblob; for my $highlight_field ( $marcrecord->fields ) { @@ -1331,30 +1314,15 @@ s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g; $searchhighlightblob = ' ... '.$searchhighlightblob if $searchhighlightblob; $oldbiblio->{'searchhighlightblob'} = $searchhighlightblob; } -# save an author with no tag, for the > link - $oldbiblio->{'author_nospan'} = $oldbiblio->{'author'}; # Add search-term highlighting to the title, subtitle, etc. fields for my $term ( keys %$span_terms_hashref ) { my $old_term = $term; if ( length($term) > 3 ) { $term =~ s/(.*=|\)|\(|\+|\.|\?|\[|\]|\\|\*)//g; - $oldbiblio->{'title'} =~ - s/$term/$&<\/span>/gi; - $oldbiblio->{'subtitle'} =~ - s/$term/$&<\/span>/gi; - $oldbiblio->{'author'} =~ - s/$term/$&<\/span>/gi; - $oldbiblio->{'publishercode'} =~ - s/$term/$&<\/span>/gi; - $oldbiblio->{'place'} =~ - s/$term/$&<\/span>/gi; - $oldbiblio->{'pages'} =~ - s/$term/$&<\/span>/gi; - $oldbiblio->{'notes'} =~ - s/$term/$&<\/span>/gi; - $oldbiblio->{'size'} =~ - s/$term/$&<\/span>/gi; + foreach(qw(title subtitle author publishercode place pages notes size)) { + $oldbiblio->{$_} =~ s/$term/$&<\/span>/gi; + } } } @@ -1490,7 +1458,7 @@ s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g; # XSLT processing of some stuff if (C4::Context->preference("XSLTResultsDisplay") ) { - my $newxmlrecord = XSLTParse4Display($oldbiblio->{biblionumber},'Results'); + my $newxmlrecord = XSLTParse4Display($oldbiblio->{biblionumber},C4::Context->config('opachtdocs')."/prog/en/xslt/MARC21slim2OPACResults.xsl"); $oldbiblio->{XSLTResultsRecord} = $newxmlrecord; } @@ -1515,6 +1483,7 @@ s/\[(.?.?.?.?)$tagsubf(.*?)]/$1$subfieldvalue$2\[$1$tagsubf$2]/g; $oldbiblio->{orderedcount} = $ordered_count; $oldbiblio->{isbn} =~ s/-//g; # deleting - in isbn to enable amazon content + $oldbiblio->{'authorised_value_images'} = C4::Items::get_authorised_value_images( C4::Biblio::get_biblio_authorised_values( $oldbiblio->{'biblionumber'} ) ); push( @newresults, $oldbiblio ); } return @newresults;