From 41e5564a2e9341cc854062eaa43d7b7fe064ef87 Mon Sep 17 00:00:00 2001 From: miker Date: Wed, 18 Jun 2008 16:19:09 +0000 Subject: [PATCH] add copy locations as a search filter git-svn-id: svn://svn.open-ils.org/ILS/trunk@9846 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../Application/Storage/Publisher/metabib.pm | 9 +++++++- .../src/sql/Pg/300.schema.staged_search.sql | 21 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/metabib.pm b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/metabib.pm index 93843349f4..0beac85852 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/metabib.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/metabib.pm @@ -2346,12 +2346,17 @@ sub staged_fts { die "No search arguments were passed to ".$self->api_name; } - my (@statuses,@types,@forms,@lang,@aud,@lit_form,@vformats,@bib_level); + my (@statuses,@locations,@types,@forms,@lang,@aud,@lit_form,@vformats,@bib_level); if ($args{available}) { @statuses = (0,7); } + if (my $s = $args{locations}) { + $s = [$s] if (!ref($s)); + @locations = @$s; + } + if (my $s = $args{statuses}) { $s = [$s] if (!ref($s)); @statuses = @$s; @@ -2444,6 +2449,7 @@ sub staged_fts { my $param_depth = $args{depth}; $param_depth = 'NULL' unless (defined($param_depth) and length($param_depth) > 0 ); my $param_searches = OpenSRF::Utils::JSON->perl2JSON( \%stored_proc_search_args ); $param_searches =~ s/\$//go; $param_searches = '$$'.$param_searches.'$$'; my $param_statuses = '$${' . join(',', map { s/\$//go; "\"$_\""} @statuses) . '}$$'; + my $param_locations = '$${' . join(',', map { s/\$//go; "\"$_\""} @locations) . '}$$'; my $param_audience = '$${' . join(',', map { s/\$//go; "\"$_\"" } @aud) . '}$$'; my $param_language = '$${' . join(',', map { s/\$//go; "\"$_\""} @lang) . '}$$'; my $param_lit_form = '$${' . join(',', map { s/\$//go; "\"$_\"" } @lit_form) . '}$$'; @@ -2468,6 +2474,7 @@ sub staged_fts { $param_depth, $param_searches, $param_statuses, + $param_locations, $param_audience, $param_language, $param_lit_form, diff --git a/Open-ILS/src/sql/Pg/300.schema.staged_search.sql b/Open-ILS/src/sql/Pg/300.schema.staged_search.sql index ec5bdd32c5..c663f5b894 100644 --- a/Open-ILS/src/sql/Pg/300.schema.staged_search.sql +++ b/Open-ILS/src/sql/Pg/300.schema.staged_search.sql @@ -49,6 +49,7 @@ CREATE OR REPLACE FUNCTION search.staged_fts ( param_depth INT, param_searches TEXT, -- JSON hash, to be turned into a resultset via search.parse_search_args param_statuses INT[], + param_locations INT[], param_audience TEXT[], param_language TEXT[], param_lit_form TEXT[], @@ -429,6 +430,26 @@ BEGIN END IF; + IF param_locations IS NOT NULL AND array_upper(param_locations, 1) > 0 THEN + + PERFORM 1 + FROM asset.call_number cn + JOIN asset.copy cp ON (cp.call_number = cn.id) + WHERE NOT cn.deleted + AND NOT cp.deleted + AND cp.location IN ( SELECT * FROM search.explode_array( param_locations ) ) + AND cn.record IN ( SELECT * FROM search.explode_array( core_result.records ) ) + AND cp.circ_lib IN ( SELECT * FROM search.explode_array( search_org_list ) ) + LIMIT 1; + + IF NOT FOUND THEN + -- RAISE NOTICE ' % were all copy_location-excluded ... ', core_result.records; + excluded_count := excluded_count + 1; + CONTINUE; + END IF; + + END IF; + IF staff IS NULL OR NOT staff THEN PERFORM 1 -- 2.43.2