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:
parent
ac4c5b3eaa
commit
eb2f2aa604
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue