LP#1464709: teach QP about is_available statuses
authorMike Rylander <mrylander@gmail.com>
Thu, 18 Aug 2016 13:52:20 +0000 (09:52 -0400)
committerMike Rylander <mrylander@gmail.com>
Wed, 24 Aug 2016 16:15:11 +0000 (12:15 -0400)
We look them up, cache them, and use them for the #available modifier.

Signed-off-by: Mike Rylander <mrylander@gmail.com>
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/metabib.pm

index debc865..5fea5c7 100644 (file)
@@ -2818,6 +2818,14 @@ __PACKAGE__->register_method(
     }
 );
 
+my @available_statuses_cache;
+sub available_statuses {
+    if (!scalar(@available_statuses_cache)) {
+       @available_statuses_cache = map { $_->id } config::copy_status->search_where({is_available => 't'});
+    }
+    return @available_statuses_cache;
+}
+
 sub query_parser_fts {
     my $self = shift;
     my $client = shift;
@@ -2992,10 +3000,11 @@ sub query_parser_fts {
 
     # gather statuses, and then forget those if we have an #available modifier
     my @statuses;
-    if (my ($filter) = $query->parse_tree->find_filter('statuses')) {
+    if ($query->parse_tree->find_modifier('available')) {
+        @statuses = available_statuses();
+    } elsif (my ($filter) = $query->parse_tree->find_filter('statuses')) {
         @statuses = @{$filter->args} if (@{$filter->args});
     }
-    @statuses = (0,7,12) if ($query->parse_tree->find_modifier('available'));
 
 
     # gather locations