TPac: improve search depth extraction
authorBill Erickson <berick@esilibrary.com>
Tue, 27 Dec 2011 18:45:02 +0000 (13:45 -0500)
committerDan Scott <dan@coffeecode.net>
Tue, 27 Dec 2011 19:10:04 +0000 (14:10 -0500)
Improves how we determine the depth of a search.  The Order of
operations:

1. Depth encoded within the search query, e.g. depth(2)
2. CGI depth param
3. Default is to match the depth of the searched org unit

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Dan Scott <dan@coffeecode.net>
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Util.pm

index 0db757b..77cfb38 100644 (file)
@@ -108,14 +108,26 @@ sub _prepare_biblio_search {
         $site ||= $ctx->{aou_tree}->()->shortname;
     }
 
-
     my $depth;
-    if (defined($cgi->param('depth')) and not $query =~ /depth\(\d+\)/) {
-        $depth = defined $cgi->param('depth') ?
-            $cgi->param('depth') : $ctx->{get_aou}->($site)->ou_type->depth;
+    if ($query =~ /depth\(\d+\)/) {
+
+        # depth is encoded in the search query
+        ($depth) = ($query =~ /depth\((\d+)\)/);
+
+    } else {
+
+        if (defined $cgi->param('depth')) {
+            $depth = $cgi->param('depth');
+        } else {
+            # no depth specified.  match the depth to the search org
+            my ($org) = grep { $_->shortname eq $site } @{$ctx->{aou_list}->()};
+            $depth = $org->ou_type->depth;
+        }
         $query .= " depth($depth)";
     }
 
+    $logger->info("tpac: site=$site, depth=$depth, query=$query");
+
     return ($query, $site, $depth);
 }
 
index 1199d9a..92cea97 100644 (file)
@@ -114,6 +114,13 @@ sub init_ro_object_cache {
         return $cache{map}{aou}{$org_id};
     };
 
+    # Returns a flat list of aou objects.  often easier to manage than a tree.
+    $ro_object_subs->{aou_list} = sub {
+        $ro_object_subs->{aou_tree}->(); # force the org tree to load
+        return [ values %{$cache{map}{aou}} ];
+    };
+
+
     # turns an ISO date into something TT can understand
     $ro_object_subs->{parse_datetime} = sub {
         my $date = shift;