From c1cdd55af0f03985c3036bfd7ae29c8fa03b0147 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Mon, 1 Jun 2020 12:32:21 -0400 Subject: [PATCH] LP1881607 Angular catalog e-resource links display Display electronic resource links (MARC 856's) in the Angular staff catalog. The extraction logic, which matches the TPAC, has been put into its own API. To test in concerto, navigate to: /eg2/staff/catalog/record/208 Signed-off-by: Bill Erickson --- .../src/eg2/src/app/share/catalog/bib-record.service.ts | 5 +++++ Open-ILS/src/perlmods/lib/OpenILS/Application/AppUtils.pm | 15 ++++++++++++++- .../src/perlmods/lib/OpenILS/Application/Cat/Authority.pm | 8 +------- .../src/perlmods/lib/OpenILS/Application/Search/Biblio.pm | 6 +++++- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts b/Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts index ca6007d59b..c64357d4cb 100644 --- a/Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts +++ b/Open-ILS/src/eg2/src/app/share/catalog/bib-record.service.ts @@ -17,6 +17,11 @@ export const NAMESPACE_MAPS = { export const HOLDINGS_XPATH = '/holdings:holdings/holdings:counts/holdings:count'; +interface EResourceUrl { + href: string; + note: string; + label: string; +} export interface HoldingsSummary { org_unit: number; diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/AppUtils.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/AppUtils.pm index 97eec3103e..bc24016a00 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/AppUtils.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/AppUtils.pm @@ -1,5 +1,7 @@ package OpenILS::Application::AppUtils; use strict; use warnings; +use MARC::Record; +use MARC::File::XML (BinaryEncoding => 'utf8', RecordFormat => 'USMARC'); use OpenILS::Application; use base qw/OpenILS::Application/; use OpenSRF::Utils::Cache; @@ -23,7 +25,7 @@ use Digest::MD5 qw(md5_hex); # Pile of utilty methods used accross applications. # --------------------------------------------------------------------------- my $cache_client = "OpenSRF::Utils::Cache"; - +my $MARC_NAMESPACE = 'http://www.loc.gov/MARC21/slim'; # --------------------------------------------------------------------------- # on sucess, returns the created session, on failure throws ERROR exception @@ -2446,5 +2448,16 @@ sub verify_migrated_user_password { } +# generate a MARC XML document from a MARC XML string +sub marc_xml_to_doc { + my ($class, $xml) = @_; + my $marc_doc = XML::LibXML->new->parse_string($xml); + $marc_doc->documentElement->setNamespace($MARC_NAMESPACE, 'marc', 1); + $marc_doc->documentElement->setNamespace($MARC_NAMESPACE); + return $marc_doc; +} + + + 1; diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Cat/Authority.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Cat/Authority.pm index 82d04f56e9..746f528150 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Cat/Authority.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Cat/Authority.pm @@ -11,19 +11,13 @@ use OpenILS::Utils::Fieldmapper; use OpenILS::Const qw/:const/; use OpenILS::Event; my $U = 'OpenILS::Application::AppUtils'; -my $MARC_NAMESPACE = 'http://www.loc.gov/MARC21/slim'; - # generate a MARC XML document from a MARC XML string sub marc_xml_to_doc { my $xml = shift; - my $marc_doc = XML::LibXML->new->parse_string($xml); - $marc_doc->documentElement->setNamespace($MARC_NAMESPACE, 'marc', 1); - $marc_doc->documentElement->setNamespace($MARC_NAMESPACE); - return $marc_doc; + return $U->marc_xml_to_doc($xml); } - __PACKAGE__->register_method( method => 'import_authority_record', api_name => 'open-ils.cat.authority.record.import', diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm index ab372c872e..5618a9da19 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm @@ -2987,7 +2987,11 @@ sub record_urls { my $marc_doc = $U->marc_xml_to_doc($bib->marc); - for my $node ($marc_doc->findnodes('//*[@tag="856" and @ind1="4"]')) { + # Logic copied from TPAC misc_utils.tts + my @urls; + + for my $node ($marc_doc->findnodes( + '//*[@tag="856" and @ind1="4" and (@ind2="0" or @ind2="1")]')) { # asset.uri's next if $node->findnodes('./*[@code="9" or @code="w" or @code="n"]'); -- 2.11.0