diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php index a41d244273457e325e35ff4febc32b2e7dee95fe..6a88a4ff82321692032dc79dfa1e081b576d2464 100644 --- a/library/Class/AdminVar.php +++ b/library/Class/AdminVar.php @@ -286,9 +286,9 @@ class Class_AdminVarLoader extends Storm_Model_Loader { protected function _getGlobalVars() { return [ 'FORCE_HTTPS' => Class_AdminVar_Meta::newOnOff($this->_('Forcer l\'accès au site par le protocole HTTPS. Nécessite l\'installation et la configuration appropriée du serveur Web')), - 'LOGIN_THROUGH_SIGB_ONLY' => Class_AdminVar_Meta::newOnOff($this->_('Les abonnées peuvent se connecter uniquement via le webservice SIGB.') + 'LOGIN_THROUGH_SIGB_ONLY' => Class_AdminVar_Meta::newOnOff($this->_('Les abonnées peuvent se connecter uniquement via le webservice du SIGB.') . '<br/>' - . $this->_('Désactive l\'enregistrement des mots de passes abonnés dans la base à la connexion via le webservice'))->bePrivate(), + . $this->_('De plus, à la connexion, l\'enregistrement des mots de passes des abonnés est désactivé.'))->bePrivate(), 'NB_AFFICH_AVIS_PAR_AUTEUR' => Class_AdminVar_Meta::newDefault($this->_('Nombre d\'avis maximum à afficher par utilisateur.')), 'CLEF_GOOGLE_MAP' => Class_AdminVar_Meta::newDefault($this->_('Clef d\'activation pour le plan d\'accès google map. <a target="_blank" href="http://code.google.com/apis/maps/signup.html">Obtenir la clé google map</a>')), 'REGISTER_OK' => Class_AdminVar_Meta::newEncodedData($this->_('Texte visible par l\'internaute après son inscription.')), diff --git a/library/Class/Users.php b/library/Class/Users.php index 332be379f56e885c69043abc620d037aa8eaa3bf..1626de1a33f69d7c40c00c90e2924949f85564ef 100644 --- a/library/Class/Users.php +++ b/library/Class/Users.php @@ -120,7 +120,7 @@ class UsersLoader extends Storm_Model_Loader { * @return bool */ public function hasIdentity() { - return null != $this->getIdentity(); + return null != Class_Users::getIdentity(); } @@ -128,7 +128,7 @@ class UsersLoader extends Storm_Model_Loader { if(!$user) return false; - if(!$logged_user = $this->getIdentity()) + if(!$logged_user = Class_Users::getIdentity()) return false; return $user->getId() == $logged_user->getId(); @@ -136,28 +136,28 @@ class UsersLoader extends Storm_Model_Loader { public function isCurrentUserAdmin() { - if (!$user = $this->getIdentity()) + if (!$user = Class_Users::getIdentity()) return false; return $user->isAdmin(); } public function isCurrentUserSuperAdmin() { - if (!$user = $this->getIdentity()) + if (!$user = Class_Users::getIdentity()) return false; return $user->isSuperAdmin(); } public function isCurrentUserCanAccesBackend() { - if (!$user = $this->getIdentity()) + if (!$user = Class_Users::getIdentity()) return false; return $user->canAccessBackend(); } public function isCurrentUserCanConfigFront() { - if (!$user = $this->getIdentity()) + if (!$user = Class_Users::getIdentity()) return false; return $user->hasRightConfigFront(); } @@ -168,14 +168,14 @@ class UsersLoader extends Storm_Model_Loader { * @return bool */ public function isCurrentUserCanEditArticle($article) { - if (!$user = $this->getIdentity()) + if (!$user = Class_Users::getIdentity()) return false; return $user->canEditArticle($article); } public function isCurrentUserAllowedToEditLibrary($library) { - if(!$user = $this->getIdentity()) + if(!$user = Class_Users::getIdentity()) return false; return $user->hasRightsForLibrary($library->getId()); } @@ -185,7 +185,7 @@ class UsersLoader extends Storm_Model_Loader { if(!$profile) return false; - if(!$user = $this->getIdentity()) + if(!$user = Class_Users::getIdentity()) return false; if((!$user->isAdminBib() && !$user->hasRightConfigFront()) @@ -201,7 +201,7 @@ class UsersLoader extends Storm_Model_Loader { * @return bool */ public function isCurrentUserCanAccessAllBibs() { - if (!$user = $this->getIdentity()) + if (!$user = Class_Users::getIdentity()) return false; return $user->canAccessAllBibs(); } @@ -1021,8 +1021,7 @@ class Class_Users extends Storm_Model_Abstract { public function validate() { $this->checkAttribute('login',$this->getLogin(), $this->_("Vous devez compléter le champ 'Identifiant'")); - if (!Class_AdminVar::isLoginThroughSigbOnlyEnabled()) - $this->checkAttribute('password',$this->getPassword(), $this->_("Vous devez compléter le champ 'Mot de passe'")); + $this->_checkPassword(); $this->checkAttribute('login',mb_strlen($this->getLogin(),'UTF-8') <= 50, $this->_("Le champ 'Identifiant' doit être inférieur à 50 caractères")); @@ -1057,6 +1056,17 @@ class Class_Users extends Storm_Model_Abstract { } + protected function _checkPassword() { + if (Class_AdminVar::isLoginThroughSigbOnlyEnabled() + && $this->isAbonne()) + return; + + $this->checkAttribute('password', + $this->getPassword(), + $this->_("Vous devez compléter le champ 'Mot de passe'")); + } + + public function deleteUser($id_user) { if ($user = $this->getLoader()->find($id_user)) $user->delete(); diff --git a/tests/application/modules/opac/controllers/AuthControllerWithoutPasswordTest.php b/tests/application/modules/opac/controllers/AuthControllerWithoutPasswordTest.php index 3d6970706b7428f1ea9e4a8374cf4389ee8ad9af..22ad1712f2bff501b5e10c8f965be2a4a6f6b7a4 100644 --- a/tests/application/modules/opac/controllers/AuthControllerWithoutPasswordTest.php +++ b/tests/application/modules/opac/controllers/AuthControllerWithoutPasswordTest.php @@ -31,6 +31,19 @@ abstract class AuthControllerWithoutPasswordTestCase extends AbstractControllerT public function setUp() { parent::setUp(); + + $logger = $this->mock() + ->whenCalled('log')->answers(true) + + ->whenCalled('logError') + ->willDo( + function($url, $message) { + throw new RuntimeException($url . ' :: ' . $message); + }); + + Class_CommSigb::setLogger($logger); + Class_WebService_SIGB_AbstractService::setLogger($logger); + Class_AdminVar::set('LOGIN_THROUGH_SIGB_ONLY', 1); ZendAfi_Auth::getInstance()->clearIdentity(); @@ -107,9 +120,12 @@ class AuthControllerWithoutPasswordKohaTest extends AuthControllerWithoutPasswor /** @test */ public function userFooShouldBeLogged() { - $this->assertNotNull(Class_Users::getIdentity()); $this->assertEquals('foo', Class_Users::getIdentity()->getLogin()); - $this->assertEquals('5', Class_Users::getIdentity()->getId()); + } + + + /** @test */ + public function userFooPasswordShouldHaveNotBeenSet() { $this->assertEquals('', Class_Users::getIdentity()->getPassword()); } } @@ -127,21 +143,11 @@ class AuthControllerDispatchAbonnePretsWithoutPasswordKohaTest extends AuthContr protected function _setService() { - $logger = $this->mock() - ->whenCalled('log')->answers(true) - - ->whenCalled('logError') - ->willDo( - function($url, $message) { - throw new RuntimeException($url . ' :: ' . $message); - }); - - Class_CommSigb::setLogger($logger); - Class_WebService_SIGB_AbstractService::setLogger($logger); $this->_mock_web_client = $this->mock() ->whenCalled('open_url') ->with('http://mon-koha-de-test.org?service=GetPatronInfo&patron_id=789&show_contact=1&show_loans=1&show_holds=1') ->answers('') + ->beStrict(); $this->_service = Class_WebService_SIGB_Koha::getService($this->_params); @@ -151,13 +157,18 @@ class AuthControllerDispatchAbonnePretsWithoutPasswordKohaTest extends AuthContr /** @test */ public function authenticateShouldNotBeCall() { - $this->assertFalse($this->_mock_web_client->methodHasBeenCalledWithParams('open_url', ['http://mon-koha-de-test.org?service=AuthenticatePatron&username=foo&password='])); + $this->assertFalse( + $this->_mock_web_client + ->methodHasBeenCalledWithParams('open_url', + ['http://mon-koha-de-test.org?service=AuthenticatePatron&username=foo&password='])); } /** @test */ public function patronInfoShouldBeCallWithPatronId789() { - $this->assertTrue($this->_mock_web_client->methodHasBeenCalledWithParams('open_url', - ['http://mon-koha-de-test.org?service=GetPatronInfo&patron_id=789&show_contact=1&show_loans=1&show_holds=1'])); + $this->assertTrue( + $this->_mock_web_client + ->methodHasBeenCalledWithParams('open_url', + ['http://mon-koha-de-test.org?service=GetPatronInfo&patron_id=789&show_contact=1&show_loans=1&show_holds=1'])); } } \ No newline at end of file