Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
60.00% |
3 / 5 |
CRAP | |
75.00% |
15 / 20 |
| LoginForm | |
0.00% |
0 / 1 |
|
60.00% |
3 / 5 |
18.52 | |
75.00% |
15 / 20 |
| rules | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| attributeLabels | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 1 |
|||
| validatePassword | |
100.00% |
1 / 1 |
4 | |
100.00% |
5 / 5 |
|||
| login | |
100.00% |
1 / 1 |
3 | |
100.00% |
3 / 3 |
|||
| getUser | |
0.00% |
0 / 1 |
8.30 | |
60.00% |
6 / 10 |
|||
| <?php | |
| namespace common\models; | |
| use Yii; | |
| use yii\base\Model; | |
| /** | |
| * Login form | |
| */ | |
| class LoginForm extends Model | |
| { | |
| public $username; | |
| public $password; | |
| public $rememberMe = true; | |
| private $_user; | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function rules() | |
| { | |
| return [ | |
| // username and password are both required | |
| [['username', 'password'], 'required'], | |
| // rememberMe must be a boolean value | |
| ['rememberMe', 'boolean'], | |
| // password is validated by validatePassword() | |
| ['password', 'validatePassword'], | |
| ]; | |
| } | |
| /** | |
| * @inheritdoc | |
| */ | |
| public function attributeLabels() | |
| { | |
| return [ | |
| 'username' => Yii::t('app', 'Username or Email'), | |
| ]; | |
| } | |
| /** | |
| * 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, Yii::t('app', 'Incorrect username, email or password.')); | |
| } | |
| } | |
| } | |
| /** | |
| * Logs in a user using the provided username and password. | |
| * | |
| * @return bool whether the user is logged in successfully | |
| */ | |
| public function login() | |
| { | |
| if ($this->validate()) { | |
| return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0); | |
| } | |
| return false; | |
| } | |
| /** | |
| * Finds user by [[username]] | |
| * | |
| * @return User|null | |
| */ | |
| protected function getUser() | |
| { | |
| if ($this->_user === null) { | |
| $this->_user = User::findByUsername($this->username); | |
| } | |
| if ($this->_user === null) { | |
| $this->_user = User::findByEmail($this->username); | |
| } | |
| if ($this->_user !== null && $this->_user->status === User::STATUS_INACTIVE ) { | |
| if (!$this->hasErrors()) { | |
| $this->addError('status', 'Account is inactive.'); | |
| Yii::$app->getSession()->setFlash('warning', Yii::t('app', 'Account has not been activated.')); | |
| } | |
| return null; | |
| } | |
| return $this->_user; | |
| } | |
| } |