You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

173 line
5.8KB

  1. <?php
  2. namespace frontend\models;
  3. use common\models\User;
  4. use yii\base\Model;
  5. use Yii;
  6. /**
  7. * Signup form
  8. */
  9. class SignupForm extends Model
  10. {
  11. public $username;
  12. public $email;
  13. public $password;
  14. public $nom;
  15. public $prenom;
  16. public $telephone;
  17. public $is_boulanger;
  18. public $siret;
  19. public $nom_magasin;
  20. /**
  21. * @inheritdoc
  22. */
  23. public function rules()
  24. {
  25. return [
  26. /*['username', 'filter', 'filter' => 'trim'],
  27. ['username', 'required'],
  28. ['username', 'unique', 'targetClass' => '\common\models\User', 'message' => 'Cet identifiant est déjà utilisé'],
  29. ['username', 'string', 'min' => 2, 'max' => 255],*/
  30. ['email', 'filter', 'filter' => 'trim'],
  31. ['email', 'required','message'=>'Champs obligatoire'],
  32. ['email', 'email'],
  33. ['email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'Cet email est déjà utilisé'],
  34. ['nom','required','message'=>'Champs obligatoire'],
  35. ['nom', 'string', 'min' => 2, 'max' => 255],
  36. ['prenom','required','message'=>'Champs obligatoire'],
  37. ['prenom', 'string', 'min' => 2, 'max' => 255],
  38. ['telephone','required','message'=>'Champs obligatoire'],
  39. ['telephone', 'string', 'min' => 2, 'max' => 255, 'message'=>'Bada'],
  40. ['password', 'required','message'=>'Champs obligatoire'],
  41. ['password', 'string', 'min' => 6, 'tooShort' => 'Votre mot de passe doit contenir au moins 6 caractères'],
  42. ['is_boulanger', 'boolean'],
  43. ['nom_magasin', 'string'],
  44. ['nom_magasin', 'required','message'=>'Champs obligatoire', 'when' => function($model) {
  45. return $model->is_boulanger ;
  46. },'whenClient' => "function (attribute, value) {
  47. return $('#signupform-is_boulanger').prop('checked') ;
  48. }"],
  49. ['siret', 'string'],
  50. ['siret', 'required','message'=>'Champs obligatoire', 'when' => function($model) {
  51. return $model->is_boulanger ;
  52. },'whenClient' => "function (attribute, value) {
  53. return $('#signupform-is_boulanger').prop('checked') ;
  54. }"],
  55. ['siret', function($attribute, $params) {
  56. $siret = $this->$attribute ;
  57. $siret = str_replace(' ', '', $siret) ;
  58. if (strlen($siret) != 14)
  59. {
  60. $this->addError($attribute, 'Le numéro SIRET doit contenir 14 caractères');
  61. return;
  62. }
  63. if (!is_numeric($siret))
  64. {
  65. $this->addError($attribute, 'Le numéro SIRET ne doit contenir que des chiffres');
  66. return;
  67. }
  68. // on prend chaque chiffre un par un
  69. // si son index (position dans la chaîne en commence à 0 au premier caractère) est pair
  70. // on double sa valeur et si cette dernière est supérieure à 9, on lui retranche 9
  71. // on ajoute cette valeur à la somme totale
  72. $sum = 0 ;
  73. for ($index = 0; $index < 14; $index ++)
  74. {
  75. $number = (int) $siret[$index];
  76. if (($index % 2) == 0) { if (($number *= 2) > 9) $number -= 9; }
  77. $sum += $number;
  78. }
  79. // le numéro est valide si la somme des chiffres est multiple de 10
  80. if (($sum % 10) != 0)
  81. $this->addError($attribute, 'Numéro SIRET invalide');
  82. }],
  83. ];
  84. }
  85. /**
  86. * Signs user up.
  87. *
  88. * @return User|null the saved model or null if saving fails
  89. */
  90. public function signup()
  91. {
  92. if ($this->validate()) {
  93. $user = new User();
  94. //$user->username = $this->username;
  95. $user->username = $this->email;
  96. $user->email = $this->email;
  97. $user->nom = $this->nom ;
  98. $user->prenom = $this->prenom ;
  99. $user->telephone = $this->telephone ;
  100. $user->confiance = 1 ;
  101. if($this->is_boulanger)
  102. {
  103. $user->is_boulanger = 1 ;
  104. $user->nom_magasin = $this->nom_magasin ;
  105. $user->siret = $this->siret ;
  106. }
  107. $user->setPassword($this->password);
  108. $user->generateAuthKey();
  109. if ($user->save()) {
  110. // envoi d'un mail de confirmation
  111. $message = "Bonjour,
  112. Votre inscription sur le site du Chat des Noisette a bien été prise en compte !
  113. Ce compte vous permet de passer vos commandes directement sur le site internet.
  114. Si vous avez des questions, n'hésitez pas à me contacter.
  115. À bientôt,
  116. Matthieu" ;
  117. Yii::$app->mailer->compose()
  118. ->setTo($user->email)
  119. ->setFrom(['matthieu@lechatdesnoisettes.com' => 'Matthieu Bourgeois'])
  120. ->setSubject("Votre inscription sur le site du Chat des Noisettes")
  121. ->setTextBody($message)
  122. ->send();
  123. return $user;
  124. }
  125. }
  126. return null;
  127. }
  128. public function attributeLabels()
  129. {
  130. return [
  131. 'id' => 'ID',
  132. 'username' => 'Identifiant',
  133. 'password' => 'Mot de passe',
  134. 'rememberMe' => 'Se souvenir de moi',
  135. 'prenom' => 'Prénom',
  136. 'telephone' => 'Téléphone',
  137. 'is_boulanger' => "Je suis professionnel et souhaite mettre en place un système de réservation de pain dans ma boulangerie",
  138. 'nom_magasin' => 'Nom de la boulangerie',
  139. 'siret' => 'Numéro SIRET'
  140. ];
  141. }
  142. }