From 182bed18ba426e33a5d631382fc66d68b2b20f33 Mon Sep 17 00:00:00 2001 From: Dan Scott Date: Wed, 14 Sep 2011 16:02:14 -0400 Subject: [PATCH] Add and use a patron search that overrides opt-in invisibility Something like this is required for API calls that need to operate against a number of libraries in a given instance that are using opt-in; otherwise, attempts to search for users will fail and you may end up creating near-duplicates etc. The implementation adds an open-ils.actor.search.patron.advanced.opt_in_override method to open-ils.actor, which, if invoked, checks to see if the caller has the OPT_IN_OVERRIDE permission. If so, then the crazy_search ignores the normal opt-in limits and searches all pertinent users in the database. As a global permission, OPT_IN_OVERRIDE is a blunt instrument. Others might want to put together a more refined version that uses OU depths to define boundaries. Signed-off-by: Dan Scott Conflicts: Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/actor.pm --- Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm | 17 ++++++++++++++++- .../lib/OpenILS/Application/Storage/Publisher/actor.pm | 3 ++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm index 50cff13551..42952aaffa 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm @@ -1309,10 +1309,16 @@ __PACKAGE__->register_method( method => "patron_adv_search", api_name => "open-ils.actor.patron.search.advanced" ); +__PACKAGE__->register_method( + method => "patron_adv_search", + api_name => "open-ils.actor.patron.search.advanced.opt_in_override" +); sub patron_adv_search { my( $self, $client, $auth, $search_hash, $search_limit, $search_sort, $include_inactive, $search_ou ) = @_; + my $ignore_opt_in = 0; + my $e = new_editor(authtoken=>$auth); return $e->event unless $e->checkauth; return $e->event unless $e->allowed('VIEW_USER'); @@ -1320,10 +1326,19 @@ sub patron_adv_search { # depth boundary outside of which patrons must opt-in, default to 0 my $opt_boundary = 0; $opt_boundary = $U->ou_ancestor_setting_value($e->requestor->ws_ou,'org.patron_opt_boundary') if user_opt_in_enabled($self); + + # Override opt-in permissions + if ($self->api_name =~ /opt_in_override/) { + if ($e->allowed('OPT_IN_OVERRIDE')) { + $ignore_opt_in = 1; + } + } return $U->storagereq( "open-ils.storage.actor.user.crazy_search", $search_hash, - $search_limit, $search_sort, $include_inactive, $e->requestor->ws_ou, $search_ou, $opt_boundary); + $search_limit, $search_sort, $include_inactive, + $e->requestor->ws_ou, $search_ou, $opt_boundary, $ignore_opt_in + ); } diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/actor.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/actor.pm index d41dfcc735..27440dd115 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/actor.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/actor.pm @@ -641,6 +641,7 @@ sub patron_search { my $ws_ou = shift; my $search_org = shift || $ws_ou; my $opt_boundary = shift || 0; + my $opt_in_override = shift; my $penalty_sort = 0; @@ -761,7 +762,7 @@ sub patron_search { my $descendants = "actor.org_unit_descendants($search_org)"; my $opt_in_where = ''; - if (lc($strict_opt_in) eq 'true') { + if (lc($strict_opt_in) eq 'true' && (!$opt_in_override)) { $opt_in_where = "AND ("; $opt_in_where .= "EXISTS (select id FROM $opt_in_table "; $opt_in_where .= " WHERE org_unit in (select (actor.org_unit_ancestors($ws_ou)).id)"; -- 2.11.0