選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

216 行
7.8KB

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