'trim'], ['email', 'required','message'=>'Champs obligatoire'], ['email', 'email'], ['email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'Cet email est déjà utilisé'], [['nom', 'prenom', 'telephone'],'required','message'=>'Champs obligatoire'], [['nom', 'prenom', 'telephone', 'option_client_boulanger'], 'string', 'min' => 2, 'max' => 255], ['password', 'required','message'=>'Champs obligatoire'], ['password', 'string', 'min' => 6, 'tooShort' => 'Votre mot de passe doit contenir au moins 6 caractères'], ['is_boulanger', 'boolean'], ['cgv', 'boolean'], ['cgv', function($attribute, $params) { $cgv = $this->$attribute ; if($this->option_client_boulanger == 'boulanger' && !$cgv) { $this->addError($attribute, 'Vous devez accepter les conditions générales de vente pour vous inscrire.'); } }], ['code_postal', 'required','message'=>'Champs obligatoire', 'when' => function($model) { return $model->option_client_boulanger == 'boulanger' ; },'whenClient' => "function (attribute, value) { return $('#option-boulanger').prop('checked') ; }"], ['ville', 'required','message'=>'Champs obligatoire', 'when' => function($model) { return $model->option_client_boulanger == 'boulanger' ; },'whenClient' => "function (attribute, value) { return $('#option-boulanger').prop('checked') ; }"], ['nom_magasin', 'string'], ['nom_magasin', 'required','message'=>'Champs obligatoire', 'when' => function($model) { return $model->option_client_boulanger == 'boulanger' ; },'whenClient' => "function (attribute, value) { return $('#option-boulanger').prop('checked') ; }"], ['siret', 'string'], ['siret', 'required','message'=>'Champs obligatoire', 'when' => function($model) { return $model->option_client_boulanger == 'boulanger' ; },'whenClient' => "function (attribute, value) { return $('#option-boulanger').prop('checked') ; }"], ['siret', function($attribute, $params) { $siret = $this->$attribute ; $siret = str_replace(' ', '', $siret) ; if (strlen($siret) != 14) { $this->addError($attribute, 'Le numéro SIRET doit contenir 14 caractères'); return; } if (!is_numeric($siret)) { $this->addError($attribute, 'Le numéro SIRET ne doit contenir que des chiffres'); return; } // on prend chaque chiffre un par un // si son index (position dans la chaîne en commence à 0 au premier caractère) est pair // on double sa valeur et si cette dernière est supérieure à 9, on lui retranche 9 // on ajoute cette valeur à la somme totale $sum = 0 ; for ($index = 0; $index < 14; $index ++) { $number = (int) $siret[$index]; if (($index % 2) == 0) { if (($number *= 2) > 9) $number -= 9; } $sum += $number; } // le numéro est valide si la somme des chiffres est multiple de 10 if (($sum % 10) != 0) $this->addError($attribute, 'Numéro SIRET invalide'); }], ['id_etablissement','integer'], ['id_etablissement', function($attribute, $params) { if($this->id_etablissement) { $etablissement = Etablissement::findOne($this->id_etablissement) ; if(!$etablissement) { $this->addError($attribute, 'Cette boulangerie n\'existe pas.') ; } } }], ['code', 'required', 'message' => 'Champs obligatoire', 'when' => function($model) { $etablissement = Etablissement::findOne($this->id_etablissement) ; if($etablissement) { return strlen($etablissement->code) ; } else { return false ; } }], ['code', function($attribute, $params) { $code = $this->$attribute ; $etablissement = Etablissement::findOne($this->id_etablissement) ; if($etablissement && strtolower(trim($code)) != strtolower(trim($etablissement->code))) { $this->addError($attribute, 'Code incorrect'); } }], ]; } /** * Signs user up. * * @return User|null the saved model or null if saving fails */ public function signup() { if ($this->validate()) { $user = new User(); $user->username = $this->email; $user->email = $this->email; $user->nom = $this->nom ; $user->prenom = $this->prenom ; $user->telephone = $this->telephone ; $user->confiance = 1 ; if($this->option_client_boulanger == 'boulanger') { // etablissement $etablissement = new Etablissement ; $etablissement->nom = $this->nom_magasin ; $etablissement->siret = $this->siret; $etablissement->code_postal = $this->code_postal; $etablissement->ville = $this->ville; $etablissement->heure_limite_commande = 20 ; $etablissement->delai_commande = 1 ; $etablissement->gratuit = 1 ; // génération d'un code do { $chaine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789' ; $nb = strlen($chaine) - 1; $code = ''; for($i=0; $i < 6; $i++) { $pos = mt_rand(0, $nb); $car = $chaine[$pos]; $code .= $car; } $etablissement->code = $code ; } while(Etablissement::findOne(['code' => $code])); $etablissement->save() ; // user $user->id_etablissement = $etablissement->id ; $user->status = User::STATUS_BOULANGER ; } $user->setPassword($this->password); $user->generateAuthKey(); if ($user->save()) { // envoi d'un mail de confirmation /*$message = "Bonjour, Votre inscription sur le site de la boîte à pain a bien été prise en compte ! Ce compte vous permet de passer vos commandes directement sur le site internet. Si vous avez des questions, n'hésitez pas à me contacter. À bientôt, Guillaume" ; Yii::$app->mailer->compose() ->setTo($user->email) ->setFrom(['contact@laboiteapain.net' => 'Guillaume Bourgeois']) ->setSubject("Votre inscription sur la boîte à pain") ->setTextBody($message) ->send();*/ // on ajoute la boulangerie sélectionnée par l'user en favoris if($this->option_client_boulanger == 'client') { if($this->id_etablissement) { $etablissement = Etablissement::find()->where(['id'=>$this->id_etablissement])->one() ; if($etablissement) { $etab_user = new UserEtablissement ; $etab_user->id_etablissement = $this->id_etablissement ; $etab_user->id_user = $user->id ; $etab_user->save() ; } } } if($this->option_client_boulanger == 'boulanger') { $etab_user = new UserEtablissement ; $etab_user->id_etablissement = $etablissement->id ; $etab_user->id_user = $user->id ; $etab_user->save() ; } return $user; } } return null; } public function attributeLabels() { return [ 'id' => 'ID', 'username' => 'Identifiant', 'password' => 'Mot de passe', 'rememberMe' => 'Se souvenir de moi', 'prenom' => 'Prénom', 'telephone' => 'Téléphone', 'is_boulanger' => "Je suis professionnel et souhaite mettre en place un système de réservation de pain dans ma boulangerie", 'nom_magasin' => 'Nom de la boulangerie', 'siret' => 'Numéro SIRET', 'code_postal' => 'Code postal', 'ville' => 'Commune', 'id_etablissement' => 'Ma boulangerie', ]; } }