mirror of
https://github.com/elyby/accounts.git
synced 2025-05-31 14:11:46 +05:30
Реализована форма смены ника пользователя
Добавлена базовая форма с запросом пароля Валидация ника и email адреса вынесены из формы регистрации в модель аккаунта Отрефакторен тест формы регистрации Добавлены тесты для модели аккаунта
This commit is contained in:
30
api/models/BasePasswordProtectedForm.php
Normal file
30
api/models/BasePasswordProtectedForm.php
Normal 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;
|
||||
}
|
||||
|
||||
}
|
38
api/models/ChangeUsernameForm.php
Normal file
38
api/models/ChangeUsernameForm.php
Normal 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();
|
||||
}
|
||||
|
||||
}
|
@@ -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) {
|
||||
|
Reference in New Issue
Block a user