Bug 29437: Search reservoir for term as title, author, or variations of ISBN

The code in the script and the module attempt to determine whether a term is an isbn, or not. Rather
than try to do this, we can simply search it on the three fields: isbn, title, author

Additionally, we should search as any of the ISBN variations to broaden our matches

Note: Curently only an ISBN 10 is stored in import biblios, so for an ISBN13 that doesn't convert
the value will be blank - this is another bug

To test:
1 - Perform a cataloging search for a valid ISBN 13 with no ISBN10 counterpart:
    9798200834976
2 - 500 error
3 - Apply patch
4 - Repeat, no results
5 - Import some records
6 - Search by title/author/isbn
7 - Confirm searching works as expected

WNC amended to fix spelling

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
AMENDED: Useless call of ISBNs (plural) when you only pass one parameter.

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
(cherry picked from commit b422b7af23)
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
This commit is contained in:
Nick Clemens 2021-11-08 19:24:36 +00:00 committed by Victor Grousset/tuxayo
parent ac4c5b3eaa
commit eb2f2aa604
2 changed files with 10 additions and 27 deletions

View File

@ -57,9 +57,8 @@ cataloguing reservoir features.
=head2 BreedingSearch
($count, @results) = &BreedingSearch($title,$isbn);
C<$title> contains the title,
C<$isbn> contains isbn or issn,
($count, @results) = &BreedingSearch($term);
C<$term> contains the term to search, it will be searched as title,author, or isbn
C<$count> is the number of items in C<@results>. C<@results> is an
array of references-to-hash; the keys are the items from the C<import_records> and
@ -68,34 +67,25 @@ C<import_biblios> tables of the Koha database.
=cut
sub BreedingSearch {
my ($search,$isbn) = @_;
my ($term) = @_;
my $dbh = C4::Context->dbh;
my $count = 0;
my ($query,@bind);
my $sth;
my @results;
my $authortitle = $term;
$authortitle =~ s/(\s+)/\%/g; #Replace spaces with wildcard
$authortitle = "%" . $authortitle . "%"; #Add wildcard to start and end of string
# normalise ISBN like at import
$isbn = C4::Koha::GetNormalizedISBN($isbn);
my @isbns = C4::Koha::GetVariationsOfISBN($term);
$query = "SELECT import_record_id, file_name, isbn, title, author
FROM import_biblios
JOIN import_records USING (import_record_id)
JOIN import_batches USING (import_batch_id)
WHERE ";
@bind=();
if (defined($search) && length($search)>0) {
$search =~ s/(\s+)/\%/g;
$query .= "title like ? OR author like ?";
push(@bind,"%$search%", "%$search%");
}
if ($#bind!=-1 && defined($isbn) && length($isbn)>0) {
$query .= " and ";
}
if (defined($isbn) && length($isbn)>0) {
$query .= "isbn like ?";
push(@bind,"$isbn%");
}
WHERE title LIKE ? OR author LIKE ? OR isbn IN (" . join(',',('?') x @isbns) . ")";
@bind=( $authortitle, $authortitle, @isbns );
$sth = $dbh->prepare($query);
$sth->execute(@bind);
while (my $data = $sth->fetchrow_hashref) {

View File

@ -109,14 +109,7 @@ if ($query) {
my $countbr = 0;
my @resultsbr;
if ($query) {
my ( $title, $isbn );
my $isbn_valid = Business::ISBN->new($query);
if ( $isbn_valid && $isbn_valid->is_valid() ) {
$isbn = $query;
} else {
$title = $query;
}
( $countbr, @resultsbr ) = BreedingSearch( $title, $isbn );
( $countbr, @resultsbr ) = BreedingSearch( $query );
}
my $breeding_loop = [];
for my $resultsbr (@resultsbr) {