LP#2007880: fix open-ils.actor.ou_setting.ancestor_default
authorGalen Charlton <gmc@equinoxOLI.org>
Mon, 20 Feb 2023 23:35:10 +0000 (18:35 -0500)
committerJason Stephenson <jason@sigio.com>
Tue, 21 Feb 2023 19:25:46 +0000 (14:25 -0500)
This patch fixes a regression introduced by bug 2006749 that
prevented open-ils.actor.ou_setting.ancestor_default from retrieving
the value of a library setting that does not have a view permission
associated with it. It also fixes a similar issue with
open-ils.actor.org_unit.settings.history.retrieve.

To test
-------
[1] Use srfsh to retrieve the value of a library setting
    that does not have a view permission. E.g.,

    request open-ils.actor open-ils.actor.ou_setting.ancestor_default 4, "circ.grace.extend"

    Note that an error is returned.

[2] Apply the patch and repeat step 1. This time, the value of
    the setting should be returned.
[3] Verify that viewing the edit history of a setting in the
    Library Settings admin page works as expected.

Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
Signed-off-by: Jason Stephenson <jason@sigio.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/AppUtils.pm

index 24b7fdb..59a11f6 100644 (file)
@@ -1318,7 +1318,10 @@ sub ou_ancestor_setting {
         my $coust = $e->retrieve_config_org_unit_setting_type([
             $name, {flesh => 1, flesh_fields => {coust => ['view_perm']}}
         ]);
-        return undef unless $self->ou_ancestor_setting_perm_check($orgid, $coust->view_perm->code, $e, $auth)
+        return undef unless defined $coust;
+        if ($coust->view_perm) {
+            return undef unless $self->ou_ancestor_setting_perm_check($orgid, $coust->view_perm->code, $e, $auth);
+        }
     }
 
     my $query = {from => ['actor.org_unit_ancestor_setting', $name, $orgid]};
@@ -1357,9 +1360,10 @@ sub ou_ancestor_setting_log {
             $name, {flesh => 1, flesh_fields => {coust => ['view_perm']}}
         ]);
 
+        my $perm_code = $coust->view_perm ? $coust->view_perm->code : undef;
         my $qorg = $self->ou_ancestor_setting_perm_check(
             $orgid,
-            $coust->view_perm->code,
+            $perm_code,
             $e,
             $auth
         );