[Koha-patches] [PATCH] Analytical records support
Amit Gupta
amit.gupta at osslabs.biz
Sun Oct 31 12:49:18 CET 2010
Display links to parent biblios, show linked items in holdings, allow holds on linked items. This uses MARC to maintain relationships.
---
C4/Biblio.pm | 34 ++++++++++++++++++++
C4/Search.pm | 20 +++++++++++
catalogue/detail.pl | 19 +++++++++++
cataloguing/addbiblio.pl | 34 ++++++++++++++++++++
.../prog/en/modules/catalogue/detail.tmpl | 4 ++
.../prog/en/modules/catalogue/moredetail.tmpl | 2 +-
.../opac-tmpl/prog/en/modules/opac-detail.tmpl | 9 +++++
opac/opac-detail.pl | 14 ++++++++
opac/opac-reserve.pl | 16 +++++++++
9 files changed, 151 insertions(+), 1 deletions(-)
diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index 81ccfbb..a58f03e 100644
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -72,6 +72,7 @@ BEGIN {
&GetMarcBiblio
&GetMarcAuthors
&GetMarcSeries
+ &GetMarcHosts
GetMarcUrls
&GetUsedMarcStructure
&GetXmlBiblio
@@ -1553,6 +1554,39 @@ sub GetMarcSeries {
return $marcseriessarray;
} #end getMARCseriess
+=head2 GetMarcHosts
+
+ $marchostsarray = GetMarcHosts($record,$marcflavour);
+
+Get all host records (773s) from the MARC record and returns them in an array.
+
+=cut
+
+sub GetMarcHosts {
+ my ( $record, $marcflavour ) = @_;
+ my ( $tag );
+ if ( $marcflavour eq "MARC21" ) {
+ $tag = "773";
+
+ }
+
+ my @marchosts;
+
+ foreach my $field ( $record->field('773')) {
+
+ my @fields_loop;
+
+ my $hostbiblionumber = $field->subfield("w");
+ my $hosttitle = $field->subfield("a");
+ my $hostitemnumber=$field->subfield("o");
+ push @fields_loop, { hostbiblionumber => $hostbiblionumber, hosttitle => $hosttitle, hostitemnumber => $hostitemnumber};
+ push @marchosts, { MARCHOSTS_FIELDS_LOOP => \@fields_loop };
+
+ }
+ my $marchostsarray = \@marchosts;
+ return $marchostsarray;
+}
+
=head2 GetFrameworkCode
$frameworkcode = GetFrameworkCode( $biblionumber )
diff --git a/C4/Search.pm b/C4/Search.pm
index d36459a..7795b6f 100644
--- a/C4/Search.pm
+++ b/C4/Search.pm
@@ -1501,6 +1501,26 @@ sub searchResults {
# Pull out the items fields
my @fields = $marcrecord->field($itemtag);
+ # adding linked items that belong to host records
+ foreach my $hostfield ( $marcrecord->field('773')) {
+ my $hostbiblionumber = $hostfield->subfield("w");
+ my $linkeditemnumber = $hostfield->subfield("o");
+ if(!$hostbiblionumber eq undef){
+ my $hostbiblio = GetMarcBiblio($hostbiblionumber);
+ if(!$hostbiblio eq undef){
+ my @hostitems = $hostbiblio->field('952');
+ foreach my $hostitem (@hostitems){
+ if ($hostitem->subfield("9") eq $linkeditemnumber){
+ my $linkeditem =$hostitem;
+ # append linked items if they exist
+ if (!$linkeditem eq undef){
+ push (@fields, $linkeditem);}
+ }
+ }
+ }
+ }
+ }
+
# Setting item statuses for display
my @available_items_loop;
my @onloan_items_loop;
diff --git a/catalogue/detail.pl b/catalogue/detail.pl
index 4f6c23f..7990f6a 100755
--- a/catalogue/detail.pl
+++ b/catalogue/detail.pl
@@ -91,6 +91,7 @@ my $marcauthorsarray = GetMarcAuthors( $record, $marcflavour );
my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour );
my $marcseriesarray = GetMarcSeries($record,$marcflavour);
my $marcurlsarray = GetMarcUrls ($record,$marcflavour);
+my $marchostsarray = GetMarcHosts($record,$marcflavour);
my $subtitle = GetRecordValue('subtitle', $record, $fw);
# Get Branches, Itemtypes and Locations
@@ -100,6 +101,23 @@ my $dbh = C4::Context->dbh;
# change back when ive fixed request.pl
my @items = &GetItemsInfo( $biblionumber, 'intra' );
+
+# flag indicating existence of at least one item linked via a host record
+my $hostrecords;
+# adding items linked via host biblios
+ foreach my $hostfield ( $record->field('773')) {
+ my $hostbiblionumber = $hostfield->subfield("w");
+ my $linkeditemnumber = $hostfield->subfield("o");
+ my @hostitemInfos = GetItemsInfo($hostbiblionumber);
+ foreach my $hostitemInfo (@hostitemInfos){
+ if ($hostitemInfo->{itemnumber} eq $linkeditemnumber){
+ $hostrecords =1;
+ push(@items, $hostitemInfo);
+ }
+ }
+ }
+
+
my $dat = &GetBiblioData($biblionumber);
#coping with subscriptions
@@ -207,6 +225,7 @@ $template->param(
MARCAUTHORS => $marcauthorsarray,
MARCSERIES => $marcseriesarray,
MARCURLS => $marcurlsarray,
+ MARCHOSTS => $marchostsarray,
subtitle => $subtitle,
itemdata_ccode => $itemfields{ccode},
itemdata_enumchron => $itemfields{enumchron},
diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl
index fc56047..a306dd3 100755
--- a/cataloguing/addbiblio.pl
+++ b/cataloguing/addbiblio.pl
@@ -693,6 +693,39 @@ sub build_tabs ($$$$$) {
# always include in the form regardless of the hidden setting - bug 2206
next
if ( $tagslib->{$tag}->{$subfield}->{tab} ne $tabloop );
+
+ # populating host record details for analytical records
+ my $hostbiblionumber = $input->param('hostbiblionumber');
+ my $hostitemnumber = $input->param('hostitemnumber');
+ if ( $tag eq 773 and $hostbiblionumber){
+ my $hostrecord = &GetMarcBiblio($hostbiblionumber);
+ if ($subfield eq "w"){
+ push(
+ @subfields_data,
+ &create_input(
+ $tag, $subfield,$hostbiblionumber, $index_tag, $tabloop, $record,
+ $authorised_values_sth,$input
+ ));
+ }
+ elsif ($subfield eq "a"){
+ push(
+ @subfields_data,
+ &create_input(
+ $tag, $subfield,$hostrecord->subfield('245',"a"), $index_tag, $tabloop, $record,
+ $authorised_values_sth,$input
+ ));
+ }
+ elsif ($subfield eq "o"){
+ push(
+ @subfields_data,
+ &create_input(
+ $tag, $subfield,$hostitemnumber, $index_tag, $tabloop, $record,
+ $authorised_values_sth,$input
+ ));
+ }
+
+ }
+ else {
push(
@subfields_data,
&create_input(
@@ -700,6 +733,7 @@ sub build_tabs ($$$$$) {
$authorised_values_sth,$input
)
);
+ }
}
if ( $#subfields_data >= 0 ) {
my %tag_data = (
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl
index 1861028..34618bc 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl
@@ -215,6 +215,7 @@ function verify_images() {
<!-- TMPL_IF NAME="itemdata_uri" --><th>URL</th><!-- /TMPL_IF -->
<!-- TMPL_IF NAME="itemdata_copynumber" --><th>Copy No.</th><!-- /TMPL_IF -->
<!-- TMPL_IF NAME="SpineLabelShowPrintOnBibDetails" --><th>Spine Label</th><!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="hostrecords" --><th>Host Record</th><!-- /TMPL_IF -->
</tr>
<!-- TMPL_LOOP NAME="itemloop" -->
<tr>
@@ -339,6 +340,9 @@ function verify_images() {
<!-- TMPL_IF NAME="SpineLabelShowPrintOnBibDetails" -->
<td><a href="/cgi-bin/koha/labels/spinelabel-print.pl?barcode=<!-- TMPL_VAR NAME="barcode" -->" >Print Label</a></td>
<!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="hostrecords" -->
+ <td><!-- TMPL_IF NAME="hostbiblionumber" --><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=<!-- TMPL_VAR NAME="hostbiblionumber" -->" >Host Record</a><!-- /TMPL_IF --></td>
+ <!-- /TMPL_IF -->
</tr>
<!-- /TMPL_LOOP -->
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl
index 8577193..76ebec7 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl
@@ -42,7 +42,7 @@
<!-- TMPL_LOOP NAME="ITEM_DATA" -->
<div class="yui-g">
<h3 id="item<!-- TMPL_VAR NAME="itemnumber" -->">Barcode <!-- TMPL_VAR NAME="barcode" --> <!-- TMPL_IF name="notforloantext" --><!-- TMPL_VAR name="notforloantext" --> <!-- /TMPL_IF --></h3>
- <div class="listgroup"><h4>Item Information <!-- TMPL_IF NAME="CAN_user_editcatalogue_edit_catalogue" --><!-- TMPL_UNLESS name="nomod" --><a href="/cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=<!-- TMPL_VAR NAME="biblionumber"-->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->">[Edit Items]</a><!-- /TMPL_IF --><!-- /TMPL_UNLESS --></h4>
+ <div class="listgroup"><h4>Item Information <!-- TMPL_IF NAME="CAN_user_editcatalogue_edit_catalogue" --><!-- TMPL_UNLESS name="nomod" --><a href="/cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=<!-- TMPL_VAR NAME="biblionumber"-->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->">[Edit Items]</a> <a href="/cgi-bin/koha/cataloguing/addbiblio.pl?hostbiblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&hostitemnumber=<!-- TMPL_VAR NAME="itemnumber" -->">[Create Analytical Record]</a><!-- /TMPL_IF --><!-- /TMPL_UNLESS --></h4>
<ol class="bibliodetails">
<li><span class="label">Home Library:</span> <!-- TMPL_VAR NAME="homebranchname" --> </li>
<!-- TMPL_IF NAME="item-level_itypes" -->
diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
index b1fdf84..17ecb33 100644
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
@@ -127,6 +127,15 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
<!-- /TMPL_LOOP -->
</span>
<!-- /TMPL_IF -->
+
+<!-- TMPL_IF NAME="MARCHOSTS" -->
+ <li><strong>Host Records: </strong><ul><!-- TMPL_LOOP NAME="MARCHOSTS" -->
+ <li><!-- TMPL_LOOP NAME="MARCHOSTS_FIELDS_LOOP" --> <!-- TMPL_IF NAME="hosttitle" --> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="hostbiblionumber" ESCAPE="url"-->"><!-- TMPL_VAR NAME="hosttitle" --></a><!-- /TMPL_IF --> <!-- /TMPL_LOOP --></li>
+ <!-- /TMPL_LOOP -->
+ </ul>
+ </li>
+ <!-- /TMPL_IF -->
+
<!-- TMPL_IF name="editionstatement" -->
<span class="results_summary"><span class="label">Edition statement:</span><!-- TMPL_VAR NAME="editionstatement" --><!-- TMPL_IF name="editionresponsibility" -->/<!-- TMPL_VAR NAME="editionresponsibility" --><!-- /TMPL_IF--></span>
<!-- /TMPL_IF -->
diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl
index 629ebd2..3e55fcd 100755
--- a/opac/opac-detail.pl
+++ b/opac/opac-detail.pl
@@ -79,6 +79,19 @@ if (C4::Context->preference("OPACXSLTDetailsDisplay") ) {
$template->param('OPACShowCheckoutName' => C4::Context->preference("OPACShowCheckoutName") );
# change back when ive fixed request.pl
my @all_items = &GetItemsInfo( $biblionumber, 'opac' );
+
+# adding items linked via host biblios
+ foreach my $hostfield ( $record->field('773')) {
+ my $hostbiblionumber = $hostfield->subfield("w");
+ my $linkeditemnumber = $hostfield->subfield("o");
+ my @hostitemInfos = GetItemsInfo($hostbiblionumber);
+ foreach my $hostitemInfo (@hostitemInfos){
+ if ($hostitemInfo->{itemnumber} eq $linkeditemnumber){
+ push(@all_items, $hostitemInfo);
+ }
+ }
+ }
+
my @items;
@items = @all_items unless C4::Context->preference('hidelostitems');
@@ -203,6 +216,7 @@ my $marcauthorsarray = GetMarcAuthors ($record,$marcflavour);
my $marcsubjctsarray = GetMarcSubjects($record,$marcflavour);
my $marcseriesarray = GetMarcSeries ($record,$marcflavour);
my $marcurlsarray = GetMarcUrls ($record,$marcflavour);
+my $marchostsarray = GetMarcHosts($record,$marcflavour);
my $subtitle = GetRecordValue('subtitle', $record, GetFrameworkCode($biblionumber));
$template->param(
diff --git a/opac/opac-reserve.pl b/opac/opac-reserve.pl
index 699179b..bcd47a7 100755
--- a/opac/opac-reserve.pl
+++ b/opac/opac-reserve.pl
@@ -114,6 +114,22 @@ foreach my $biblioNumber (@biblionumbers) {
$biblioDataHash{$biblioNumber} = $biblioData;
my @itemInfos = GetItemsInfo($biblioNumber);
+
+ my $marcrecord= GetMarcBiblio($biblioNumber);
+
+# adding items linked via host biblios
+ foreach my $hostfield ( $marcrecord->field('773')) {
+ my $hostbiblionumber = $hostfield->subfield("w");
+ my $linkeditemnumber = $hostfield->subfield("o");
+ my @hostitemInfos = GetItemsInfo($hostbiblionumber);
+ foreach my $hostitemInfo (@hostitemInfos){
+ if ($hostitemInfo->{itemnumber} eq $linkeditemnumber){
+ push(@itemInfos, $hostitemInfo);
+ }
+ }
+ }
+
+
$biblioData->{itemInfos} = \@itemInfos;
foreach my $itemInfo (@itemInfos) {
$itemInfoHash{$itemInfo->{itemnumber}} = $itemInfo;
--
1.5.4.5
More information about the Koha-patches
mailing list