Bug 11175: (QA follow-up) Move get_component_part_query
This patch removes Koha::Util::Search in preference to embedding the search query builder in Koha::Biblio as get_analytics_query. Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Andrew Nugged <nugged@gmail.com> Bug 11175: (QA follow-up) Rename back to get_marc_components Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Andrew Nugged <nugged@gmail.com> Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
37c7b9358d
commit
0b56eadaf4
6 changed files with 74 additions and 135 deletions
|
@ -28,7 +28,6 @@ use C4::Koha qw( xml_escape );
|
|||
use C4::Biblio qw( GetAuthorisedValueDesc GetFrameworkCode GetMarcStructure );
|
||||
use Koha::AuthorisedValues;
|
||||
use Koha::ItemTypes;
|
||||
use Koha::Util::Search;
|
||||
use Koha::XSLT::Base;
|
||||
use Koha::Libraries;
|
||||
|
||||
|
@ -299,7 +298,7 @@ sub XSLTParse4Display {
|
|||
|
||||
$variables->{show_analytics_link} = 0;
|
||||
|
||||
my $search_query = Koha::Util::Search::get_component_part_query($biblionumber);
|
||||
my $search_query = $biblio->get_analytics_query;
|
||||
$variables->{ComponentPartQuery} = $search_query;
|
||||
|
||||
my @componentPartRecordXML = ('<componentPartRecords>');
|
||||
|
|
|
@ -43,7 +43,6 @@ use Koha::Suggestions;
|
|||
use Koha::Subscriptions;
|
||||
use Koha::SearchEngine;
|
||||
use Koha::SearchEngine::Search;
|
||||
use Koha::Util::Search;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
|
@ -493,7 +492,7 @@ sub get_marc_components {
|
|||
|
||||
return [] if (C4::Context->preference('marcflavour') ne 'MARC21');
|
||||
|
||||
my $searchstr = Koha::Util::Search::get_component_part_query($self->id);
|
||||
my $searchstr = $self->get_components_query;
|
||||
|
||||
if (defined($searchstr)) {
|
||||
my $searcher = Koha::SearchEngine::Search->new({index => $Koha::SearchEngine::BIBLIOS_INDEX});
|
||||
|
@ -504,6 +503,49 @@ sub get_marc_components {
|
|||
return $self->{_components} || [];
|
||||
}
|
||||
|
||||
=head2 get_components_query
|
||||
|
||||
Returns a query which can be used to search for all component parts of MARC21 biblios
|
||||
|
||||
=cut
|
||||
|
||||
sub get_components_query {
|
||||
my ($self) = @_;
|
||||
|
||||
my $marc = $self->metadata->record;
|
||||
|
||||
my $searchstr;
|
||||
if ( C4::Context->preference('UseControlNumber') ) {
|
||||
my $pf001 = $marc->field('001') || undef;
|
||||
|
||||
if ( defined($pf001) ) {
|
||||
my $pf003 = $marc->field('003') || undef;
|
||||
|
||||
if ( !defined($pf003) ) {
|
||||
# search for 773$w='Host001'
|
||||
$searchstr = "rcn:" . $pf001->data();
|
||||
}
|
||||
else {
|
||||
$searchstr = "(";
|
||||
# search for (773$w='Host001' and 003='Host003') or 773$w='Host003 Host001')
|
||||
$searchstr .= "(rcn:" . $pf001->data() . " AND cni:" . $pf003->data() . ")";
|
||||
$searchstr .= " OR rcn:" . $pf003->data() . " " . $pf001->data();
|
||||
$searchstr .= ")";
|
||||
}
|
||||
|
||||
# limit to monograph and serial component part records
|
||||
$searchstr .= " AND (bib-level:a OR bib-level:b)";
|
||||
}
|
||||
}
|
||||
else {
|
||||
my $cleaned_title = $marc->title;
|
||||
$cleaned_title =~ tr|/||;
|
||||
$searchstr = "Host-item:($cleaned_title)";
|
||||
}
|
||||
|
||||
return $searchstr;
|
||||
}
|
||||
|
||||
=head3 subscriptions
|
||||
|
||||
my $subscriptions = $self->subscriptions
|
||||
|
|
|
@ -1,73 +0,0 @@
|
|||
package Koha::Util::Search;
|
||||
|
||||
# Copyright 2020 University of Helsinki
|
||||
#
|
||||
# This file is part of Koha.
|
||||
#
|
||||
# Koha is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Koha is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Koha; if not, see <http://www.gnu.org/licenses>.
|
||||
|
||||
use Modern::Perl;
|
||||
|
||||
use C4::Biblio qw( GetMarcBiblio );
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Koha::Util::Search - functions to build complex search queries
|
||||
|
||||
=head1 FUNCTIONS
|
||||
|
||||
=head2 get_component_part_query
|
||||
|
||||
Returns a query which can be used to search for all component parts of MARC21 biblios
|
||||
|
||||
=cut
|
||||
|
||||
sub get_component_part_query {
|
||||
my ($biblionumber) = @_;
|
||||
|
||||
my $marc = GetMarcBiblio( { biblionumber => $biblionumber } );
|
||||
|
||||
my $searchstr;
|
||||
if ( C4::Context->preference('UseControlNumber') ) {
|
||||
my $pf001 = $marc->field('001') || undef;
|
||||
|
||||
if ( defined($pf001) ) {
|
||||
my $pf003 = $marc->field('003') || undef;
|
||||
|
||||
if ( !defined($pf003) ) {
|
||||
# search for 773$w='Host001'
|
||||
$searchstr = "rcn:" . $pf001->data();
|
||||
}
|
||||
else {
|
||||
$searchstr = "(";
|
||||
# search for (773$w='Host001' and 003='Host003') or 773$w='Host003 Host001')
|
||||
$searchstr .= "(rcn:" . $pf001->data() . " AND cni:" . $pf003->data() . ")";
|
||||
$searchstr .= " OR rcn:" . $pf003->data() . " " . $pf001->data();
|
||||
$searchstr .= ")";
|
||||
}
|
||||
|
||||
# limit to monograph and serial component part records
|
||||
$searchstr .= " AND (bib-level:a OR bib-level:b)";
|
||||
}
|
||||
}
|
||||
else {
|
||||
my $cleaned_title = $marc->title;
|
||||
$cleaned_title =~ tr|/||;
|
||||
$searchstr = "Host-item:($cleaned_title)";
|
||||
}
|
||||
|
||||
return $searchstr;
|
||||
}
|
||||
|
||||
1;
|
|
@ -211,7 +211,6 @@ foreach my $subscription (@subscriptions) {
|
|||
push @subs, \%cell;
|
||||
}
|
||||
|
||||
|
||||
# Get acquisition details
|
||||
if ( C4::Context->preference('AcquisitionDetails') ) {
|
||||
my $orders = Koha::Acquisition::Orders->search(
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# Copyright 2020 University of Helsinki
|
||||
#
|
||||
# This file is part of Koha.
|
||||
#
|
||||
# Koha is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Koha is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Koha; if not, see <http://www.gnu.org/licenses>.
|
||||
|
||||
use Modern::Perl;
|
||||
|
||||
use Test::More tests => 1;
|
||||
|
||||
use t::lib::Mocks;
|
||||
use t::lib::TestBuilder;
|
||||
|
||||
use C4::Biblio qw( GetMarcBiblio ModBiblioMarc );
|
||||
use Koha::Util::Search;
|
||||
use MARC::Field;
|
||||
|
||||
my $builder = t::lib::TestBuilder->new;
|
||||
|
||||
subtest 'get_component_part_query' => sub {
|
||||
plan tests => 3;
|
||||
|
||||
my $biblio = $builder->build_sample_biblio();
|
||||
my $biblionumber = $biblio->biblionumber;
|
||||
my $record = GetMarcBiblio({ biblionumber => $biblionumber });
|
||||
|
||||
t::lib::Mocks::mock_preference( 'UseControlNumber', '0' );
|
||||
is(Koha::Util::Search::get_component_part_query($biblionumber), "Host-item:(Some boring read)", "UseControlNumber disabled");
|
||||
|
||||
t::lib::Mocks::mock_preference( 'UseControlNumber', '1' );
|
||||
my $marc_001_field = MARC::Field->new('001', $biblionumber);
|
||||
$record->append_fields($marc_001_field);
|
||||
ModBiblioMarc($record, $biblionumber);
|
||||
|
||||
is(Koha::Util::Search::get_component_part_query($biblionumber), "rcn:$biblionumber AND (bib-level:a OR bib-level:b)", "UseControlNumber enabled without MarcOrgCode");
|
||||
|
||||
my $marc_003_field = MARC::Field->new('003', 'OSt');
|
||||
$record->append_fields($marc_003_field);
|
||||
ModBiblioMarc($record, $biblionumber);
|
||||
is(Koha::Util::Search::get_component_part_query($biblionumber), "((rcn:$biblionumber AND cni:OSt) OR rcn:OSt $biblionumber) AND (bib-level:a OR bib-level:b)", "UseControlNumber enabled with MarcOrgCode");
|
||||
};
|
|
@ -17,9 +17,9 @@
|
|||
|
||||
use Modern::Perl;
|
||||
|
||||
use Test::More tests => 17;
|
||||
use Test::More tests => 18;
|
||||
|
||||
use C4::Biblio qw( AddBiblio ModBiblio );
|
||||
use C4::Biblio qw( AddBiblio ModBiblio ModBiblioMarc );
|
||||
use Koha::Database;
|
||||
use Koha::Caches;
|
||||
use Koha::Acquisition::Orders;
|
||||
|
@ -524,7 +524,7 @@ subtest 'get_marc_components() tests' => sub {
|
|||
|
||||
is_deeply(
|
||||
[@components],
|
||||
[()],
|
||||
[[]],
|
||||
'->get_marc_components returns an empty ARRAY'
|
||||
);
|
||||
|
||||
|
@ -542,6 +542,32 @@ subtest 'get_marc_components() tests' => sub {
|
|||
$schema->storage->txn_rollback;
|
||||
};
|
||||
|
||||
subtest 'get_components_query' => sub {
|
||||
plan tests => 3;
|
||||
|
||||
my $biblio = $builder->build_sample_biblio();
|
||||
my $biblionumber = $biblio->biblionumber;
|
||||
my $record = $biblio->metadata->record;
|
||||
|
||||
t::lib::Mocks::mock_preference( 'UseControlNumber', '0' );
|
||||
is($biblio->get_components_query, "Host-item:(Some boring read)", "UseControlNumber disabled");
|
||||
|
||||
t::lib::Mocks::mock_preference( 'UseControlNumber', '1' );
|
||||
my $marc_001_field = MARC::Field->new('001', $biblionumber);
|
||||
$record->append_fields($marc_001_field);
|
||||
C4::Biblio::ModBiblio( $record, $biblio->biblionumber );
|
||||
$biblio = Koha::Biblios->find( $biblio->biblionumber);
|
||||
|
||||
is($biblio->get_components_query, "rcn:$biblionumber AND (bib-level:a OR bib-level:b)", "UseControlNumber enabled without MarcOrgCode");
|
||||
|
||||
my $marc_003_field = MARC::Field->new('003', 'OSt');
|
||||
$record->append_fields($marc_003_field);
|
||||
C4::Biblio::ModBiblio( $record, $biblio->biblionumber );
|
||||
$biblio = Koha::Biblios->find( $biblio->biblionumber);
|
||||
|
||||
is($biblio->get_components_query, "((rcn:$biblionumber AND cni:OSt) OR rcn:OSt $biblionumber) AND (bib-level:a OR bib-level:b)", "UseControlNumber enabled with MarcOrgCode");
|
||||
};
|
||||
|
||||
subtest 'orders() and active_orders() tests' => sub {
|
||||
|
||||
plan tests => 5;
|
||||
|
|
Loading…
Reference in a new issue