diff --git a/config/vufind/VoyagerRestful.ini b/config/vufind/VoyagerRestful.ini index 261246515ee22043d9aa873880dddef1c24cef97..4610a738efcf4b0ae32347d7d0b2ae989b541590 100644 --- a/config/vufind/VoyagerRestful.ini +++ b/config/vufind/VoyagerRestful.ini @@ -174,6 +174,9 @@ disableAvailabilityCheckForRequestGroups = "15:19:21:32" ;helpText = "Help text for all languages." ;helpText[en-gb] = "Help text for English language." +; By default a request can be canceled even if the item is available for pickup. +; Uncomment this to disable canceling of available requests. +;allowCancelingAvailableRequests = false ; This section controls call slip behavior (storage retrieval requests in VuFind). ; To enable, uncomment (at minimum) the HMACKeys and extraFields settings below. diff --git a/module/VuFind/src/VuFind/Controller/Plugin/Holds.php b/module/VuFind/src/VuFind/Controller/Plugin/Holds.php index ecb2d1b2d95afb9dd52ebfd5fd1fb80c1af38f3d..1b50dcfb1df79d1c1126077d72e84d1eb1271323 100644 --- a/module/VuFind/src/VuFind/Controller/Plugin/Holds.php +++ b/module/VuFind/src/VuFind/Controller/Plugin/Holds.php @@ -60,9 +60,11 @@ class Holds extends AbstractRequestBase = $catalog->getCancelHoldLink($ilsDetails); } else { // Form Details - $ilsDetails['cancel_details'] - = $catalog->getCancelHoldDetails($ilsDetails); - $this->rememberValidId($ilsDetails['cancel_details']); + $cancelDetails = $catalog->getCancelHoldDetails($ilsDetails); + if ($cancelDetails !== '') { + $ilsDetails['cancel_details'] = $cancelDetails; + $this->rememberValidId($ilsDetails['cancel_details']); + } } } diff --git a/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php b/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php index 4fef5c7e6ce6531c377c7b53dbb2ada6d75e01f1..275f02d5c5b6e00638c55204c7bd65528bc714bd 100644 --- a/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php +++ b/module/VuFind/src/VuFind/ILS/Driver/VoyagerRestful.php @@ -207,6 +207,14 @@ class VoyagerRestful extends Voyager implements \VuFindHttp\HttpServiceAwareInte */ protected $excludedItemLocations; + /** + * Whether it is allowed to cancel a request for an item that is available for + * pickup + * + * @var bool + */ + protected $allowCancelingAvailableRequests; + /** * Constructor * @@ -295,6 +303,9 @@ class VoyagerRestful extends Voyager implements \VuFindHttp\HttpServiceAwareInte = isset($this->config['Holds']['excludedItemLocations']) ? str_replace(':', ',', $this->config['Holds']['excludedItemLocations']) : ''; + $this->allowCancelingAvailableRequests + = isset($this->config['Holds']['allowCancelingAvailableRequests']) + ? $this->config['Holds']['allowCancelingAvailableRequests'] : true; // Establish a namespace in the session for persisting cached data $this->session = new SessionContainer('VoyagerRestful_' . $this->dbName); @@ -1816,7 +1827,7 @@ EOT; try { $sqlStmt = $this->db->prepare($outersql); - $this->debugLogSQL(__FUNCTION__, $outersql, $sql['bind']); + $this->debugSQL(__FUNCTION__, $outersql, $sql['bind']); $sqlStmt->execute($sql['bind']); $sqlRow = $sqlStmt->fetch(PDO::FETCH_ASSOC); return $sqlRow['CNT'] > 0; @@ -2037,8 +2048,10 @@ EOT; */ public function getCancelHoldDetails($holdDetails) { - $cancelDetails = $holdDetails['item_id'] . "|" . $holdDetails['reqnum']; - return $cancelDetails; + if (!$this->allowCancelingAvailableRequests && $holdDetails['available']) { + return ''; + } + return $holdDetails['item_id'] . '|' . $holdDetails['reqnum']; } /**