diff --git a/VERSIONS_HOTLINE/86381 b/VERSIONS_HOTLINE/86381 new file mode 100644 index 0000000000000000000000000000000000000000..59c5a5449e94a90c94bf8b32109721ba5936ca4b --- /dev/null +++ b/VERSIONS_HOTLINE/86381 @@ -0,0 +1 @@ + - ticket #86381 : SIGB Nanook : Correction de l'authentification par SIGB uniquement \ No newline at end of file diff --git a/library/Class/WebService/SIGB/Nanook/Service.php b/library/Class/WebService/SIGB/Nanook/Service.php index d474d356220777977b0b57bffb85c7b012e3ab32..616186c94f549ce454bb8e4f618efd37449f16e3 100644 --- a/library/Class/WebService/SIGB/Nanook/Service.php +++ b/library/Class/WebService/SIGB/Nanook/Service.php @@ -107,19 +107,34 @@ class Class_Webservice_SIGB_Nanook_Service extends Class_WebService_SIGB_Abstrac * @return Class_WebService_SIGB_Emprunteur */ public function getEmprunteur($user) { - if (!$this->ilsdiAuthenticatePatron($user)) + if (!$user + || (!$patron_id = $this->_patronIdFromUser($user))) return Class_WebService_SIGB_Emprunteur::nullInstance(); - $emprunteur= $this->ilsdiGetPatronInfo(['patronId' => $user->getIdSigb()], - Class_WebService_SIGB_Nanook_PatronInfoReader::newInstance()); + + $emprunteur = $this->ilsdiGetPatronInfo(['patronId' => $user->getIdSigb()], + Class_WebService_SIGB_Nanook_PatronInfoReader::newInstance()); if (!$emprunteur->getCodeBarres()) $emprunteur->setCodeBarres($user->getLogin()); $emprunteur->setPassword($user->getPassword()); + return $emprunteur; } + protected function _patronIdFromUser($user) { + $patron_id = Class_Users::isLogged($user) + ? $user->getIdSigb() + : ''; + + if (!$patron_id && $this->ilsdiAuthenticatePatron($user)) + $patron_id = $user->getIdSigb(); + + return $patron_id; + } + + public function getUserAnnexe($user) { return $user->id_site; } diff --git a/tests/library/Class/WebService/SIGB/NanookTest.php b/tests/library/Class/WebService/SIGB/NanookTest.php index be53739a3d0b0833d0495ef77a7145bb47594f8c..53716110fefc694feff85f2dbe62a20d482a9ca9 100644 --- a/tests/library/Class/WebService/SIGB/NanookTest.php +++ b/tests/library/Class/WebService/SIGB/NanookTest.php @@ -888,6 +888,35 @@ class NanookGetEmprunteurAuthenticateTest extends NanookTestCase { $this->assertEmpty($emprunteur->getPassword()); } + + + /** @test */ + public function withLoginThroughSigbOnlyAndAlreadyLoggedShouldNotAuthenticatePatron() { + $this->_mock_web_client + ->whenCalled('open_url') + ->with('http://localhost:8080/afi_Nanook/ilsdi/service/GetPatronInfo/patronId/999') + ->answers(NanookFixtures::xmlGetPatronError()); + + Class_AdminVar::set('LOGIN_THROUGH_SIGB_ONLY', '1'); + + $user = $this->fixture('Class_Users', + ['id' => 98734, + 'id_site' => 3, + 'idabon' => 'A-00001', + 'id_sigb' => '999', + 'login' => '90175000410218', + 'password' => '', + 'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB, + ]); + + ZendAfi_Auth::getInstance()->logUser($user); + + $emprunteur = $this->_service->getEmprunteur($user); + + $this->assertTrue($this->_mock_web_client + ->methodHasBeenCalledWithParams('open_url', + ['http://localhost:8080/afi_Nanook/ilsdi/service/GetPatronInfo/patronId/999'])); + } }