{flesh => 1, flesh_fields => {mmr => ['master_record']}}],
{substream => 1}
);
+
for my $id (@targets) {
my ($mr) = grep {$_->id eq $id} @$mrecs;
push(@hold_data, $data_filler->({
target => $mr,
- record => $mr->master_record
+ record => $mr->master_record,
+ metarecord_attrs => $self->get_mr_ccvms($mr->id)
}));
}
-
- # see which formats are available for the selected records.
- # fetches search_label, value for each ccvm linked to the
- # mr holds format attribute, for every record within this MR.
- $ctx->{metarecord_formats} = $e->json_query({
- select => {ccvm => ['id', 'value', 'search_label']},
- from => {mraf => {
- cgf => {
- fkey => 'attr',
- field => 'value',
- filter => {name => 'opac.metarecord.holds.format_attr'}
- },
- ccvm => {
- fkey => 'attr',
- field => 'ctype'
- }
- }},
- where => {'+mraf' => {id => \@targets}}
- });
},
T => sub {
my $recs = $e->batch_retrieve_biblio_record_entry(\@targets, {substream => 1});
}
}
+# 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) = @_;
+ my $e = $self->editor;
+
+ my $bre_ids =
+ $e->search_metabib_metarecord_source_map({metarecord => $mr_id});
+ $bre_ids = [map {$_->source} @$bre_ids];
+
+ my $base_query = {
+ select => {ccvm => [{column => 'id', transform => 'distinct'}]},
+ from => {mraf => {
+ ccvm => {
+ fkey => 'attr',
+ field => 'ctype',
+ filter => {code => {'=' => {'+mraf' => 'value'}}}
+ }
+ }},
+ where => {'+mraf' => {id => $bre_ids}}
+ };
+
+ $base_query->{where}->{'+mraf'}->{attr} = 'item_lang';
+ my $langs = $e->json_query($base_query);
+
+ # the attr type used for format selection is configurable
+ delete $base_query->{where}->{'+mraf'}->{attr};
+ $base_query->{from}->{mraf}->{cgf} = {
+ fkey => 'attr',
+ field => 'value',
+ filter => {name => 'opac.metarecord.holds.format_attr'}
+ };
+ my $formats = $e->json_query($base_query);
+
+ return {
+ langs => [map { $_->{id} } @$langs],
+ formats => [map { $_->{id} } @$formats]
+ };
+}
+
+
+
sub fetch_user_circs {
my $self = shift;
my $flesh = shift; # flesh bib data, etc.
--- /dev/null
+[%#
+Draws the format multi-select and the language multi-select for
+limiting the set of desired records for a given metarecord.
+%]
+
+[% BLOCK metarecord_hold_filters_selector;
+ format_ccvms = [];
+ lang_ccvms = [];
+ # some CCVMs have search_labels, some use the value as the label
+ # instead. Accommodate both.
+ FOR ccvm_id IN metarecord_attrs.formats;
+ ccvm = ctx.get_ccvm(ccvm_id);
+ IF NOT ccvm.search_label; ccvm.search_label(ccvm.value); END;
+ format_ccvms.push(ccvm);
+ END;
+ FOR ccvm_id IN metarecord_attrs.langs;
+ ccvm = ctx.get_ccvm(ccvm_id);
+ IF NOT ccvm.search_label; ccvm.search_label(ccvm.value); END;
+ lang_ccvms.push(ccvm);
+ END;
+%]
+
+<style>
+ /* TODO: MOVE ME */
+ .metarecord_filters {
+ width: 75%;
+ padding: 5px;
+ margin-top: 5px;
+ border-bottom: 1px solid #333;
+ border-top: 1px solid #333;
+ }
+ .metarecord_filter_container {
+ float : left;
+ margin-right: 10px;
+ }
+ .metarecord_filter_container select {
+ padding: 5px;
+ }
+ .metarecord_filter_header {
+ padding: 5px;
+ }
+</style>
+
+<div class="metarecord_filters">
+ <div class="metarecord_filter_container">
+ <div class="metarecord_filter_header">
+ <div>[% l('Select your desired format(s).') %]</div>
+ </div>
+ <select multiple='multiple' name="metarecord_formats">
+ [% FOR ccvm IN format_ccvms.sort('search_label') %]
+ <option value="[% ccvm.code %]">
+ [% ccvm.search_label | html %]
+ </option>
+ [% END %]
+ </select>
+ <input type="hidden"
+ name="metarecord_format_attr" value="[% format_ccvms.0.ctype %]"/>
+ </div>
+ <div class="metarecord_filter_container">
+ <div class="metarecord_filter_header">
+ [% l('Select your desired language(s)') %]
+ </div>
+ <select multiple='multiple' name="metarecord_langs">
+ [% FOR lang_ccvm IN lang_ccvms.sort('search_label') %]
+ <option value="[% lang_ccvm.code %]">
+ [% lang_ccvm.search_label | html %]
+ </option>
+ [% END %]
+ </select>
+ </div>
+ <div class="clear-both"> </div>
+</div>
+[% END # metarecord_hold_filters_selector %]
[% PROCESS "opac/parts/misc_util.tt2";
PROCESS "opac/parts/hold_error_messages.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_attrs.formats.size OR # should this be > 1 also?
+ hdata.metarecord_attrs.langs.size > 1;
+ PROCESS metarecord_hold_filters_selector
+ metarecord_attrs=hdata.metarecord_attrs;
+ END %]
</td>
</tr>
[% END %]