[$blob->{hold}->{bre_id}], undef, {flesh => '{mra}'}
);
$blob->{marc_xml} = $data[0]->{marc_xml};
+ my $hold = $blob->{hold}->{hold};
+ $blob->{metarecord_ccvms} = $self->get_mr_ccvms($hold->target)
+ if $hold->hold_type eq 'M';
push(@holds, $blob);
}
}
{substream => 1}
);
- # crad.name which defines the set of metarecord formats
- my $format_attr = $ctx->{search_cgf}->(
- name => 'opac.metarecord.holds.format_attr')->[0]->value;
-
for my $id (@targets) {
my ($mr) = grep {$_->id eq $id} @$mrecs;
+ my $avail_attrs = $self->get_mr_ccvms($mr->id);
+ my $format_attr = $avail_attrs->{formats}{attr};
+
# during hold placement submission, the user selects
# which of the available formats/langs are acceptiable.
# Capture those here as the holdable_formats for the MR hold.
1 => \@selected_langs
});
- # TODO: cleanup
- #warn "MR holdable formats: $holdable_formats\n";
- #warn "MR langs" . Dumper($self->get_mr_ccvms($mr->id, 'item_lang')) . "\n";
- #warn "MR formats" . Dumper($self->get_mr_ccvms($mr->id, $format_attr)) . "\n";
-
push(@hold_data, $data_filler->({
target => $mr,
record => $mr->master_record,
- metarecord_formats => $self->get_mr_ccvms($mr->id, $format_attr),
- metarecord_langs => $self->get_mr_ccvms($mr->id, 'item_lang'),
+ metarecord_ccvms => $avail_attrs,
holdable_formats => $holdable_formats
}));
}
# fetches the CCVMs IDs representing available languages and formats
# for the constituent records of the selected metarecord.
sub get_mr_ccvms {
- my ($self, $mr_id, $attr) = @_;
+ my ($self, $mr_id) = @_;
my $e = $self->editor;
+ # crad.name which defines the set of metarecord formats
+ my $format_attr = $self->ctx->{search_cgf}->( # leverage caching
+ name => 'opac.metarecord.holds.format_attr')->[0]->value;
+
my $bre_ids =
$e->search_metabib_metarecord_source_map({metarecord => $mr_id});
$bre_ids = [map {$_->source} @$bre_ids];
filter => {code => {'=' => {'+mraf' => 'value'}}}
}
}},
- where => {'+mraf' => {id => $bre_ids, attr => $attr}}
+ where => {'+mraf' => {id => $bre_ids, attr => ''}}
};
- my $values = $e->json_query($query);
- return [map { $_->{id} } @$values];
+ $query->{where}{'+mraf'}{attr} = 'item_lang';
+ my $langs = $e->json_query($query);
+
+ $query->{where}{'+mraf'}{attr} = $format_attr;
+ my $formats = $e->json_query($query);
+
+ return {
+ formats => {
+ attr => $format_attr,
+ values => [map { $_->{id} } @$formats],
+ },
+ langs => {
+ attr => 'item_lang',
+ values => [map { $_->{id} } @$langs]
+ }
+ };
}
PROCESS "opac/parts/misc_util.tt2";
PROCESS "opac/parts/hold_status.tt2";
PROCESS "opac/parts/org_selector.tt2";
+ PROCESS "opac/parts/metarecord_hold_filters.tt2";
WRAPPER "opac/parts/myopac/base.tt2";
myopac_page = "holds"; # in this case, just for tab coloring.
<strong>[% l('Format:') %]</strong>
<img src="[% attrs.format_icon %]" alt="[% attrs.format_label | html %]" title="[% attrs.format_label | html %]" />
</p>[% END %]
+ [% IF hold.metarecord_ccvms.formats.values.size OR # should this be size > 1
+ hold.metarecord_ccvms.langs.values.size > 1;
+ PROCESS metarecord_hold_filters_selector hold_data=hold;
+ END %]
+
<p>
<strong>[% l('Status') %]</strong>: [% hold.human_status %]
</p>
lang_ccvms = [];
# some CCVMs have search_labels, some use the value as the label
# instead. Accommodate both, starting with search_label
- FOR ccvm_id IN hold_data.metarecord_formats;
+ FOR ccvm_id IN hold_data.metarecord_ccvms.formats.values;
ccvm = ctx.get_ccvm(ccvm_id);
CALL ccvm.search_label(ccvm.value) UNLESS ccvm.search_label;
format_ccvms.push(ccvm);
END;
- FOR ccvm_id IN hold_data.metarecord_langs;
+ FOR ccvm_id IN hold_data.metarecord_ccvms.langs.values;
ccvm = ctx.get_ccvm(ccvm_id);
CALL ccvm.search_label(ccvm.value) UNLESS ccvm.search_label;
lang_ccvms.push(ccvm);
[% PROCESS "opac/parts/misc_util.tt2";
PROCESS "opac/parts/hold_error_messages.tt2";
- PROCESS "opac/parts/metarecord_hold_filters.tt2"
+ PROCESS "opac/parts/metarecord_hold_filters.tt2";
%]
<div id='holds_box' class='canvas' style='margin-top: 6px;'>
<input type='hidden' name='part' value=''/>
[% END %]
[% END %]
- [% IF hdata.metarecord_formats.size OR # should this be size > 1
- hdata.metarecord_langs.size > 1;
+ [% IF hdata.metarecord_ccvms.formats.values.size OR # should this be size > 1
+ hdata.metarecord_ccvms.langs.values.size > 1;
PROCESS metarecord_hold_filters_selector hold_data=hdata;
END %]
</td>