From ea72a97aaa3cfd6bfb3d41c53dae665756f56507 Mon Sep 17 00:00:00 2001 From: Thomas Berezansky Date: Fri, 13 Apr 2012 17:24:43 -0400 Subject: [PATCH] TPac: Advanced Search Config Move advanced search limiter config to config.tt2. This should, in theory, make it much easier to customize the fields shown for searching in TPac. Also adds the VR Format Coded Value Maps so that we can populate that limiter with them. And removes dojo.css from being loaded - That includes reset stuff that messes with our CSS but doesn't seem to give us any benefit. Signed-off-by: Thomas Berezansky Signed-off-by: Dan Scott --- Open-ILS/src/sql/Pg/002.schema.config.sql | 29 ++++++ Open-ILS/src/sql/Pg/950.data.seed-values.sql | 22 +++++ .../Pg/upgrade/XXXX.vr_format_value_maps.sql | 49 ++++++++++ .../opac/parts/advanced/global_row.tt2 | 2 +- .../templates/opac/parts/advanced/search.tt2 | 90 ++++++++----------- Open-ILS/src/templates/opac/parts/base.tt2 | 1 - Open-ILS/src/templates/opac/parts/config.tt2 | 33 +++++++ .../templates/opac/parts/qtype_selector.tt2 | 2 +- 8 files changed, 171 insertions(+), 57 deletions(-) create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.vr_format_value_maps.sql diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index c3b6197896..ec191cbcbf 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -755,6 +755,35 @@ CREATE VIEW config.lit_form_map AS SELECT code, value, description FROM config.c CREATE VIEW config.audience_map AS SELECT code, value, description FROM config.coded_value_map WHERE ctype = 'audience'; CREATE VIEW config.videorecording_format_map AS SELECT code, value FROM config.coded_value_map WHERE ctype = 'vr_format'; +CREATE OR REPLACE FUNCTION config.update_coded_value_map(in_ctype TEXT, in_code TEXT, in_value TEXT, in_description TEXT DEFAULT NULL, in_opac_visible BOOL DEFAULT NULL, in_search_label TEXT DEFAULT NULL, in_is_simple BOOL DEFAULT NULL, add_only BOOL DEFAULT FALSE) RETURNS VOID AS $f$ +DECLARE + current_row config.coded_value_map%ROWTYPE; +BEGIN + -- Look for a current value + SELECT INTO current_row * FROM config.coded_value_map WHERE ctype = in_ctype AND code = in_code; + -- If we have one.. + IF FOUND THEN + -- Update anything we were handed + current_row.value := COALESCE(current_row.value, in_value); + current_row.description := COALESCE(current_row.description, in_description); + current_row.opac_visible := COALESCE(current_row.opac_visible, in_opac_visible); + current_row.search_label := COALESCE(current_row.search_label, in_search_label); + current_row.is_simple := COALESCE(current_row.is_simple, in_is_simple); + UPDATE config.coded_value_map + SET + value = current_row.value, + description = current_row.description, + opac_visible = current_row.opac_visible, + search_label = current_row.search_label, + is_simple = current_row.is_simple + WHERE id = current_row.id; + ELSIF NOT add_only THEN + INSERT INTO config.coded_value_map(ctype, code, value, description, opac_visible, search_label, is_simple) VALUES + (in_ctype, in_code, in_value, in_description, COALESCE(in_opac_visible, TRUE), in_search_label, COALESCE(in_is_simple, FALSE)); + END IF; +END; +$f$ LANGUAGE PLPGSQL; + CREATE OR REPLACE FUNCTION oils_tsearch2 () RETURNS TRIGGER AS $$ DECLARE normalizer RECORD; diff --git a/Open-ILS/src/sql/Pg/950.data.seed-values.sql b/Open-ILS/src/sql/Pg/950.data.seed-values.sql index f415b40930..ed53b9baef 100644 --- a/Open-ILS/src/sql/Pg/950.data.seed-values.sql +++ b/Open-ILS/src/sql/Pg/950.data.seed-values.sql @@ -6352,6 +6352,28 @@ INSERT INTO config.coded_value_map (id, ctype, code, value) VALUES (535, 'bib_level', 'm', oils_i18n_gettext('535', 'Monograph/Item', 'ccvm', 'value')), (536, 'bib_level', 's', oils_i18n_gettext('536', 'Serial', 'ccvm', 'value')); +INSERT INTO config.coded_value_map(id, ctype, code, value) VALUES + (537, 'vr_format', 'a', oils_i18n_gettext('537', 'Beta', 'ccvm', 'value')), + (538, 'vr_format', 'b', oils_i18n_gettext('538', 'VHS', 'ccvm', 'value')), + (539, 'vr_format', 'c', oils_i18n_gettext('539', 'U-matic', 'ccvm', 'value')), + (540, 'vr_format', 'd', oils_i18n_gettext('540', 'EIAJ', 'ccvm', 'value')), + (541, 'vr_format', 'e', oils_i18n_gettext('541', 'Type C', 'ccvm', 'value')), + (542, 'vr_format', 'f', oils_i18n_gettext('542', 'Quadruplex', 'ccvm', 'value')), + (543, 'vr_format', 'g', oils_i18n_gettext('543', 'Laserdisc', 'ccvm', 'value')), + (544, 'vr_format', 'h', oils_i18n_gettext('544', 'CED videodisc', 'ccvm', 'value')), + (545, 'vr_format', 'i', oils_i18n_gettext('545', 'Betacam', 'ccvm', 'value')), + (546, 'vr_format', 'j', oils_i18n_gettext('546', 'Betacam SP', 'ccvm', 'value')), + (547, 'vr_format', 'k', oils_i18n_gettext('547', 'Super-VHS', 'ccvm', 'value')), + (548, 'vr_format', 'm', oils_i18n_gettext('548', 'M-II', 'ccvm', 'value')), + (549, 'vr_format', 'o', oils_i18n_gettext('549', 'D-2', 'ccvm', 'value')), + (550, 'vr_format', 'p', oils_i18n_gettext('550', '8 mm.', 'ccvm', 'value')), + (551, 'vr_format', 'q', oils_i18n_gettext('551', 'Hi-8 mm.', 'ccvm', 'value')), + (552, 'vr_format', 's', oils_i18n_gettext('552', 'Blu-ray disc', 'ccvm', 'value')), + (553, 'vr_format', 'u', oils_i18n_gettext('553', 'Unknown', 'ccvm', 'value')), + (554, 'vr_format', 'v', oils_i18n_gettext('554', 'DVD', 'ccvm', 'value')), + (555, 'vr_format', 'z', oils_i18n_gettext('555', 'Other', 'ccvm', 'value')), + (556, 'vr_format', ' ', oils_i18n_gettext('556', 'Unspecified', 'ccvm', 'value')); + SELECT SETVAL('config.coded_value_map_id_seq'::TEXT, (SELECT max(id) FROM config.coded_value_map)); -- Trigger Event Definitions ------------------------------------------------- diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.vr_format_value_maps.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.vr_format_value_maps.sql new file mode 100644 index 0000000000..21d9d245bf --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.vr_format_value_maps.sql @@ -0,0 +1,49 @@ +CREATE OR REPLACE FUNCTION config.update_coded_value_map(in_ctype TEXT, in_code TEXT, in_value TEXT, in_description TEXT DEFAULT NULL, in_opac_visible BOOL DEFAULT NULL, in_search_label TEXT DEFAULT NULL, in_is_simple BOOL DEFAULT NULL, add_only BOOL DEFAULT FALSE) RETURNS VOID AS $f$ +DECLARE + current_row config.coded_value_map%ROWTYPE; +BEGIN + -- Look for a current value + SELECT INTO current_row * FROM config.coded_value_map WHERE ctype = in_ctype AND code = in_code; + -- If we have one.. + IF FOUND AND NOT add_only THEN + -- Update anything we were handed + current_row.value := COALESCE(current_row.value, in_value); + current_row.description := COALESCE(current_row.description, in_description); + current_row.opac_visible := COALESCE(current_row.opac_visible, in_opac_visible); + current_row.search_label := COALESCE(current_row.search_label, in_search_label); + current_row.is_simple := COALESCE(current_row.is_simple, in_is_simple); + UPDATE config.coded_value_map + SET + value = current_row.value, + description = current_row.description, + opac_visible = current_row.opac_visible, + search_label = current_row.search_label, + is_simple = current_row.is_simple + WHERE id = current_row.id; + ELSE + INSERT INTO config.coded_value_map(ctype, code, value, description, opac_visible, search_label, is_simple) VALUES + (in_ctype, in_code, in_value, in_description, COALESCE(in_opac_visible, TRUE), in_search_label, COALESCE(in_is_simple, FALSE)); + END IF; +END; +$f$ LANGUAGE PLPGSQL; + +SELECT config.update_coded_value_map('vr_format', 'a', 'Beta', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'b', 'VHS', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'c', 'U-matic', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'd', 'EIAJ', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'e', 'Type C', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'f', 'Quadruplex', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'g', 'Laserdisc', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'h', 'CED videodisc', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'i', 'Betacam', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'j', 'Betacam SP', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'k', 'Super-VHS', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'm', 'M-II', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'o', 'D-2', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'p', '8 mm.', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'q', 'Hi-8 mm.', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 's', 'Blu-ray disc', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'u', 'Unknown', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'v', 'DVD', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', 'z', 'Other', add_only := TRUE); +SELECT config.update_coded_value_map('vr_format', ' ', 'Unspecified', add_only := TRUE); diff --git a/Open-ILS/src/templates/opac/parts/advanced/global_row.tt2 b/Open-ILS/src/templates/opac/parts/advanced/global_row.tt2 index 5171c35ac7..3647fe7f54 100644 --- a/Open-ILS/src/templates/opac/parts/advanced/global_row.tt2 +++ b/Open-ILS/src/templates/opac/parts/advanced/global_row.tt2 @@ -14,7 +14,7 @@ # scalar.merge treats the scalar as a 1-item array WHILE queries.size < rowcount; queries = queries.merge(['']); END; WHILE bools.size < rowcount; bools = bools.merge(['and']); END; - WHILE qtypes.size < rowcount; qtypes = qtypes.merge(['keyword']); END; + WHILE qtypes.size < rowcount; qtypes = qtypes.merge(search.default_qtypes.${qtypes.size} ? [search.default_qtypes.${qtypes.size}] : ['keyword']); END; FOR qtype IN qtypes; c = contains.shift; diff --git a/Open-ILS/src/templates/opac/parts/advanced/search.tt2 b/Open-ILS/src/templates/opac/parts/advanced/search.tt2 index 697f951762..ecc40fbc2a 100644 --- a/Open-ILS/src/templates/opac/parts/advanced/search.tt2 +++ b/Open-ILS/src/templates/opac/parts/advanced/search.tt2 @@ -28,46 +28,24 @@
[% l('Search Filters') %]
- +
+[% + in_row = 0; + FOR adv_chunk IN search.adv_config; + NEXT IF adv_chunk.adv_hide; + IF in_row == 0; + in_row = 1; %] + +[% + END; %] - - - -
- [% l("Item Type") %]
- [% INCLUDE "opac/parts/coded_value_selector.tt2" - attr=["mattype", "item_type"] multiple="multiple" size="4" %] -
- [% l("Language") %]
- [% INCLUDE "opac/parts/coded_value_selector.tt2" - attr="item_lang" multiple="multiple" size="4" %] -
- [% l("Audience") %]
- [% INCLUDE "opac/parts/coded_value_selector.tt2" - attr=["audience_group", "audience"] multiple="multiple" size="4" %] - -
- [% l("Sort Results") %] - - - - -
- [% INCLUDE "opac/parts/filtersort.tt2" - value=CGI.param('sort') class='results_header_sel' %] -
-
- - - - - - - - - - - - - - - - +[% + CASE "sort_selector"; + INCLUDE "opac/parts/filtersort.tt2" + value=CGI.param('sort') class='results_header_sel'; + END; + ELSIF adv_chunk.adv_attr; + INCLUDE "opac/parts/coded_value_selector.tt2" + attr=adv_chunk.adv_attr multiple="multiple" size="4"; + END; %] + +[% + IF adv_chunk.adv_break; + in_row = 0; %] + +[% + END; + END; %]
- [% l("Search Library") %]
- [% PROCESS "opac/parts/org_selector.tt2"; - INCLUDE build_org_selector show_loc_groups=1 %] + [% adv_chunk.adv_label %]
+[% + IF adv_chunk.adv_special; + SWITCH adv_chunk.adv_special; + CASE "lib_selector"; + PROCESS "opac/parts/org_selector.tt2"; + INCLUDE build_org_selector show_loc_groups=1; %]
[% l("Limit to Available") %]
-
- [% l("Publication Year") %]
+[% + CASE "pub_year"; %]
[% l("Shelving Location") %] - -
diff --git a/Open-ILS/src/templates/opac/parts/base.tt2 b/Open-ILS/src/templates/opac/parts/base.tt2 index fc73804a23..c7175b69ee 100644 --- a/Open-ILS/src/templates/opac/parts/base.tt2 +++ b/Open-ILS/src/templates/opac/parts/base.tt2 @@ -13,7 +13,6 @@ [% IF want_dojo %] [% END %] diff --git a/Open-ILS/src/templates/opac/parts/config.tt2 b/Open-ILS/src/templates/opac/parts/config.tt2 index 9d802e301d..813280aeff 100644 --- a/Open-ILS/src/templates/opac/parts/config.tt2 +++ b/Open-ILS/src/templates/opac/parts/config.tt2 @@ -69,4 +69,37 @@ facet.display = [ {facet_class => 'subject', facet_order => ['name', 'geographic']} ]; +############################################################################## +# Define the advanced search limiters and labels. +# adv_label is the (translated) label for the limiter +# adv_attr is an array of possible limiters, the first one that has any +# values will be used +# adv_break will end the current row. If specified with a label/attr it +# will do so *after* that limiter. +# adv_special will drop in a special entry: +# lib_selector will put the search library box (with limit to available) +# pub_year will put the publication year box +# sort_selector will put the sort results selector + +search.adv_config = [ + {adv_label => l("Item Type"), adv_attr => ["mattype", "item_type"]}, + {adv_label => l("Item Form"), adv_attr => "item_form"}, + {adv_label => l("Language"), adv_attr => "item_lang"}, + {adv_label => l("Audience"), adv_attr => ["audience_group", "audience"], adv_break => 1}, + {adv_label => l("Video Format"), adv_attr => "vr_format"}, + {adv_label => l("Bib Level"), adv_attr => "bib_level"}, + {adv_label => l("Literary Form"), adv_attr => "lit_form", adv_break => 1}, + {adv_label => l("Search Library"), adv_special => "lib_selector"}, + {adv_label => l("Publication Year"), adv_special => "pub_year"}, + {adv_label => l("Sort Results"), adv_special => "sort_selector"}, +]; + +############################################################################## +# For each search box the default "query type" value can be specified here +# This is the actual backend value, not the label +# Also note that including more than the row count entries won't add rows +# The first entry should be used as a default for "basic" search as well + +search.default_qtypes = ['keyword','title','author']; + %] diff --git a/Open-ILS/src/templates/opac/parts/qtype_selector.tt2 b/Open-ILS/src/templates/opac/parts/qtype_selector.tt2 index 278111bc09..a56bfe389a 100644 --- a/Open-ILS/src/templates/opac/parts/qtype_selector.tt2 +++ b/Open-ILS/src/templates/opac/parts/qtype_selector.tt2 @@ -8,7 +8,7 @@ {value => "id|bibcn", label => l("Bib Call Number")} ] %]