Реализована форма смены ника пользователя

Добавлена базовая форма с запросом пароля
Валидация ника и email адреса вынесены из формы регистрации в модель аккаунта
Отрефакторен тест формы регистрации
Добавлены тесты для модели аккаунта
This commit is contained in:
ErickSkrauch
2016-03-20 02:25:26 +03:00
parent 8b1c3a477a
commit e67257b8aa
12 changed files with 431 additions and 55 deletions

View File

@@ -0,0 +1,30 @@
<?php
namespace api\models;
use Yii;
class BasePasswordProtectedForm extends BaseApiForm {
public $password;
public function rules() {
return [
[['password'], 'required', 'message' => 'error.{attribute}_required'],
[['password'], 'validatePassword'],
];
}
public function validatePassword() {
if (!$this->getAccount()->validatePassword($this->password)) {
$this->addError('password', 'error.password_invalid');
}
}
/**
* @return \common\models\Account
*/
protected function getAccount() {
return Yii::$app->user->identity;
}
}

View File

@@ -0,0 +1,38 @@
<?php
namespace api\models;
use common\models\Account;
use Yii;
use yii\helpers\ArrayHelper;
class ChangeUsernameForm extends BasePasswordProtectedForm {
public $username;
public function rules() {
return ArrayHelper::merge(parent::rules(), [
[['username'], 'required', 'message' => 'error.{attribute}_required'],
[['username'], 'validateUsername'],
]);
}
public function validateUsername($attribute) {
$account = new Account();
$account->username = $this->$attribute;
if (!$account->validate(['username'])) {
$account->addErrors($account->getErrors('username'));
}
}
public function change() {
if (!$this->validate()) {
return false;
}
$account = $this->getAccount();
$account->username = $this->username;
return $account->save();
}
}

View File

@@ -19,23 +19,11 @@ class RegistrationForm extends BaseApiForm {
public function rules() {
return [
['rulesAgreement', 'required', 'message' => 'error.you_must_accept_rules'],
[[], ReCaptchaValidator::class, 'message' => 'error.captcha_invalid', 'when' => !YII_ENV_TEST],
['rulesAgreement', 'required', 'message' => 'error.you_must_accept_rules'],
['username', 'filter', 'filter' => 'trim'],
['username', 'required', 'message' => 'error.username_required'],
['username', 'string', 'min' => 3, 'max' => 21,
'tooShort' => 'error.username_too_short',
'tooLong' => 'error.username_too_long',
],
['username', 'match', 'pattern' => '/^[\p{L}\d-_\.!?#$%^&*()\[\]:;]+$/u'],
['username', 'unique', 'targetClass' => Account::class, 'message' => 'error.username_not_available'],
['email', 'filter', 'filter' => 'trim'],
['email', 'required', 'message' => 'error.email_required'],
['email', 'string', 'max' => 255, 'tooLong' => 'error.email_too_long'],
['email', 'email', 'checkDNS' => true, 'enableIDN' => true, 'message' => 'error.email_invalid'],
['email', 'unique', 'targetClass' => Account::class, 'message' => 'error.email_not_available'],
['username', 'validateUsername', 'skipOnEmpty' => false],
['email', 'validateEmail', 'skipOnEmpty' => false],
['password', 'required', 'message' => 'error.password_required'],
['rePassword', 'required', 'message' => 'error.rePassword_required'],
@@ -44,6 +32,22 @@ class RegistrationForm extends BaseApiForm {
];
}
public function validateUsername() {
$account = new Account();
$account->username = $this->username;
if (!$account->validate(['username'])) {
$this->addErrors($account->getErrors());
}
}
public function validateEmail() {
$account = new Account();
$account->email = $this->email;
if (!$account->validate(['email'])) {
$this->addErrors($account->getErrors());
}
}
public function validatePasswordAndRePasswordMatch($attribute) {
if (!$this->hasErrors()) {
if ($this->password !== $this->rePassword) {