From f3b354dfcb048c8d68543699fc8ac6a25e1c8e04 Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Mon, 18 Feb 2013 11:33:59 -0500 Subject: [PATCH] Strip configured fields during import/overlay Records coming in from the staff client may contain junk tags, and we have a mechanism (not yet exposed) for defining such junk tags in an inheritable way. This applies said junk-tag removal based on said configuration. The configuration interface is yet to come. Signed-off-by: Mike Rylander Signed-off-by: Bill Erickson Signed-off-by: Mike Rylander --- .../perlmods/lib/OpenILS/Application/Cat.pm | 5 ++++ .../lib/OpenILS/Application/Cat/BibCommon.pm | 24 +++++++++++++++++++ .../lib/OpenILS/Application/Vandelay.pm | 19 +++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Cat.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Cat.pm index 1c397e1e1b..8bc2cc95cf 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Cat.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Cat.pm @@ -114,6 +114,8 @@ sub create_record_xml { my( $user_obj, $evt ) = $U->checksesperm($login, 'CREATE_MARC'); return $evt if $evt; + $$oargs{import_location} = $e->requestor->ws_ou; + $logger->activity("user ".$user_obj->id." creating new MARC record"); my $meth = $self->method_lookup("open-ils.cat.biblio.record.xml.import"); @@ -168,6 +170,8 @@ sub biblio_record_replace_marc { $oargs = {}; } + $$oargs{import_location} = $e->requestor->ws_ou; + my $res = OpenILS::Application::Cat::BibCommon->biblio_record_replace_marc( $e, $recid, $newxml, $source, $fix_tcn, $oargs); @@ -419,6 +423,7 @@ sub biblio_record_xml_import { } else { $oargs = {}; } + $$oargs{import_location} = $e->requestor->ws_ou; my $record = OpenILS::Application::Cat::BibCommon->biblio_record_xml_import( $e, $xml, $source, $auto_tcn, $oargs); diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Cat/BibCommon.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Cat/BibCommon.pm index 65c3e0fabd..babe2e082f 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Cat/BibCommon.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Cat/BibCommon.pm @@ -66,6 +66,18 @@ sub biblio_record_replace_marc { $marcdoc = __make_marc_doc($newxml); } + my $import_loc = $$override{import_location}; + my $ancestors = $U->get_org_ancestors($import_loc) if ($import_loc); + my $trash_tags = $e->search_vandelay_import_bib_trash_fields({owner => $ancestors}) if ($ancestors); + + if ($trash_tags && @$trash_tags) { + for my $tag (@$trash_tags) { + for my $node ($marcdoc->findnodes('//*[@tag="'.$tag->field.'"]')) { + $node->parentNode->removeChild($node); + } + } + } + $rec->source(bib_source_from_name($source)) if $source; $rec->editor($e->requestor->id); @@ -95,6 +107,18 @@ sub biblio_record_xml_import { return $evt if $evt; } + my $import_loc = $$override{import_location}; + my $ancestors = $U->get_org_ancestors($import_loc) if ($import_loc); + my $trash_tags = $e->search_vandelay_import_bib_trash_fields({owner => $ancestors}) if ($ancestors); + + if ($trash_tags && @$trash_tags) { + for my $tag (@$trash_tags) { + for my $node ($marcdoc->findnodes('//*[@tag="'.$tag.'"]')) { + $node->parentNode->removeChild($node); + } + } + } + # Silence warnings when _find_tcn_info() fails $tcn ||= ''; $tcn_source ||= ''; diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Vandelay.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Vandelay.pm index 5964361284..776fa776ab 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Vandelay.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Vandelay.pm @@ -16,6 +16,7 @@ use MARC::File::XML ( BinaryEncoding => 'UTF-8' ); use Time::HiRes qw(time); use OpenSRF::Utils::Logger qw/$logger/; use MIME::Base64; +use XML::LibXML; use OpenILS::Const qw/:const/; use OpenILS::Application::AppUtils; use OpenILS::Application::Cat::BibCommon; @@ -915,6 +916,10 @@ sub import_record_list_impl { $rec_class = 'vqar'; } + my $import_loc = $requestor->ws_ou; + my $ancestors = $U->get_org_ancestors($import_loc) if ($import_loc); + my $trash_tags = $editor->search_vandelay_import_bib_trash_fields({owner => $ancestors}) if ($ancestors); + my $new_rec_perm_cache; my @success_rec_ids; for my $rec_id (@$rec_ids) { @@ -951,6 +956,20 @@ sub import_record_list_impl { next; } + if ($trash_tags && @$trash_tags) { + my $marcxml = XML::LibXML->new->parse_string($rec->marc); + if ($marcxml) { + for my $tag (@$trash_tags) { + for my $node ($marcxml->findnodes('//*[@tag="'.$tag->field.'"]')) { + $node->parentNode->removeChild($node); + } + } + + $rec->marc( $U->entityize( $marcdoc->documentElement->toString ) ); + $e->$update_func($rec); + } + } + $$report_args{rec} = $rec; $queues{$rec->queue} = 1; -- 2.43.2