@@ -, +, @@ (This file is an attachment on the bug) the biblio detail page. You should not see anything different in the record detail page. the record detail page in staff client and OPAC. You should see a list of component part records. --- C4/XSLT.pm | 23 ++++++- Koha/Biblio.pm | 45 +++++++++++++ .../data/mysql/atomicupdate/bug_11175.perl | 6 ++ installer/data/mysql/mandatory/sysprefs.sql | 1 + .../prog/css/src/staff-global.scss | 8 +++ .../admin/preferences/staff_interface.pref | 9 +++ .../en/xslt/MARC21slim2intranetDetail.xsl | 2 + .../prog/en/xslt/MARC21slimUtils.xsl | 66 +++++++++++++++++++ .../opac-tmpl/bootstrap/css/src/opac.scss | 8 +++ .../en/xslt/MARC21slim2OPACDetail.xsl | 2 + .../bootstrap/en/xslt/MARC21slimUtils.xsl | 66 +++++++++++++++++++ 11 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 installer/data/mysql/atomicupdate/bug_11175.perl --- a/C4/XSLT.pm +++ a/C4/XSLT.pm @@ -288,8 +288,29 @@ sub XSLTParse4Display { } $varxml .= "\n"; + my $partsxml = ''; + # possibly insert component records into Detail views + if ($xslsyspref =~ m/Details/) { + 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 ); + 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; + } + } + } + my $sysxml = get_xslt_sysprefs(); - $xmlrecord =~ s/\<\/record\>/$itemsxml$sysxml$varxml\<\/record\>/; + $xmlrecord =~ s/\<\/record\>/$itemsxml$sysxml$varxml$partsxml\<\/record\>/; if ($fixamps) { # We need to correct the ampersand entities that Zebra outputs $xmlrecord =~ s/\&amp;/\&/g; $xmlrecord =~ s/\&\;lt\;/\<\;/g; --- a/Koha/Biblio.pm +++ a/Koha/Biblio.pm @@ -41,6 +41,8 @@ use Koha::Items; use Koha::Libraries; use Koha::Suggestions; use Koha::Subscriptions; +use Koha::SearchEngine; +use Koha::SearchEngine::Search; =head1 NAME @@ -495,6 +497,49 @@ sub suggestions { return Koha::Suggestions->_new_from_dbic( $suggestions_rs ); } +=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 $searcher = Koha::SearchEngine::Search->new({index => $Koha::SearchEngine::BIBLIOS_INDEX}); + + if (defined($pf001)) { + my $pf003 = $marc->field('003') || undef; + my $searchstr; + + 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()."'"; + } + + 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/installer/data/mysql/atomicupdate/bug_11175.perl +++ a/installer/data/mysql/atomicupdate/bug_11175.perl @@ -0,0 +1,6 @@ +$DBversion = 'XXX'; # will be replaced by the RM +if( CheckVersion( $DBversion ) ) { + $dbh->do("INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES ('ShowComponentRecords', 'nowhere', 'nowhere|staff|opac|both','In which record detail pages to show list of the component records, as linked via 773','Choice')"); + SetVersion( $DBversion ); + print "Upgrade to $DBversion done (Bug 11175: Show component records in detail views)\n"; +} --- a/installer/data/mysql/mandatory/sysprefs.sql +++ a/installer/data/mysql/mandatory/sysprefs.sql @@ -613,6 +613,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('ShelfBrowserUsesHomeBranch','1','1','Use the item home branch when finding items for the shelf browser.','YesNo'), ('ShelfBrowserUsesLocation','1','1','Use the item location when finding items for the shelf browser.','YesNo'), ('ShowAllCheckins', '0', '', 'Show all checkins', 'YesNo'), +('ShowComponentRecords', 'nowhere', 'nowhere|staff|opac|both','In which record detail pages to show list of the component records, as linked via 773','Choice'), ('showLastPatron','0','','If ON, enables the last patron feature in the intranet','YesNo'), ('ShowPatronImageInWebBasedSelfCheck','0','','If ON, displays patron image when a patron uses web-based self-checkout','YesNo'), ('ShowReviewer','full','none|full|first|surname|firstandinitial|username','Choose how a commenter\'s identity is presented alongside comments in the OPAC','Choice'), --- a/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss +++ a/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss @@ -609,6 +609,14 @@ ol { padding: 7px 0; } +.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/modules/admin/preferences/staff_interface.pref +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/staff_interface.pref @@ -181,6 +181,15 @@ Staff interface: 1: Show 0: "Don't show" - a search field pulldown for 'Search the catalog' boxes. + - + - Show a list of component records, as linked via field 773, in + - pref: ShowComponentRecords + choices: + nowhere: "no" + staff: "staff client" + opac: "OPAC" + both: "both staff client and OPAC" + - record detail pages. Authentication: - - pref: staffShibOnly --- a/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetDetail.xsl +++ a/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slim2intranetDetail.xsl @@ -115,6 +115,8 @@ + +

--- a/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slimUtils.xsl +++ a/koha-tmpl/intranet-tmpl/prog/en/xslt/MARC21slimUtils.xsl @@ -578,6 +578,72 @@ + + + + + + +

--- a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slimUtils.xsl +++ a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slimUtils.xsl @@ -542,6 +542,72 @@ + + + + + + +