Bugzilla – Attachment 126072 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) Take account of bug 15851
Bug-11175-QA-follow-up-Take-account-of-bug-15851.patch (text/plain), 11.13 KB, created by
Martin Renvoize (ashimema)
on 2021-10-12 09:35:18 UTC
(
hide
)
Description:
Bug 11175: (QA follow-up) Take account of bug 15851
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2021-10-12 09:35:18 UTC
Size:
11.13 KB
patch
obsolete
>From 14ac558e22eed7aeebb1d2f3e1d4743d448cec55 Mon Sep 17 00:00:00 2001 >From: Martin Renvoize <martin.renvoize@ptfs-europe.com> >Date: Tue, 3 Aug 2021 14:29:27 +0100 >Subject: [PATCH] Bug 11175: (QA follow-up) Take account of bug 15851 > >We can simplify the code introduced by bug 15851 by moving the >'show_analytics_link' variable assignment into C4::XSLT and thus making >the code more DRY. > >Taking the code in bug 15851 as inspiration this patch also adds proper >handling for UseControlNumber vs EasyAnalytics style 773 linking and >ensures we only return analytic component parts and no other records >containing 773's. > >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> >Signed-off-by: Andrew Nugged <nugged@gmail.com> >--- > C4/XSLT.pm | 54 ++++++++++++++++++++++++-------------------- > Koha/Biblio.pm | 4 ++-- > Koha/Util/Search.pm | 42 +++++++++++++++++++++++----------- > catalogue/detail.pl | 24 -------------------- > opac/opac-detail.pl | 21 ----------------- > t/Koha/Util/Search.t | 18 ++++++++++++--- > 6 files changed, 76 insertions(+), 87 deletions(-) > >diff --git a/C4/XSLT.pm b/C4/XSLT.pm >index 9d045ff45f..fd5a644389 100644 >--- a/C4/XSLT.pm >+++ b/C4/XSLT.pm >@@ -285,31 +285,37 @@ sub XSLTParse4Display { > my $partsxml = ''; > # possibly insert component records into Detail views > if ($xslsyspref =~ m/Details/) { >+ my $biblio = Koha::Biblios->find( $biblionumber ); >+ my $components = $biblio->get_marc_components(300); >+ $variables->{show_analytics_link} = ( scalar @{$components} == 0 ) ? 0 : 1; >+ > my $showcomp = C4::Context->preference('ShowComponentRecords'); >- if ( $showcomp eq 'both' || >- ($showcomp eq 'staff' && $xslsyspref !~ m/OPAC/ ) || >- ($showcomp eq 'opac' && $xslsyspref =~ m/OPAC/ ) ) { >- my $biblio = Koha::Biblios->find( $biblionumber ); >- my $max_results = 300; >- >- if ( $biblio->get_marc_components($max_results) ) { >- my $search_query = Koha::Util::Search::get_component_part_query($biblionumber); >- $variables->{ComponentPartQuery} = $search_query; >- >- my @componentPartRecordXML = ('<componentPartRecords>'); >- for my $cb ( @{ $biblio->get_marc_components($max_results) } ) { >- if( ref $cb eq 'MARC::Record'){ >- $cb = $cb->as_xml_record(); >- } else { >- $cb = decode('utf8', $cb); >- } >- # Remove the xml header >- $cb =~ s/^<\?xml.*?\?>//; >- push @componentPartRecordXML,$cb; >- } >- push @componentPartRecordXML, '</componentPartRecords>'; >- $partsxml = join "\n", @componentPartRecordXML; >- } >+ if ( >+ $variables->{show_analytics_link} >+ && ( $showcomp eq 'both' >+ || ( $showcomp eq 'staff' && $xslsyspref !~ m/OPAC/ ) >+ || ( $showcomp eq 'opac' && $xslsyspref =~ m/OPAC/ ) ) >+ ) >+ { >+ >+ $variables->{show_analytics_link} = 0; >+ >+ my $search_query = Koha::Util::Search::get_component_part_query($biblionumber); >+ $variables->{ComponentPartQuery} = $search_query; >+ >+ my @componentPartRecordXML = ('<componentPartRecords>'); >+ for my $cb ( @{ $components } ) { >+ if( ref $cb eq 'MARC::Record'){ >+ $cb = $cb->as_xml_record(); >+ } else { >+ $cb = decode('utf8', $cb); >+ } >+ # Remove the xml header >+ $cb =~ s/^<\?xml.*?\?>//; >+ push @componentPartRecordXML,$cb; >+ } >+ push @componentPartRecordXML, '</componentPartRecords>'; >+ $partsxml = join "\n", @componentPartRecordXML; > } > } > >diff --git a/Koha/Biblio.pm b/Koha/Biblio.pm >index 3f9d179665..57a195a6ba 100644 >--- a/Koha/Biblio.pm >+++ b/Koha/Biblio.pm >@@ -491,7 +491,7 @@ this object (MARC21 773$w points to this) > sub get_marc_components { > my ($self, $max_results) = @_; > >- return if (C4::Context->preference('marcflavour') ne 'MARC21'); >+ return [] if (C4::Context->preference('marcflavour') ne 'MARC21'); > > my $searchstr = Koha::Util::Search::get_component_part_query($self->id); > >@@ -501,7 +501,7 @@ sub get_marc_components { > $self->{_components} = $results if ( defined($results) && scalar(@$results) ); > } > >- return $self->{_components} || (); >+ return $self->{_components} || []; > } > > =head3 subscriptions >diff --git a/Koha/Util/Search.pm b/Koha/Util/Search.pm >index 0228183e35..99ff38e77f 100644 >--- a/Koha/Util/Search.pm >+++ b/Koha/Util/Search.pm >@@ -19,7 +19,7 @@ package Koha::Util::Search; > > use Modern::Perl; > >-use C4::Biblio; >+use C4::Biblio qw( GetMarcBiblio ); > > =head1 NAME > >@@ -36,22 +36,38 @@ Returns a query which can be used to search for all component parts of MARC21 bi > sub get_component_part_query { > my ($biblionumber) = @_; > >- my $marc = C4::Biblio::GetMarcBiblio({ biblionumber => $biblionumber }); >- my $pf001 = $marc->field('001') || undef; >+ my $marc = GetMarcBiblio( { biblionumber => $biblionumber } ); > >- if (defined($pf001)) { >- my $pf003 = $marc->field('003') || undef; >- my $searchstr; >+ my $searchstr; >+ if ( C4::Context->preference('UseControlNumber') ) { >+ my $pf001 = $marc->field('001') || undef; > >- if (!defined($pf003)) { >- # search for 773$w='Host001' >- $searchstr = "rcn=\"".$pf001->data()."\""; >- } else { >- # 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()."\""; >+ 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/catalogue/detail.pl b/catalogue/detail.pl >index b5801cca71..cd186c36b0 100755 >--- a/catalogue/detail.pl >+++ b/catalogue/detail.pl >@@ -126,29 +126,6 @@ my $marcflavour = C4::Context->preference("marcflavour"); > { > # XSLT processing of some stuff > >- my $searcher = Koha::SearchEngine::Search->new( >- { index => $Koha::SearchEngine::BIBLIOS_INDEX } >- ); >- my $builder = Koha::SearchEngine::QueryBuilder->new( >- { index => $Koha::SearchEngine::BIBLIOS_INDEX } ); >- >- my $cleaned_title = $biblio->title; >- $cleaned_title =~ tr|/||; >- $cleaned_title = $builder->clean_search_term($cleaned_title); >- >- my $query = >- ( C4::Context->preference('UseControlNumber') and $record->field('001') ) >- ? 'rcn:'. $record->field('001')->data . ' AND (bib-level:a OR bib-level:b)' >- : "Host-item:($cleaned_title)"; >- my ( $err, $result, $count ) = $searcher->simple_search_compat( $query, 0, 0 ); >- >- warn "Warning from simple_search_compat: $err" >- if $err; >- >- my $variables = { >- show_analytics_link => $count > 0 ? 1 : 0 >- }; >- > $template->param( > XSLTDetailsDisplay => '1', > XSLTBloc => XSLTParse4Display( >@@ -157,7 +134,6 @@ my $marcflavour = C4::Context->preference("marcflavour"); > record => $record, > xsl_syspref => "XSLTDetailsDisplay", > fix_amps => 1, >- xslt_variables => $variables > } > ), > ); >diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl >index eb9a6866b1..ec453a9d08 100755 >--- a/opac/opac-detail.pl >+++ b/opac/opac-detail.pl >@@ -195,29 +195,8 @@ my $marcflavour = C4::Context->preference("marcflavour"); > my $ean = GetNormalizedEAN( $record, $marcflavour ); > > { >- my $searcher = Koha::SearchEngine::Search->new( >- { index => $Koha::SearchEngine::BIBLIOS_INDEX } >- ); >- my $builder = Koha::SearchEngine::QueryBuilder->new( >- { index => $Koha::SearchEngine::BIBLIOS_INDEX } >- ); >- >- my $cleaned_title = $biblio->title; >- $cleaned_title =~ tr|/||; >- $cleaned_title = $builder->clean_search_term($cleaned_title); >- >- my $query = >- ( C4::Context->preference('UseControlNumber') and $record->field('001') ) >- ? 'rcn:'. $record->field('001')->data . ' AND (bib-level:a OR bib-level:b)' >- : "Host-item:($cleaned_title)"; >- my ( $err, $result, $count ) = $searcher->simple_search_compat( $query, 0, 0 ); >- >- warn "Warning from simple_search_compat: $err" >- if $err; >- > my $variables = { > anonymous_session => ($borrowernumber) ? 0 : 1, >- show_analytics_link => $count > 0 ? 1 : 0 > }; > > my $lang = C4::Languages::getlanguage(); >diff --git a/t/Koha/Util/Search.t b/t/Koha/Util/Search.t >index e5cde2900b..30008db150 100755 >--- a/t/Koha/Util/Search.t >+++ b/t/Koha/Util/Search.t >@@ -20,23 +20,35 @@ > use Modern::Perl; > > use Test::More tests => 1; >+ >+use t::lib::Mocks; > use t::lib::TestBuilder; > >-use C4::Biblio; >+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 => 1; >+ 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\""); >+ 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"); > }; >-- >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