Completed
Push — master ( 55e0f0...d0f882 )
by Alexey
11:22
created

SignupForm::signup()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 23
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 23
rs 9.0856
c 0
b 0
f 0
cc 3
eloc 17
nc 3
nop 0
1
<?php
2
3
namespace modules\users\models;
4
5
use Yii;
6
use yii\base\Model;
7
use modules\users\Module;
8
9
/**
10
 * Class SignupForm
11
 * @package modules\users\models
12
 */
13
class SignupForm extends Model
14
{
15
    public $username;
16
    public $email;
17
    public $password;
18
19
    /**
20
     * @inheritdoc
21
     */
22
    public function rules()
23
    {
24
        return [
25
            ['username', 'trim'],
26
            ['username', 'required'],
27
            ['username', 'match', 'pattern' => '#^[\w_-]+$#i'],
28
            ['username', 'unique', 'targetClass' => '\modules\users\models\User', 'message' => Module::t('module', 'This username already exists.')],
29
            ['username', 'string', 'min' => 2, 'max' => 255],
30
31
            ['email', 'trim'],
32
            ['email', 'required'],
33
            ['email', 'email'],
34
            ['email', 'string', 'max' => 255],
35
            ['email', 'unique', 'targetClass' => '\modules\users\models\User', 'message' => Module::t('module', 'This email already exists.')],
36
37
            ['password', 'required'],
38
            ['password', 'string', 'min' => User::LENGTH_STRING_PASSWORD_MIN, 'max' => User::LENGTH_STRING_PASSWORD_MAX],
39
        ];
40
    }
41
42
    /**
43
     * @inheritdoc
44
     */
45
    public function attributeLabels()
46
    {
47
        return [
48
            'username' => Module::t('module', 'Username'),
49
            'email' => Module::t('module', 'Email'),
50
            'password' => Module::t('module', 'Password'),
51
        ];
52
    }
53
54
    /**
55
     * Signs user up.
56
     *
57
     * @return \modules\users\models\User|null the saved model or null if saving fails
58
     */
59
    public function signup()
60
    {
61
        if ($this->validate()) {
62
            $user = new User();
63
            $user->username = $this->username;
64
            $user->email = $this->email;
65
            $user->setPassword($this->password);
66
            $user->status = User::STATUS_WAIT;
67
            $user->generateAuthKey();
68
            $user->generateEmailConfirmToken();
69
70
            if ($user->save()) {
71
                Yii::$app->mailer->compose(['text' => '@modules/users/mail/emailConfirm'], ['user' => $user])
72
                    ->setFrom([Yii::$app->params['supportEmail'] => Yii::$app->name])
73
                    ->setTo($this->email)
74
                    ->setSubject(Module::t('module', 'The message was successfully sent!') . ' ' . Yii::$app->name)
75
                    ->send();
76
77
                return $user;
78
            }
79
        }
80
        return null;
81
    }
82
}
83