diff --git a/application/modules/opac/controllers/AbonneController.php b/application/modules/opac/controllers/AbonneController.php index bfd756e0233dec41cddfeb03f37d193a09f3884f..af56ef3a61150ebf3962bce3497e277846f3f637 100644 --- a/application/modules/opac/controllers/AbonneController.php +++ b/application/modules/opac/controllers/AbonneController.php @@ -389,16 +389,14 @@ class AbonneController extends ZendAfi_Controller_Action { if ($mail_element = $form->getElement('mail')) $mail_element->addValidator(new Zend_Validate_EmailAddress()); - - - $chekboxes = ['is_contact_mail' => $this->_('Recevoir mes courriers par E-Mail'), - 'is_contact_sms' => $this->_('Recevoir mes alertes par SMS')]; - foreach($chekboxes as $field => $label) { - if (!in_array($field, $fields_to_show)) - continue; - - $form->addElement('checkbox', $field, ['label' => $label]); - } + if (in_array('mode_contact', $fields_to_show)) + $form->addElement('radio', + 'mode_contact', + ['label' => 'Mode de contact', + 'multiOptions' => [Class_Users::MODE_CONTACT_LETTER => $this->_('Recevoir mes courriers par courrier'), + Class_Users::MODE_CONTACT_MAIL => $this->_('Recevoir mes courriers par E-Mail'), + Class_Users::MODE_CONTACT_SMS => $this->_('Recevoir mes alertes par SMS')], + 'value' => $user->getModeContact()]); if (in_array('password', $fields_to_show)) { $fields_to_show []= 'confirm_password'; @@ -440,7 +438,7 @@ class AbonneController extends ZendAfi_Controller_Action { 'coordonnees', ['legend' => 'Coordonnées']); - if ($contact_fields = array_intersect(['mail', 'is_contact_mail', 'telephone', 'is_contact_sms' ], + if ($contact_fields = array_intersect(['mail', 'telephone', 'mode_contact' ], $fields_to_show)) $form->addDisplayGroup($contact_fields, 'contact', diff --git a/library/Class/Users.php b/library/Class/Users.php index 7442af8cf7af5b267865e483f5e390fbd8a8170d..8475790b60588ef107892c841d91d3283dd70358 100644 --- a/library/Class/Users.php +++ b/library/Class/Users.php @@ -145,6 +145,10 @@ class UsersLoader extends Storm_Model_Loader { class Class_Users extends Storm_Model_Abstract { + const MODE_CONTACT_MAIL = 'is_contact_mail'; + const MODE_CONTACT_LETTER = 'is_contact_letter'; + const MODE_CONTACT_SMS = 'is_contact_sms'; + protected $_table_name = 'bib_admin_users'; protected $_table_primary = 'ID_USER'; protected $_loader_class = 'UsersLoader'; @@ -286,6 +290,29 @@ class Class_Users extends Storm_Model_Abstract { } + + /** + * @param mode string : 'is_contact_mail' | 'is_contact_sms' | 'is_contact_letter' + */ + public function setModeContact($mode_contact) { + switch ($mode_contact) { + case self::MODE_CONTACT_MAIL: $this->setIsContactMail(true)->setIsContactSms(false); break; + case self::MODE_CONTACT_SMS: $this->setIsContactMail(false)->setIsContactSms(true); break; + default: $user->setIsContactMail(false)->setIsContactSms(false); + } + return $this; + } + + + public function getModeContact() { + return $this->getIsContactMail() + ? self::MODE_CONTACT_MAIL + : ($this->getIsContactSms() + ? self::MODE_CONTACT_SMS + : self::MODE_CONTACT_LETTER); + } + + /** * @return bool */ diff --git a/tests/application/modules/opac/controllers/AbonneControllerEditTest.php b/tests/application/modules/opac/controllers/AbonneControllerEditTest.php index 29a11fab3ad428fc29ae63dcd4949c33f7faa962..2544d6eb37c584562a1f36562590c965b515fc48 100644 --- a/tests/application/modules/opac/controllers/AbonneControllerEditTest.php +++ b/tests/application/modules/opac/controllers/AbonneControllerEditTest.php @@ -25,13 +25,16 @@ abstract class AbonneControllerEditActionWithAbonneSIGBTestCase extends Abstract public function setUp() { parent::setUp(); + $mock_emprunteur = Storm_Test_ObjectWrapper::mock(); + $mock_emprunteur->whenCalled('updateFromUserAndSave')->answers(true); $this->_jerome = Class_Users::newInstanceWithId(4, ['login' => 'jm', 'prenom' => 'Jerome', 'is_contact_sms' => true, 'idabon' => '12345', 'id_site' => 1, - 'password' => 'secret'])->beAbonneSIGB(); + 'password' => 'secret', + 'fiche_sigb' => ['fiche' => $mock_emprunteur]])->beAbonneSIGB(); ZendAfi_Auth::getInstance()->logUser($this->_jerome); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') @@ -49,11 +52,12 @@ class AbonneControllerEditWithContactMailSmsPostTest extends AbonneControllerEdi parent::setUp(); Class_AdminVar::newInstanceWithId('CHAMPS_FICHE_UTILISATEUR', - ['valeur' => 'prenom;is_contact_mail;is_contact_sms;telephone']); + ['valeur' => 'prenom;mode_contact;telephone']); $this->postDispatch('/abonne/edit', ['telephone' => '12 34 56', - 'is_contact_mail' => true, + 'mail' => 'mm@gmail.com', + 'mode_contact' => 'is_contact_mail', 'prenom' => 'Marcel', 'nom' => 'Mazout']); } @@ -95,7 +99,7 @@ class AbonneControllerEditWithContactMailSmsTest extends AbonneControllerEditAct parent::setUp(); Class_AdminVar::newInstanceWithId('CHAMPS_FICHE_UTILISATEUR', - ['valeur' => 'prenom;is_contact_mail;is_contact_sms;telephone']); + ['valeur' => 'prenom;mode_contact;telephone']); $this->dispatch('/abonne/edit', true); } @@ -114,14 +118,20 @@ class AbonneControllerEditWithContactMailSmsTest extends AbonneControllerEditAct /** @test */ - public function checkboxIsContactSmsShouldBeChecked() { - $this->assertXPath('//input[@type="checkbox"][@name="is_contact_sms"][@checked="checked"]'); + public function radioButtonIsContactSmsShouldBeChecked() { + $this->assertXPath('//input[@type="radio"][@name="mode_contact"][@value="is_contact_sms"][@checked="checked"]'); } /** @test */ - public function checkboxIsContactMailShouldNotBeChecked() { - $this->assertXPath('//input[@type="checkbox"][@name="is_contact_mail"][not(@checked)]'); + public function radioButtonIsContactMailShouldNotBeChecked() { + $this->assertXPath('//input[@type="radio"][@name="mode_contact"][@value="is_contact_mail"][not(@checked)]'); + } + + + /** @test */ + public function radioButtonIsContactLetterShouldNotBeChecked() { + $this->assertXPath('//input[@type="radio"][@name="mode_contact"][@value="is_contact_letter"][not(@checked)]'); } @@ -153,7 +163,7 @@ class AbonneControllerEditWithContactPasswordMailTest extends AbonneControllerEd /** @test */ public function checkboxIsContactSmsShouldNotBePresent() { - $this->assertNotXPath('//input[@type="checkbox"][@name="is_contact_sms"]'); + $this->assertNotXPath('//input[@type="radio"][@name="mode_contact"]'); }