|
- <?php
- namespace frontend\models;
-
- use Yii;
- use common\models\User;
- use common\models\Etablissement;
- use yii\base\Model;
- use common\models\UserEtablissement ;
- use common\helpers\Password ;
-
- /**
- * Signup form
- */
- class SignupForm extends Model
- {
- public $username;
- public $email;
- public $password;
- public $nom;
- public $prenom;
- public $telephone;
- public $is_boulanger;
-
- public $siret;
- public $nom_magasin;
- public $code_postal;
- public $ville;
- public $id_etablissement ;
- public $option_client_boulanger ;
- public $cgv ;
- public $code ;
-
-
- /**
- * @inheritdoc
- */
- public function rules()
- {
- return [
- ['email', 'filter', 'filter' => '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, 'Ce producteur 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 {
- $code = Password::generate() ;
- $etablissement->code = $code ;
- } while(Etablissement::findOne(['code' => $code]));
-
- $etablissement->save() ;
-
- // user
- $user->id_etablissement = $etablissement->id ;
- $user->status = User::STATUS_BOULANGER ;
-
- // envoi d'un email à l'administrateur pour le prévenir
- Yii::$app->mailer->compose(
- [
- 'html' => 'new-boulanger-html',
- 'text' => 'new-boulanger-text'
- ],
- [
- 'etablissement' => $etablissement
- ])
- ->setTo(Yii::$app->params['adminEmail'])
- ->setFrom([Yii::$app->params['adminEmail'] => 'La boîte à pain'])
- ->setSubject('[La boîte à pain] Nouveau producteur')
- ->send();
- }
-
- $user->setPassword($this->password);
- $user->generateAuthKey();
- if ($user->save()) {
-
- // on ajoute l'établissement 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->credit = 0 ;
- $etab_user->actif = 1 ;
- $etab_user->save() ;
-
- // envoi d'un email à l'utilisateur
- Yii::$app->mailer->compose(
- [
- 'html' => 'signup-html',
- 'text' => 'signup-text'
- ],
- [
- 'user' => $user,
- 'etablissement' => $etablissement
- ])
- ->setTo($user->email)
- ->setFrom([Yii::$app->params['adminEmail'] => 'La boîte à pain'])
- ->setSubject('[La boîte à pain] Inscription')
- ->send();
- }
- }
- }
-
- if($this->option_client_boulanger == 'boulanger')
- {
- $etab_user = new UserEtablissement ;
- $etab_user->id_etablissement = $etablissement->id ;
- $etab_user->id_user = $user->id ;
- $etab_user->credit = 0 ;
- $etab_user->actif = 1 ;
- $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 dans mon établissement",
- 'nom_magasin' => 'Nom de l\'établissement',
- 'siret' => 'Numéro SIRET',
- 'code_postal' => 'Code postal',
- 'ville' => 'Commune',
- 'id_etablissement' => 'Producteur',
- ];
- }
- }
|