diff --git a/library/Class/WebService/SIGB/AbstractRESTService.php b/library/Class/WebService/SIGB/AbstractRESTService.php index 6578c7e7a8d548034e613e8d587912d18eeb31e6..20b8edf2eb0909b560079b5dc2e9cfc64de69612 100644 --- a/library/Class/WebService/SIGB/AbstractRESTService.php +++ b/library/Class/WebService/SIGB/AbstractRESTService.php @@ -107,6 +107,15 @@ abstract class Class_WebService_SIGB_AbstractRESTService extends Class_WebServic } + /** + * Retourne le nom du tag utilisé pour les messages d'erreurs dans les réponses XML / ILSDI + * @return string + */ + public function ilsdiGetErrorTag() { + return 'error'; + } + + /** * @param array $params * @param Class_WebService_SIGB_AbstractILSDIPatronInfoReader $reader @@ -121,7 +130,7 @@ abstract class Class_WebService_SIGB_AbstractRESTService extends Class_WebServic if (0 === strpos($xml, '<html>')) return $emprunteur; - if ($this->_getTagData($xml, 'error')) + if ($this->_getTagData($xml, $this->ilsdiGetErrorTag())) return $emprunteur; return $reader @@ -147,12 +156,38 @@ abstract class Class_WebService_SIGB_AbstractRESTService extends Class_WebServic if (0 === strpos($xml, '<html>')) return $this->_getNetworkError(); - if ('' != $this->_getTagData($xml, $error_tag)) + if ('' != $this->_getTagData($xml, $this->ilsdiGetErrorTag())) return $this->_error('Réservation impossible'); return $this->_success(); } + + + + + /** + * @param array $params + */ + public function ilsdiCancelHold($params) { + $params = array_merge(array('service' => 'CancelHold'), $params); + + try { + $xml = $this->httpGet($params); + } catch (Exception $e) { + return $this->_getNetworkError(); + } + + if (0 === strpos($xml, '<html>')) + return $this->_getNetworkError(); + + if ('' != $this->_getTagData($xml, 'error')) + return $this->_error('Annulation impossible'); + + return $this->_success(); + } + + /** diff --git a/library/Class/WebService/SIGB/BiblixNet/Service.php b/library/Class/WebService/SIGB/BiblixNet/Service.php index b2a309e51cd592c0b2616c9ec36e5c1d7f0da69a..beed5dc18b2e4dd312e7d3f030c951f9384ab303 100644 --- a/library/Class/WebService/SIGB/BiblixNet/Service.php +++ b/library/Class/WebService/SIGB/BiblixNet/Service.php @@ -68,7 +68,11 @@ class Class_Webservice_SIGB_BiblixNet_Service extends Class_WebService_SIGB_Abst * @param int $reservation_id * @return array */ - public function supprimerReservation($user, $reservation_id) {} + public function supprimerReservation($user, $reservation_id) { + return $this->ilsdiCancelHold(array( + 'patronId' => $user->getIdSigb(), + 'itemId' => $reservation_id)); + } /** diff --git a/library/Class/WebService/SIGB/Koha/Service.php b/library/Class/WebService/SIGB/Koha/Service.php index 59cdf4588cad73e37a87f34e550230b06d7fd00d..ab3974c8a4bc575b9ae799ef749d00ea6f4ba4f4 100644 --- a/library/Class/WebService/SIGB/Koha/Service.php +++ b/library/Class/WebService/SIGB/Koha/Service.php @@ -56,6 +56,15 @@ class Class_WebService_SIGB_Koha_Service extends Class_WebService_SIGB_AbstractR } + /** + * Retourne le nom du tag utilisé pour les messages d'erreurs dans les réponses XML / ILSDI + * @return string + */ + public function ilsdiGetErrorTag() { + return 'code'; + } + + /** * @param Class_Users $user * @param Class_Exemplaire $exemplaire @@ -77,6 +86,7 @@ class Class_WebService_SIGB_Koha_Service extends Class_WebService_SIGB_AbstractR * @return array */ public function supprimerReservation($user, $reservation_id) { + $emprunteur_id = $this->_authenticate($user); $xml_cancel = $this->httpGet(array('service' => 'CancelHold', diff --git a/library/Class/WebService/SIGB/Nanook/Service.php b/library/Class/WebService/SIGB/Nanook/Service.php index 3ce261f64947f4300def47a9e3a8150aaa88a34f..b967872e9a4fb1d508f2beaeaee5956a623f7d43 100644 --- a/library/Class/WebService/SIGB/Nanook/Service.php +++ b/library/Class/WebService/SIGB/Nanook/Service.php @@ -81,21 +81,9 @@ class Class_Webservice_SIGB_Nanook_Service extends Class_WebService_SIGB_Abstrac * @return array */ public function supprimerReservation($user, $reservation_id) { - try { - $xml = $this->httpGet(array('service' => 'CancelHold', - 'patronId' => $user->getIdSigb(), - 'itemId' => $reservation_id)); - } catch (Exception $e) { - return $this->_getNetworkError(); - } - - if (0 === strpos($xml, '<html>')) - return $this->_getNetworkError(); - - if ('' != $this->_getTagData($xml, 'error')) - return $this->_error('Annulation impossible'); - - Return $this->_success(); + return $this->ilsdiCancelHold(array( + 'patronId' => $user->getIdSigb(), + 'itemId' => $reservation_id)); } diff --git a/tests/library/Class/WebService/SIGB/BiblixNetFixtures.php b/tests/library/Class/WebService/SIGB/BiblixNetFixtures.php index 29fcd8891ac5ff4bfc529f7674e54e9c9b795064..365725c6d9e890b828ffcfd9f6bfcd4a79355d19 100644 --- a/tests/library/Class/WebService/SIGB/BiblixNetFixtures.php +++ b/tests/library/Class/WebService/SIGB/BiblixNetFixtures.php @@ -132,4 +132,11 @@ class BiblixNetFixtures { return '<?xml version="1.0" encoding="UTF-8"?> <HoldTitle></HoldTitle>'; } + + + /** @return string */ + public static function xmlCancelHoldSuccess() { + return '<?xml version="1.0" encoding="UTF-8"?> + <CancelHold></CancelHold>'; + } } diff --git a/tests/library/Class/WebService/SIGB/BiblixNetTest.php b/tests/library/Class/WebService/SIGB/BiblixNetTest.php index 3fc104f1fc1645dc7811044f851312777b697452..0007b2ac1255fa4085936156f2ec3de59624387c 100644 --- a/tests/library/Class/WebService/SIGB/BiblixNetTest.php +++ b/tests/library/Class/WebService/SIGB/BiblixNetTest.php @@ -240,7 +240,7 @@ class BiblixNetOperationsTest extends BiblixNetTestCase { $this->_mock_web_client ->whenCalled('open_url') ->with('http://mediathequewormhout.biblixnet.com/exporte_afi/?service=HoldTitle&patronId=34&bibId=1432&pickupLocation=Mediatheque') - ->answers(BiblixNetFixtures::xmlGetPatronJustinTicou()) + ->answers(BiblixNetFixtures::xmlHoldTitleSuccess()) ->beStrict(); @@ -251,6 +251,22 @@ class BiblixNetOperationsTest extends BiblixNetTestCase { 'Mediatheque' )); } + + + /** @test */ + public function supprimerReservationWithoutErrorShouldReturnSuccess() { + $this->_mock_web_client + ->whenCalled('open_url') + ->with('http://mediathequewormhout.biblixnet.com/exporte_afi/?service=CancelHold&patronId=1&itemId=987') + ->answers(BiblixNetFixtures::xmlCancelHoldSuccess()) + ->beStrict(); + + $this->assertEquals(array('statut' => true, 'erreur' => ''), + $this->_service->supprimerReservation( + Class_Users::getLoader()->newInstance()->setIdSigb('1'), + '987' + )); + } }