From: Fredric T Parks Date: Wed, 5 Feb 2014 00:43:11 +0000 (-0800) Subject: Support for traditional Boolean operators LP 1152863 X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=b6a80c0f296d61a5c81a8f4196db70b1f698a13a;p=working%2FEvergreen.git Support for traditional Boolean operators LP 1152863 Added boolean search tab to advanced search page in a way that utilizes the ability to set operators in query parser Signed-off-by: Fredrick T Parks modified: Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm modified: Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm modified: Open-ILS/src/templates/opac/advanced.tt2 modified: Open-ILS/src/templates/opac/css/style.css.tt2 new file: Open-ILS/src/templates/opac/parts/advanced/boolean.tt2 modified: Open-ILS/src/templates/opac/parts/config.tt2 modified: Open-ILS/src/templates/opac/parts/header.tt2 modified: Open-ILS/src/templates/opac/parts/searchbar.tt2 --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm index 6f29126a6c..1089cae3ad 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm @@ -3204,6 +3204,14 @@ sub query_parser_fts_wrapper { _initialize_parser($parser) unless $parser->initialization_complete; + #If this is a boolean search set the human readable operators + #XXX hard coded to just use english for now. Needs to be able to take forign keywords + if($args{"_boolean"} == "true") { + $parser->operator("and", " and "); + $parser->operator("or", " or "); + $parser->operator("disallowed", " not "); + } + if (! scalar( keys %{$args{searches}} )) { die "No search arguments were passed to ".$self->api_name; } diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm index 00c4c49c83..2a8dfd1391 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm @@ -398,6 +398,11 @@ sub load_rresults { # the query string, not special args. my $args = {'limit' => $limit, 'offset' => $offset}; + #if this is a boolean search add flag so operators can be set later + if($cgi->param("_boolean")) { + $args->{"_boolean"} = "true"; + } + if ($tag_circs) { $args->{tag_circulated_records} = 1; $args->{authtoken} = $self->editor->authtoken; diff --git a/Open-ILS/src/templates/opac/advanced.tt2 b/Open-ILS/src/templates/opac/advanced.tt2 index 904ee1a13b..daee126006 100644 --- a/Open-ILS/src/templates/opac/advanced.tt2 +++ b/Open-ILS/src/templates/opac/advanced.tt2 @@ -26,6 +26,11 @@ [% l('Expert Search') %] + [% IF search.boolean_enabled == "true" %] + [% l('Boolean Search') %] + [% END %] @@ -38,6 +43,8 @@ [% INCLUDE "opac/parts/advanced/numeric.tt2" %] [% ELSIF pane == 'expert' %] [% INCLUDE "opac/parts/advanced/expert.tt2" %] + [% ELSIF pane == 'boolean' %] + [% INCLUDE "opac/parts/advanced/boolean.tt2" %] [% END %]
diff --git a/Open-ILS/src/templates/opac/css/style.css.tt2 b/Open-ILS/src/templates/opac/css/style.css.tt2 index e57741fdb0..2e0eaea190 100644 --- a/Open-ILS/src/templates/opac/css/style.css.tt2 +++ b/Open-ILS/src/templates/opac/css/style.css.tt2 @@ -321,7 +321,7 @@ for now until a better color is picked - if needed. padding-left: 10px !important; } -#adv_search.on, #num_search.on, #expert_search.on { +#adv_search.on, #num_search.on, #expert_search.on, #boolean_search.on { color: [% css_colors.accent_darker %]; background: [% css_colors.background %]; text-decoration: none; diff --git a/Open-ILS/src/templates/opac/parts/advanced/boolean.tt2 b/Open-ILS/src/templates/opac/parts/advanced/boolean.tt2 new file mode 100644 index 0000000000..05c8b033bd --- /dev/null +++ b/Open-ILS/src/templates/opac/parts/advanced/boolean.tt2 @@ -0,0 +1,126 @@ +[% + PROCESS "opac/parts/misc_util.tt2"; + PROCESS get_library; + query = CGI.param('boolean_query'); +%] +
+ + + +
diff --git a/Open-ILS/src/templates/opac/parts/config.tt2 b/Open-ILS/src/templates/opac/parts/config.tt2 index bd4f77cd25..516118eff9 100644 --- a/Open-ILS/src/templates/opac/parts/config.tt2 +++ b/Open-ILS/src/templates/opac/parts/config.tt2 @@ -129,6 +129,12 @@ search.adv_config = [ #search.default_adv_select_height = 4; ############################################################################## +# Define if the boolean search tab is enabled on the +# advanced search page + +search.boolean_enabled = "true"; + +############################################################################## # 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 diff --git a/Open-ILS/src/templates/opac/parts/header.tt2 b/Open-ILS/src/templates/opac/parts/header.tt2 index 7c9b95fbc5..c622831c38 100644 --- a/Open-ILS/src/templates/opac/parts/header.tt2 +++ b/Open-ILS/src/templates/opac/parts/header.tt2 @@ -11,6 +11,7 @@ is_advanced = CGI.param("_adv").size; is_special = CGI.param("_special").size; + is_boolean = CGI.param("boolean").size; #variables to use to remove parameters via mkurk expert_search_parms = ['tag','subfield','term','_special']; diff --git a/Open-ILS/src/templates/opac/parts/searchbar.tt2 b/Open-ILS/src/templates/opac/parts/searchbar.tt2 index a7bdb90423..366919bbda 100644 --- a/Open-ILS/src/templates/opac/parts/searchbar.tt2 +++ b/Open-ILS/src/templates/opac/parts/searchbar.tt2 @@ -90,6 +90,13 @@ %] ] [% END %] + [% IF (is_boolean) %] + + [% END %]