http://bugs.koha.org/cgi-bin/bugzilla3/show_bug.cgi?id=3191 Summary: Bug in NonZebra search functions SimpleSearch() and NZOrder() Product: Koha Version: rel_3_0 Platform: PC OS/Version: All Status: NEW Severity: normal Priority: P5 Component: Searching AssignedTo: jmf@liblime.com ReportedBy: abcendzone@yahoo.com Estimated Hours: 0.0 Bug 1) The NonZebra SimpleSearch() function in C4::Search.pm has the following two inputs: - $offset: is the offset when displaying e.g. page 2 of the search results - $max_results: is the maximal number of results per page Bug: These two input parameters are NOT passed on to the NZorder() funtion on line 223 when using nonzebra search: Instead of: my $result = NZorder( NZanalyse($query) )->{'biblioserver'}; this line should pass $offset and $max_results like this: my $result = NZorder( NZanalyse($query),,$max_results,$offset )->{'biblioserver'}; Bug 2) The NonZebra NZOrder() function is supposed to order the search results and return ($results_per_page) entries starting from ($offset). The code that is supposed to do this (starting at around line 2059 in Search.pm) looks like this: # for ( # my $counter = $offset ; # $counter <= $offset + $results_per_page ; # $counter++ # ) # { # $result_hash->{'RECORDS'}[$counter] = # GetMarcBiblio( $result_hash->{'RECORDS'}[$counter] )->as_usmarc; # #if $result_hash->{'RECORDS'}[$counter]; # } # my $finalresult = (); # $result_hash->{'hits'} = $numbers; # $finalresult->{'biblioserver'} = $result_hash; # return $finalresult; But this code actually returns an array of size ($numbers), which is the TOTAL number of search results and within this array, it ONLY populates the entries from ($offset) up to ($offset + $results_per_page). So, 1. the array is way too big, 2. t has mostly empty elements 3. it returns one results too much, because from ($offset) up to ($offset+ $results_per_page) are a total of ($results_per_page+1) elements What is SHOULD do is return an array of size ($results_per_page), containing exactly ($results_per_page) search results from ($offset) up to ($offset + $results_per_page - 1). The correct code would be something like this: my $finalresult = (); #create output array $finalresult->{'biblioserver'}->{'hits'} = $numbers; #save total number of search results $numbers=0; #reset counter for ( my $counter = $offset ; $counter < $offset + $results_per_page ; #changed <= to < to return correct number of elements $counter++ ) { $finalresult->{'biblioserver'}->{'RECORDS'}[$numbers++] = GetMarcBiblio( $result_hash->{'RECORDS'}[$counter] )->as_usmarc; #populate the array from 0 to ($results_per_page-1) with the search results from ($offset) to ($offset+$results_per_page-1) } return $finalresult; The buggy code is used TWICE in NZOrder() in Search.pm, so it has to be replaced starting from line 2059 and starting from line 2113. Best regards... -- Configure bugmail: http://bugs.koha.org/cgi-bin/bugzilla3/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.