@@ -, +, @@
the biblio detail page. You should see a list of
component part records on the detail page.
---
C4/Search.pm | 2 +
C4/XSLT.pm | 19 ++++++-
Koha/Biblio.pm | 41 ++++++++++++++
Koha/QueryParser/Driver/PQF.pm | 2 +
etc/searchengine/queryparser.yaml | 10 ++++
etc/zebradb/biblios/etc/bib1.att | 1 +
etc/zebradb/ccl.properties | 3 +
.../marc21/biblios/biblio-koha-indexdefs.xml | 3 +
.../marc21/biblios/biblio-zebra-indexdefs.xsl | 5 ++
.../intranet-tmpl/prog/css/src/staff-global.scss | 8 +++
.../prog/en/xslt/MARC21slim2intranetDetail.xsl | 2 +
.../intranet-tmpl/prog/en/xslt/MARC21slimUtils.xsl | 66 ++++++++++++++++++++++
t/QueryParser.t | 2 +-
13 files changed, 162 insertions(+), 2 deletions(-)
--- a/C4/Search.pm
+++ a/C4/Search.pm
@@ -1121,6 +1121,8 @@ sub getIndexes{
'Conference-name-seealso',
'Content-type',
'Control-number',
+ 'Control-number-identifier',
+ 'cni',
'copydate',
'Corporate-name',
'Corporate-name-heading',
--- a/C4/XSLT.pm
+++ a/C4/XSLT.pm
@@ -243,7 +243,24 @@ sub XSLTParse4Display {
my $itemsxml = buildKohaItemsNamespace($biblionumber, $hidden_items);
my $xmlrecord = $record->as_xml(C4::Context->preference('marcflavour'));
- $xmlrecord =~ s/\<\/record\>/$itemsxml$sysxml\<\/record\>/;
+ my $partsxml = '';
+ # Add component part records only for Detail view
+ if ( $xslsyspref =~ m/Details/ ) {
+ my $biblio = Koha::Biblios->find( $biblionumber );
+ if ( $biblio->components() ) {
+ my @componentPartRecordXML = ('');
+ for my $cb ( @{ $biblio->components() } ) {
+ # Remove the xml header
+ $cb =~ s/^<\?xml.*?\?>//;
+ push @componentPartRecordXML, decode('utf8', $cb);
+ }
+ push @componentPartRecordXML, '';
+
+ $partsxml = join "\n", @componentPartRecordXML;
+ }
+ }
+
+ $xmlrecord =~ s/\<\/record\>/$itemsxml$sysxml$partsxml\<\/record\>/;
if ($fixamps) { # We need to correct the HTML entities that Zebra outputs
$xmlrecord =~ s/\&/\&/g;
$xmlrecord =~ s/\&\;lt\;/\<\;/g;
--- a/Koha/Biblio.pm
+++ a/Koha/Biblio.pm
@@ -36,6 +36,8 @@ use Koha::IssuingRules;
use Koha::Item::Transfer::Limits;
use Koha::Libraries;
use Koha::Subscriptions;
+use Koha::SearchEngine;
+use Koha::SearchEngine::Search;
=head1 NAME
@@ -386,6 +388,45 @@ sub biblioitem {
return $self->{_biblioitem};
}
+=head3 components
+
+my $components = $self->components();
+
+Returns an array of MARCXML data, which are component parts of
+this object (MARC21 773$w points to this)
+
+=cut
+
+sub components {
+ my ($self) = @_;
+
+ return undef if (C4::Context->preference('marcflavour') ne 'MARC21');
+
+ if (!defined($self->{_components})) {
+ my $marc = C4::Biblio::GetMarcBiblio({ biblionumber => $self->id });
+ my $pf001 = $marc->field('001') || undef;
+ my $pf003 = $marc->field('003') || undef;
+
+ my $searcher = Koha::SearchEngine::Search->new({index => $Koha::SearchEngine::BIBLIOS_INDEX});
+
+ if (defined($pf001)) {
+ # search for (773$w='Host001' and 003='Host003') or 773$w='Host003 Host001')
+ my $searchstr = "(rcn='".$pf001->data()."'";
+ $searchstr .= " and cni='".$pf003->data()."'" if (defined($pf003));
+ $searchstr .= ")";
+ $searchstr .= " or rcn='".$pf003->data()." ".$pf001->data()."'" if (defined($pf003));
+
+ my ( $errors, $results, $total_hits ) = $searcher->simple_search_compat( $searchstr, 0, undef );
+
+ $self->{_components} = $results if ( defined($results) && scalar(@$results) );
+ } else {
+ warn "Record $self->id has no 001";
+ }
+ }
+
+ return $self->{_components};
+}
+
=head3 subscriptions
my $subscriptions = $self->subscriptions
--- a/Koha/QueryParser/Driver/PQF.pm
+++ a/Koha/QueryParser/Driver/PQF.pm
@@ -727,6 +727,8 @@ sub TEST_SETUP {
$self->add_search_field_alias( 'keyword' => 'note' => 'nt' );
$self->add_bib1_field_map('keyword' => 'record-control-number' => 'biblioserver' => { '1' => '1045' } );
$self->add_search_field_alias( 'keyword' => 'record-control-number' => 'rcn' );
+ $self->add_bib1_field_map('keyword' => 'control-number-identifier' => 'biblioserver' => { '1' => '9014' } );
+ $self->add_search_field_alias( 'keyword' => 'control-number-identifier' => 'cni' );
$self->add_bib1_field_map('subject' => '' => 'biblioserver' => { '1' => '21' } );
$self->add_search_field_alias( 'subject' => '' => 'su' );
$self->add_search_field_alias( 'subject' => '' => 'su-to' );
--- a/etc/searchengine/queryparser.yaml
+++ a/etc/searchengine/queryparser.yaml
@@ -321,6 +321,16 @@ field_mappings:
aliases:
- control-number
label: Control-number
+ control-number-identifier:
+ bib1_mapping:
+ biblioserver:
+ 1: 9014
+ enabled: 1
+ index: control-number-identifier
+ aliases:
+ - control-number-identifier
+ - cni
+ label: Control-number-identifier
copynumber:
bib1_mapping:
biblioserver:
--- a/etc/zebradb/biblios/etc/bib1.att
+++ a/etc/zebradb/biblios/etc/bib1.att
@@ -221,6 +221,7 @@ att 9010 cn-suffix
att 9011 Suppress
att 9012 Identifier-other
att 9013 not-onloan-count
+att 9014 Control-number-identifier
# Items Index
att 8001 withdrawn
--- a/etc/zebradb/ccl.properties
+++ a/etc/zebradb/ccl.properties
@@ -996,6 +996,9 @@ llength 1=llength
Summary 1=Summary
not-onloan-count 1=9013 4=109
+Control-number-identifier 1=9014
+cni Control-number-identifier
+
###
# Items Index
withdrawn 1=8001
--- a/etc/zebradb/marc_defs/marc21/biblios/biblio-koha-indexdefs.xml
+++ a/etc/zebradb/marc_defs/marc21/biblios/biblio-koha-indexdefs.xml
@@ -16,6 +16,9 @@
Control-number:w
+
+ Control-number-identifier:w
+
Date/time-last-modified:w
--- a/etc/zebradb/marc_defs/marc21/biblios/biblio-zebra-indexdefs.xsl
+++ a/etc/zebradb/marc_defs/marc21/biblios/biblio-zebra-indexdefs.xsl
@@ -62,6 +62,11 @@ definition file (probably something like {biblio,authority}-koha-indexdefs.xml)
+
+
+
+
+
--- a/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss
+++ a/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss
@@ -721,6 +721,14 @@ ol {
}
}
+.componentPartRecordsContainer {
+ float: right;
+ overflow-y: auto;
+ overflow-x: hidden;
+ max-width: 50%;
+ max-height: 25em;
+}
+
#editions {
table,
td {
--- a/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetDetail.xsl
+++ a/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetDetail.xsl
@@ -110,6 +110,8 @@
+
+
--- a/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slimUtils.xsl
+++ a/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slimUtils.xsl
@@ -338,6 +338,72 @@
+
+
+
+
+
+
+