'trim'], ['email', 'required', 'message' => 'Champs obligatoire'], ['email', 'email'], // username and password are both required [ 'password', 'required', 'message' => 'Champs obligatoire'], // rememberMe must be a boolean value ['rememberMe', 'boolean'], // password is validated by validatePassword() ['password', 'validatePassword'], ['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'); } }], ['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.'); } } }], ]; } /** * Validates the password. * This method serves as the inline validation for password. * * @param string $attribute the attribute currently being validated * @param array $params the additional name-value pairs given in the rule */ public function validatePassword($attribute, $params) { if (!$this->hasErrors()) { $user = $this->getUser(); if (!$user || !$user->validatePassword($this->password)) { $this->addError($attribute, 'Email ou mot de passe incorrect'); } } } /** * Logs in a user using the provided username and password. * * @return boolean whether the user is logged in successfully */ public function login() { if ($this->validate()) { $this->updateDerniereConnexion(); return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0); } else { return false; } } /** * Finds user by [[username]] * * @return User|null */ public function getUser() { if ($this->_user === false) { $this->_user = User::findByEmail($this->email); } return $this->_user; } public function attributeLabels() { return [ 'id' => 'ID', 'username' => 'Identifiant', 'password' => 'Mot de passe', 'rememberMe' => 'Se souvenir de moi', 'email' => 'Email', ]; } /** * Met à jour la date de dernière connexion de l'utilisateur. */ public function updateDerniereConnexion() { $user = $this->getUser(); $user->date_derniere_connexion = date('Y-m-d H:i:s'); $user->save(); } }