diff --git a/library/Class/Users.php b/library/Class/Users.php index 460bfb8ed30e08aa30d3465ff718b6219854f5ea..8377dc0f06303b2881f159dd12ca7c7ca3057f89 100644 --- a/library/Class/Users.php +++ b/library/Class/Users.php @@ -922,6 +922,13 @@ class Class_Users extends Storm_Model_Abstract { return $cache_register; } + if($this->subscriptionInProgress($email)) { + $cache_register['error'] = $this->_('Une demande d\'inscription est déjà en cours pour cet email.'); + return $cache_register; + } + + + $user = Class_UsersNonValid::newInstance([ 'login' => $email, 'password' => $this->randomPassword(), @@ -934,6 +941,11 @@ class Class_Users extends Storm_Model_Abstract { } + protected function subscriptionInProgress($email) { + return 0 < Class_UsersNonValid::countBy(['mail' => $email]); + } + + protected function isEmailUnique($email) { $users = Class_Users::getLoader()->findAllBy([ 'where' => 'login = "'.$email.'" or mail = "'.$email.'"']); @@ -967,7 +979,7 @@ class Class_Users extends Storm_Model_Abstract { $message_mail[] = "http://".$_SERVER["SERVER_NAME"].BASE_URL.'/opac/auth/newsletter-active-user/c/'.$non_valid_user->getCle().'/id/'.$newsletter->getId(); $message_mail[] = $this->_('Si vous n\'êtes pas à l\'origine de cette demande d\'inscription, merci de ne pas tenir compte de cet e-mail, et l\'inscription ne sera pas activée.'); $message_mail[] = $this->_('Pour vous désincrire de la newsletter, merci de cliquer sur le lien suivant:'); - $message_mail[] = "http://".$_SERVER["SERVER_NAME"].BASE_URL."/opac/abonne/unsubscribe-newsletter/" . $newsletter->getId(); + $message_mail[] = "http://".$_SERVER["SERVER_NAME"].BASE_URL."/opac/auth/newsletter-unsubscribe/id/" . $newsletter->getId(); // envoi du mail de confirmation diff --git a/library/Class/WebService/SIGB/Orphee/SessionStrategy.php b/library/Class/WebService/SIGB/Orphee/SessionStrategy.php index 4d3f67aeb77afc3b34548883166cf36361932dc1..2b12933067ffbbbea4e0c2f79fe20f4d633a76ff 100644 --- a/library/Class/WebService/SIGB/Orphee/SessionStrategy.php +++ b/library/Class/WebService/SIGB/Orphee/SessionStrategy.php @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE * along with AFI-OPAC 2.0; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ class Class_WebService_SIGB_Orphee_SessionStrategy { @@ -25,6 +25,9 @@ class Class_WebService_SIGB_Orphee_SessionStrategy { protected $_session_id; public static function newFrom($soapClient, $key) { + if(!$soapClient) + return new Class_WebService_SIGB_Orphee_SessionStrategyNull($soapClient, $key); + foreach(['GetToken', 'GetId'] as $strategy) if ($soapClient->hasFunction($strategy)) { $class_name = 'Class_WebService_SIGB_Orphee_SessionStrategy' . $strategy; @@ -60,7 +63,7 @@ class Class_WebService_SIGB_Orphee_SessionStrategy { return $this; } - + public function isConnected() { return !empty($this->_session_id); } @@ -92,7 +95,11 @@ class Class_WebService_SIGB_Orphee_SessionStrategyGetToken extends Class_WebServ } -class Class_WebService_SIGB_Orphee_SessionStrategyNull extends Class_WebService_SIGB_Orphee_SessionStrategy{} +class Class_WebService_SIGB_Orphee_SessionStrategyNull extends Class_WebService_SIGB_Orphee_SessionStrategy{ + public function connect() { + return $this; + } +} diff --git a/tests/application/modules/opac/controllers/AuthControllerTest.php b/tests/application/modules/opac/controllers/AuthControllerTest.php index 32a85cc3bf8707217662d3b336c788d6f0adf375..ad477fe9b173e13fc2f3bf196e168b2555974cf5 100644 --- a/tests/application/modules/opac/controllers/AuthControllerTest.php +++ b/tests/application/modules/opac/controllers/AuthControllerTest.php @@ -1675,6 +1675,12 @@ class AuthControllerPostRegisterNewsletterDailyNewsTest extends AuthControllerNo public function mailShouldContainsAccountPassword() { $this->assertContains('Votre mot de passe: ', $this->getSentMailContent()); } + + + /** @test */ + public function unssubscribUrlShouldBeAsExpected() { + $this->assertContains('opac/auth/newsletter-unsubscribe/id/5', $this->getSentMailContent()); + } } @@ -1687,13 +1693,11 @@ class AuthControllerPostRegisterNewsletterDailyNewsWithNonUniqueMailTest extends Class_Users::beVolatile(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') - ->whenCalled('findAllBy') - ->answers([ $this->fixture('Class_Users', - ['id' => 1, - 'login' => 'Tom', - 'password' => 'pwd', - 'mail' => 'imalreadyused@mail.unique'])]); + $this->fixture('Class_Users', + ['id' => 1, + 'login' => 'Tom', + 'password' => 'pwd', + 'mail' => 'imalreadyused@mail.unique']); Class_UsersNonValid::beVolatile(); @@ -1722,6 +1726,39 @@ class AuthControllerPostRegisterNewsletterDailyNewsWithNonUniqueMailTest extends +class AuthControllerPostRegisterNewsletterDailyNewsWithNonUniqueMailFromNonValidUserTest extends AuthControllerNobodyLoggedTestCase { + + public function setUp() { + parent::setUp(); + + Class_Users::beVolatile(); + + $this->fixture('Class_UsersNonValid', + ['id' => 1, + 'login' => 'imalreadyused@mail.unique', + 'password' => 'pwd', + 'mail' => 'imalreadyused@mail.unique']); + + $this->fixture('Class_Newsletter', + ['id' => 5, + 'titre' => 'Daily News']); + + $this->postDispatch('/opac/auth/newsletter-register/id/5', [ + 'email' => 'imalreadyused@mail.unique', + 'emailCheck' => '']); + } + + + /** @test */ + public function shouldReturnSubscriptionInProgressMessage() { + $this->assertXPathContentContains('//span[@class="error"]', + "Une demande d'inscription est déjà en cours pour cet email."); + } +} + + + + class AuthControllerNewsletterActiveUserWithWrongParamsTest extends AuthControllerNoBodyLoggedTestCase { public function setUp() { parent::setUp();