* @copyright (c), Thread */ class SignInForm extends \yii\base\Model { public $rememberMe = true; public $username, $email, $password; // const FLASH_KEY = 'SignInForm'; public $ONLY_ADMIN = false; /** * @var User */ private $_user = null; protected $_username_attribute, $_time_remember_user_sign_in; /** * */ public function init() { parent::init(); /** * @var $module \frontend\modules\user\User */ $module = Yii::$app->getModule('user'); $this->_time_remember_user_sign_in = $module->time_remember_user_sign_in; $this->_username_attribute = $module->username_attribute; } /** * @return boolean */ public function login() { if ($this->validate()) { $user = $this->getUser(); if ($user !== null && $this->ONLY_ADMIN === true) { if ($user['group_id'] != Group::ADMIN) { $this->addError($this->password, Yii::t('user', 'User access is prohibited')); } } if ($this->validatePassword()) { return Yii::$app->getUser()->login($user, $this->rememberMe ? $this->_time_remember_user_sign_in : 0); } else { $this->addError($this->password, Yii::t('user', 'Incorrect username or password')); } } return false; } /** * @return array */ public function scenarios() { return ['signIn' => ['username', 'email', 'password', 'rememberMe']]; } /** * @return array */ public function rules() { $rules = [ [['password'], 'required'], [['rememberMe'], 'boolean'], [['password'], 'validatePassword'], ['email', 'trim'], ['email', 'email'], ]; // if ($this->_username_attribute === 'email') { $rules[] = [['email'], 'required']; } elseif ($this->_username_attribute === 'username') { $rules[] = [['username'], 'required']; } // return $rules; } /** * @return array */ public function attributeLabels() { return [ 'username' => Yii::t('user', 'Username'), 'password' => Yii::t('user', 'Password'), 'email' => Yii::t('app', 'Email'), 'rememberMe' => Yii::t('user', 'Remember me'), ]; } /** * @return bool */ public function validatePassword() { if (!$this->hasErrors()) { $user = $this->getUser(); if ($user['published'] == Group::STATUS_KEY_OFF) { $this->addError('published', Yii::t('app', 'your account is blocked')); return false; } if (!$user || !$user->validatePassword($this->password)) { $this->addError('password', Yii::t('user', 'Incorrect username or password')); return false; } else { return true; } } } /** * @return User|null */ public function getUser() { return ($this->_username_attribute === 'username') ? User::findByUsername($this->username) : User::findByEmail($this->email); } /** * @return string */ public function getUsernameAttribute() { return $this->_username_attribute; } }