From dd517d6aa32ae1187ac0a24c225f199477cc09f0 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Thu, 30 Jan 2014 12:16:27 -0500 Subject: [PATCH] LP#1053397 MR holds filter display Signed-off-by: Bill Erickson --- .../lib/OpenILS/WWW/EGCatLoader/Account.pm | 65 +++++++++++++------ .../opac/parts/metarecord_hold_filters.tt2 | 73 ++++++++++++++++++++++ Open-ILS/src/templates/opac/parts/place_hold.tt2 | 6 ++ 3 files changed, 124 insertions(+), 20 deletions(-) create mode 100644 Open-ILS/src/templates/opac/parts/metarecord_hold_filters.tt2 diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm index b950d08630..462d9d492b 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm @@ -783,32 +783,15 @@ sub load_place_hold { {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}); @@ -1086,6 +1069,48 @@ sub attempt_hold_placement { } } +# 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. diff --git a/Open-ILS/src/templates/opac/parts/metarecord_hold_filters.tt2 b/Open-ILS/src/templates/opac/parts/metarecord_hold_filters.tt2 new file mode 100644 index 0000000000..ded56c34c5 --- /dev/null +++ b/Open-ILS/src/templates/opac/parts/metarecord_hold_filters.tt2 @@ -0,0 +1,73 @@ +[%# +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; +%] + + + +
+
+
+
[% l('Select your desired format(s).') %]
+
+ + +
+
+
+ [% l('Select your desired language(s)') %] +
+ +
+
 
+
+[% END # metarecord_hold_filters_selector %] diff --git a/Open-ILS/src/templates/opac/parts/place_hold.tt2 b/Open-ILS/src/templates/opac/parts/place_hold.tt2 index f12cd56b13..9209efecdf 100644 --- a/Open-ILS/src/templates/opac/parts/place_hold.tt2 +++ b/Open-ILS/src/templates/opac/parts/place_hold.tt2 @@ -1,5 +1,6 @@ [% PROCESS "opac/parts/misc_util.tt2"; PROCESS "opac/parts/hold_error_messages.tt2"; + PROCESS "opac/parts/metarecord_hold_filters.tt2" %]
@@ -63,6 +64,11 @@ [% 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 %] [% END %] -- 2.11.0