Bugzilla – Attachment 124398 Details for
Bug 11175
Show the parent record's component parts in the detailed views
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 11175: (QA follow-up) Move get_component_part_query
Bug-11175-QA-follow-up-Move-getcomponentpartquery.patch (text/plain), 12.32 KB, created by
Martin Renvoize (ashimema)
on 2021-09-01 15:19:47 UTC
(
hide
)
Description:
Bug 11175: (QA follow-up) Move get_component_part_query
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2021-09-01 15:19:47 UTC
Size:
12.32 KB
patch
obsolete
>From ac03d30bbed8a08b9b5ce9ded3911c5837df1c70 Mon Sep 17 00:00:00 2001 >From: Martin Renvoize <martin.renvoize@ptfs-europe.com> >Date: Fri, 6 Aug 2021 12:44:23 +0100 >Subject: [PATCH] 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> >--- > C4/XSLT.pm | 5 +-- > Koha/Biblio.pm | 54 +++++++++++++++++++++++--- > Koha/Util/Search.pm | 73 ------------------------------------ > t/Koha/Util/Search.t | 54 -------------------------- > t/db_dependent/Koha/Biblio.t | 42 +++++++++++++++++---- > 5 files changed, 84 insertions(+), 144 deletions(-) > delete mode 100644 Koha/Util/Search.pm > delete mode 100755 t/Koha/Util/Search.t > >diff --git a/C4/XSLT.pm b/C4/XSLT.pm >index 178743d204..f53093d868 100644 >--- a/C4/XSLT.pm >+++ b/C4/XSLT.pm >@@ -29,7 +29,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; > >@@ -287,7 +286,7 @@ sub XSLTParse4Display { > # possibly insert component records into Detail views > if ($xslsyspref =~ m/Details/) { > my $biblio = Koha::Biblios->find( $biblionumber ); >- my $components = $biblio->get_marc_components(300); >+ my $components = $biblio->get_marc_analytics(300); > $variables->{show_analytics_link} = ( scalar @{$components} == 0 ) ? 0 : 1; > > my $showcomp = C4::Context->preference('ShowComponentRecords'); >@@ -301,7 +300,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>'); >diff --git a/Koha/Biblio.pm b/Koha/Biblio.pm >index b76ca842f8..b84f8e21ce 100644 >--- a/Koha/Biblio.pm >+++ b/Koha/Biblio.pm >@@ -43,7 +43,6 @@ use Koha::Suggestions; > use Koha::Subscriptions; > use Koha::SearchEngine; > use Koha::SearchEngine::Search; >-use Koha::Util::Search; > > =head1 NAME > >@@ -498,21 +497,21 @@ sub suggestions { > return Koha::Suggestions->_new_from_dbic( $suggestions_rs ); > } > >-=head3 get_marc_components >+=head3 get_marc_analytics > >- my $components = $self->get_marc_components(); >+ my $analytics = $self->get_marc_analytics(); > >-Returns an array of MARCXML data, which are component parts of >+Returns an array of MARCXML data, which are analytic parts of > this object (MARC21 773$w points to this) > > =cut > >-sub get_marc_components { >+sub get_marc_analytics { > my ($self, $max_results) = @_; > > return [] if (C4::Context->preference('marcflavour') ne 'MARC21'); > >- my $searchstr = Koha::Util::Search::get_component_part_query($self->id); >+ my $searchstr = $self->get_analytics_query; > > if (defined($searchstr)) { > my $searcher = Koha::SearchEngine::Search->new({index => $Koha::SearchEngine::BIBLIOS_INDEX}); >@@ -523,6 +522,49 @@ sub get_marc_components { > return $self->{_components} || []; > } > >+=head2 get_analytics_query >+ >+Returns a query which can be used to search for all component parts of MARC21 biblios >+ >+=cut >+ >+sub get_analytics_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 >diff --git a/Koha/Util/Search.pm b/Koha/Util/Search.pm >deleted file mode 100644 >index 99ff38e77f..0000000000 >--- a/Koha/Util/Search.pm >+++ /dev/null >@@ -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; >diff --git a/t/Koha/Util/Search.t b/t/Koha/Util/Search.t >deleted file mode 100755 >index 30008db150..0000000000 >--- a/t/Koha/Util/Search.t >+++ /dev/null >@@ -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"); >-}; >diff --git a/t/db_dependent/Koha/Biblio.t b/t/db_dependent/Koha/Biblio.t >index d974ef8491..e9c234af76 100755 >--- a/t/db_dependent/Koha/Biblio.t >+++ b/t/db_dependent/Koha/Biblio.t >@@ -17,9 +17,9 @@ > > use Modern::Perl; > >-use Test::More tests => 15; >+use Test::More tests => 16; > >-use C4::Biblio qw( AddBiblio ModBiblio ); >+use C4::Biblio qw( AddBiblio ModBiblio ModBiblioMarc ); > use Koha::Database; > use Koha::Acquisition::Orders; > >@@ -503,7 +503,7 @@ subtest 'suggestions() tests' => sub { > $schema->storage->txn_rollback; > }; > >-subtest 'get_marc_components() tests' => sub { >+subtest 'get_marc_analytics() tests' => sub { > > plan tests => 3; > >@@ -515,13 +515,13 @@ subtest 'get_marc_components() tests' => sub { > my $search_mod = Test::MockModule->new( 'Koha::SearchEngine::Zebra::Search' ); > $search_mod->mock( 'simple_search_compat', \&search_component_record2 ); > >- my @components = $host_biblio->get_marc_components; >+ my @components = $host_biblio->get_marc_analytics; > is( ref(\@components), 'ARRAY', 'Return type is correct' ); > > is_deeply( > [@components], >- [()], >- '->get_marc_components returns an empty ARRAY' >+ [[]], >+ '->get_marc_analytics returns an empty ARRAY' > ); > > $search_mod->unmock( 'simple_search_compat'); >@@ -529,15 +529,41 @@ subtest 'get_marc_components() tests' => sub { > my $component_record = component_record1()->as_xml(); > > is_deeply( >- $host_biblio->get_marc_components, >+ $host_biblio->get_marc_analytics, > [($component_record)], >- '->get_marc_components returns the related component part record' >+ '->get_marc_analytics returns the related component part record' > ); > $search_mod->unmock( 'simple_search_compat'); > > $schema->storage->txn_rollback; > }; > >+subtest 'get_analytics_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_analytics_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_analytics_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_analytics_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; >-- >2.20.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 11175
:
22612
|
22649
|
23049
|
24788
|
24789
|
24790
|
24791
|
26402
|
26403
|
26404
|
26405
|
26766
|
26767
|
78022
|
78023
|
78024
|
79687
|
79803
|
79809
|
79810
|
105631
|
105641
|
105703
|
105706
|
105707
|
106692
|
112838
|
112839
|
112840
|
112841
|
112846
|
112847
|
112851
|
112852
|
112853
|
112854
|
112855
|
112856
|
112857
|
113649
|
113650
|
113962
|
113964
|
114326
|
114327
|
114328
|
114329
|
114330
|
114331
|
114332
|
114333
|
114334
|
116819
|
116820
|
116821
|
116822
|
116823
|
116824
|
116825
|
116826
|
116827
|
116828
|
119499
|
119506
|
120206
|
122707
|
122708
|
122709
|
122710
|
122711
|
122712
|
122713
|
122714
|
122715
|
122716
|
122717
|
122718
|
123081
|
123082
|
123083
|
123084
|
123085
|
123086
|
123087
|
123088
|
123089
|
123090
|
123091
|
123092
|
123093
|
123406
|
123410
|
123508
|
123509
|
123510
|
123511
|
123512
|
123513
|
123514
|
123515
|
123516
|
123517
|
123518
|
123519
|
123520
|
123521
|
123522
|
123523
|
123524
|
123541
|
123542
|
123543
|
123544
|
123545
|
123546
|
123547
|
123548
|
123549
|
123550
|
123551
|
123552
|
123553
|
123554
|
123555
|
123556
|
123557
|
123562
|
123564
|
123569
|
123570
|
123571
|
123572
|
123573
|
123574
|
123582
|
123583
|
123608
|
123609
|
123611
|
123612
|
123613
|
123614
|
123617
|
123618
|
123619
|
123620
|
123621
|
123622
|
123623
|
123624
|
123625
|
123626
|
123627
|
123628
|
123629
|
123630
|
123631
|
123632
|
123633
|
123634
|
123635
|
123636
|
123637
|
123638
|
123736
|
123737
|
123738
|
123739
|
123740
|
123741
|
123742
|
123743
|
123744
|
123745
|
123746
|
123747
|
123748
|
123749
|
123750
|
123751
|
123752
|
123753
|
123754
|
123755
|
123756
|
124134
|
124135
|
124136
|
124137
|
124138
|
124139
|
124140
|
124141
|
124142
|
124143
|
124144
|
124145
|
124146
|
124147
|
124148
|
124149
|
124150
|
124151
|
124152
|
124153
|
124154
|
124155
|
124382
|
124383
|
124384
|
124385
|
124386
|
124387
|
124388
|
124389
|
124390
|
124391
|
124392
|
124393
|
124394
|
124395
|
124396
|
124397
|
124398
|
124399
|
124400
|
124401
|
124402
|
124403
|
124404
|
124534
|
124535
|
124536
|
124537
|
124538
|
124539
|
124540
|
124541
|
124542
|
124544
|
124545
|
124546
|
124547
|
124548
|
124549
|
124550
|
124551
|
124552
|
124553
|
124554
|
124555
|
124556
|
124557
|
126057
|
126058
|
126059
|
126060
|
126061
|
126062
|
126063
|
126064
|
126065
|
126066
|
126067
|
126068
|
126069
|
126070
|
126071
|
126072
|
126073
|
126074
|
126075
|
126076
|
126077
|
126078
|
126079
|
126080
|
126081
|
126084
|
126441
|
126442
|
126443
|
126687
|
126688
|
126689
|
126690
|
126692
|
126693
|
126694
|
126695
|
126696
|
126697
|
126698
|
126699
|
126700
|
126701
|
126702
|
126703
|
126704
|
126705
|
126706
|
126707
|
126708
|
126709
|
126710
|
126711
|
126712
|
126713
|
126714
|
126715
|
126716
|
126717
|
126718
|
126719
|
126720
|
126721
|
126722
|
126723
|
126724
|
126725
|
126726
|
126727
|
126728
|
126729
|
126730
|
126731
|
126732
|
126733
|
126734
|
126735
|
126736
|
126737
|
126738
|
126739
|
126740
|
126741
|
126742
|
126743
|
126744
|
126745
|
126816
|
126817
|
126869
|
126870
|
126871
|
126872
|
126873
|
126874
|
126875
|
126876
|
126877
|
126878
|
126879
|
126880
|
126881
|
126882
|
126883
|
126884
|
126885
|
126886
|
126887
|
126888
|
126889
|
126890
|
126891
|
126892
|
126893
|
126894
|
126895
|
126897
|
126898
|
126904
|
126911
|
126912
|
126913