signature => {
desc => q/Returns bib record 856 URL content./,
params => [
+ {desc => 'Context org unit ID', type => 'number'},
{desc => 'Record ID or Array of Record IDs', type => 'number or array'}
],
return => {
);
sub record_urls {
- my ($self, $client, $record_ids) = @_;
+ my ($self, $client, $org_id, $record_ids) = @_;
$record_ids = [$record_ids] unless ref $record_ids eq 'ARRAY';
my $e = new_editor();
+ my %uri_orgs = map { lc($_) => 1 } @{$U->get_org_ancestors_sn($org_id)};
+
for my $record_id (@$record_ids) {
my $bib = $e->retrieve_biblio_record_entry($record_id)
or return $e->event;
'//*[@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"]');
+ next if $node->findnodes('./*[@code="w" or @code="n"]');
my $url = {};
my ($label) = $node->findnodes('./*[@code="y"]');
my ($notes) = $node->findnodes('./*[@code="z" or @code="3"]');
+ # For located URIs, at least one of the $9 subfield values
+ # (org unit shortname) must be within our context org unit range.
+ if (my @orgsns = $node->findnodes('./*[@code="9"]')) {
+ next unless grep { $uri_orgs{lc($_->textContent)} } @orgsns;
+ }
+
my $first = 1;
for my $href_node ($node->findnodes('./*[@code="u"]')) {
next unless $href_node;
for my $rec_id (@$record_ids) {
my $response = $is_meta ?
- get_one_metarecord_summary($self, $e, $rec_id) :
- get_one_record_summary($self, $e, $rec_id);
+ get_one_metarecord_summary($self, $e, $org_id, $rec_id) :
+ get_one_record_summary($self, $e, $org_id, $rec_id);
($response->{copy_counts}) = $copy_method->run($org_id, $rec_id);
}
sub get_one_rec_urls {
- my ($self, $e, $bib_id) = @_;
+ my ($self, $e, $org_id, $bib_id) = @_;
my ($resp) = $self->method_lookup(
'open-ils.search.biblio.record.resource_urls.retrieve')
- ->run($bib_id);
+ ->run($org_id, $bib_id);
return $resp->{urls};
}
# Start with a bib summary and augment the data with additional
# metarecord content.
sub get_one_metarecord_summary {
- my ($self, $e, $rec_id) = @_;
+ my ($self, $e, $org_id, $rec_id) = @_;
my $meta = $e->retrieve_metabib_metarecord($rec_id) or return {};
my $maps = $e->search_metabib_metarecord_source_map({metarecord => $rec_id});
my $bre_id = $meta->master_record;
- my $response = get_one_record_summary($e, $bre_id);
- $response->{urls} = get_one_rec_urls($self, $e, $bre_id);
+ my $response = get_one_record_summary($e, $org_id, $bre_id);
+ $response->{urls} = get_one_rec_urls($self, $e, $org_id, $bre_id);
$response->{metabib_id} = $rec_id;
$response->{metabib_records} = [map {$_->source} @$maps];
}
sub get_one_record_summary {
- my ($self, $e, $rec_id) = @_;
+ my ($self, $e, $org_id, $rec_id) = @_;
my $bre = $e->retrieve_biblio_record_entry([$rec_id, {
flesh => 1,
record => $bre,
display => $display,
attributes => $attributes,
- urls => get_one_rec_urls($self, $e, $rec_id)
+ urls => get_one_rec_urls($self, $e, $org_id, $rec_id)
};
}