No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

172 líneas
5.8KB

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