diff --git a/application/modules/opac/controllers/AuthController.php b/application/modules/opac/controllers/AuthController.php index 740c478b4a58b9afa148341602ab2ecc21aa8411..bd078d671c276a582ddde9b2f5bab81f42241b81 100644 --- a/application/modules/opac/controllers/AuthController.php +++ b/application/modules/opac/controllers/AuthController.php @@ -249,13 +249,13 @@ class AuthController extends ZendAfi_Controller_Action { public function newsletterRegisterAction() { if('' != $this->_request->getParam('emailCheck')) - $this->_redirect('/'); + return $this->_redirect('/'); - if(!$id_newsletter = $this->_request->getParam('id')) - $this->_redirect('/'); + if(!($id_newsletter = $this->_request->getParam('id'))) + return $this->_redirect('/'); - if(!$newsletter = Class_Newsletter::find($id_newsletter)) - $this->_redirect('/'); + if(!($newsletter = Class_Newsletter::find($id_newsletter))) + return $this->_redirect('/'); $this->view->titre = $this->view->_('Inscription à la newsletter: ') . $newsletter->getTitre(); $this->view->error = ''; @@ -291,6 +291,28 @@ class AuthController extends ZendAfi_Controller_Action { } + public function newsletterActiveUserAction() { + if(!($key = $this->_request->getParam('c')) || !($id_newsletter = $this->_request->getParam('id'))) + return $this->_redirect('/'); + + if(!$newsletter = Class_Newsletter::find($id_newsletter)) + return $this->_redirect('/'); + + $this->view->titre = $this->view->_("Confirmation d'inscription à la newsletter: ").$newsletter->getTitre(); + ($user = Class_UsersNonValid::activateForNewsletterBy($key)) + ? $this->newsletterRegisterUser($newsletter, $user) + : $this->view->message = $this->view->_("Inscription à la newsletter invalide."); + } + + + protected function newsletterRegisterUser($newsletter, $user) { + + Class_NewsletterSubscription::newWith($newsletter, $user) + ? $this->view->message = $this->view->_('Vous avez bien été abonné à la newsletter: ').$newsletter->getTitre().$this->view->_(' avec l\'adresse suivante: ').$user->getMail() + : $this->view->message = $this->view->_('Erreur lors de l\inscription à la newsletter.'); + } + + public function generatecaptchaAction() { $md5_hash = md5(rand(0,999)); $security_code = substr($md5_hash, 15, 5); diff --git a/application/modules/opac/views/scripts/auth/newsletter-active-user.phtml b/application/modules/opac/views/scripts/auth/newsletter-active-user.phtml new file mode 100644 index 0000000000000000000000000000000000000000..e923bb9ac75cdd0a3d049020d909fa429b527eea --- /dev/null +++ b/application/modules/opac/views/scripts/auth/newsletter-active-user.phtml @@ -0,0 +1,5 @@ +<?php +$this->openBoite($this->titre); +echo $this->tag('p', $this->message); +echo $this->closeBoite(); +?> diff --git a/library/Class/Users.php b/library/Class/Users.php index b97f56e47430ae11bbfe48fae167c22e7f349c50..6d758b066523481116b1bd6f1f871a7caf88fd33 100644 --- a/library/Class/Users.php +++ b/library/Class/Users.php @@ -960,7 +960,7 @@ class Class_Users extends Storm_Model_Abstract { $message_mail=[]; $message_mail[]=$this->_("Bonjour,"); $message_mail[]=$this->_("Vous avez fait une demande d'inscription à la newsletter:").' '.$newsletter->getTitre(); - $message_mail[]=$this->_("Pour valider inscription, merci de cliquer sur le lien suivant:")." http://".$_SERVER["SERVER_NAME"].BASE_URL.'/opac/auth/newsletter-activeuser/c/'.$non_valid_user->getCle().'/id/'.$newsletter->getId(); + $message_mail[]=$this->_("Pour valider inscription, merci de cliquer sur le lien suivant:")." 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."); // envoi du mail de confirmation diff --git a/library/Class/UsersNonValid.php b/library/Class/UsersNonValid.php index 15e734a1ac69f83ed05b78b3655c6bf586bf6e2b..a50cd8f0004838b2248e6dafa6a3219fbc2c529e 100644 --- a/library/Class/UsersNonValid.php +++ b/library/Class/UsersNonValid.php @@ -25,6 +25,13 @@ class UsersNonValidLoader extends Storm_Model_Loader { return false; return $model->activate(); } + + + public function activateForNewsletterBy($key) { + if (!$model = Class_UsersNonValid::findFirstBy(['cle' => $key])) + return ''; + return $model->activateForNewsletter(); + } } @@ -33,6 +40,8 @@ class Class_UsersNonValid extends Storm_Model_Abstract { protected $_table_primary = 'ID_USER'; protected $_loader_class = 'UsersNonValidLoader'; + protected $_user; + public function activate() { $user = new Class_Users(); if (!$user @@ -42,8 +51,14 @@ class Class_UsersNonValid extends Storm_Model_Abstract { ->save()) return false; + $this->_user = $user; $this->delete(); return true; } + + + public function activateForNewsletter() { + return $this->activate() ? $this->_user: ''; + } } ?> \ No newline at end of file diff --git a/tests/application/modules/opac/controllers/AuthControllerTest.php b/tests/application/modules/opac/controllers/AuthControllerTest.php index c4ca0a3a7671fdcb5a924607e295c542f8f371d6..7f1fcb292a501130d5720f1a0cba49e48f9ce38e 100644 --- a/tests/application/modules/opac/controllers/AuthControllerTest.php +++ b/tests/application/modules/opac/controllers/AuthControllerTest.php @@ -1637,7 +1637,7 @@ class AuthControllerPostRegisterNewsletterDailyNewsTest extends AuthControllerNo /** @test */ public function validationUrlShouldBeAsExpected() { - $this->assertContains('/opac/auth/newsletter-activeuser/c/de153b3ccb38a85b82097ab2de58717e/id/5', $this->getSentMailContent(), $this->getSentMailContent()); + $this->assertContains('/opac/auth/newsletter-active-user/c/de153b3ccb38a85b82097ab2de58717e/id/5', $this->getSentMailContent(), $this->getSentMailContent()); } @@ -1691,4 +1691,92 @@ class AuthControllerPostRegisterNewsletterDailyNewsWithNonUniqueMailTest extends } } + + +class AuthControllerNewsletterActiveUserWithWrongParamsTest extends AuthControllerNoBodyLoggedTestCase { + public function setUp() { + parent::setUp(); + } + + + /** @test */ + public function noParamsShouldRedirectToIndex() { + $this->dispatch('opac/auth/newsletter-active-user', true); + $this->assertRedirectTo('/'); + } + + + /** @test */ + public function noKeySshouldRedirectToIndex() { + $this->dispatch('opac/auth/newsletter-active-user/id/5', true); + $this->assertRedirectTo('/'); + } + + + /** @test */ + public function noNewsletterShouldRedirectToIndex() { + $this->dispatch('opac/auth/newsletter-active-user/c/4897sd8fsdf', true); + $this->assertRedirectTo('/'); + } + + + /** @test */ + public function wrongNewsletterShouldRedirectedToIndex() { + Class_Newsletter::beVolatile(); + $this->dispatch('opac/auth/newsletter-active-user/c/4897sd8fsdf/id/1', true); + $this->assertRedirectTo('/'); + } + + + /** @test */ + public function wrongKeyShouldDisplayExpectedMessage() { + $this->fixture('Class_Newsletter', + ['id' => 1, + 'titre' => 'News of the month']); + + $this->dispatch('opac/auth/newsletter-active-user/c/4897sd8fsdf/id/1', true); + $this->assertXPathContentContains('//p', 'Inscription à la newsletter invalide.', $this->_response->getBody()); + } +} + + + +class AuthControllerNewsletterActiveUserTest extends AuthControllerNoBodyLoggedTestCase { + public function setUp() { + parent::setUp(); + + Class_NewsletterSubscription::beVolatile(); + + $this->fixture('Class_Newsletter',[ + 'id' => 1, + 'titre' => 'News of the month']); + + $this->fixture('Class_UsersNonValid', [ + 'id' => 1, + 'login' => 'future@i.am', + 'mail' => 'future@i.am', + 'password' => 'random', + 'cle' => '12345678']); + + $this->dispatch('opac/auth/newsletter-active-user/c/12345678/id/1', true); + } + + + /** @test */ + public function userFutureShouldExist() { + $this->assertEquals('future@i.am', Class_Users::findFirstBy(['login' => 'future@i.am'])->getMail()); + } + + + /** @test */ + public function newsletterShouldHaveFutureAsSubscriber() { + $this->assertEquals('future@i.am', Class_NewsletterSubscription::find(1)->getUser()->getMail()); + } + + + /** @test */ + public function successMessageShouldBeAsExpected() { + $this->assertXPathContentContains('//p', "Vous avez bien été abonné à la newsletter: News of the month avec l'adresse suivante: future@i.am"); + } +} ?> \ No newline at end of file