SignupForm::processLoadModel()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 8
c 1
b 0
f 1
dl 0
loc 10
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
namespace modules\users\models;
4
5
use Yii;
6
use yii\base\Exception;
7
use yii\base\Model;
8
use modules\users\Module;
9
10
/**
11
 * Class SignupForm
12
 * @package modules\users\models
13
 *
14
 * @property string $username Username
15
 * @property string $email Email
16
 * @property string $password Password
17
 */
18
class SignupForm extends Model
19
{
20
    public $username;
21
    public $email;
22
    public $password;
23
24
    /**
25
     * @inheritdoc
26
     * @return array
27
     */
28
    public function rules()
29
    {
30
        return [
31
            ['username', 'trim'],
32
            ['username', 'required'],
33
            ['username', 'match', 'pattern' => '#^[\w_-]+$#i'],
34
            ['username', 'unique', 'targetClass' => '\modules\users\models\User', 'message' => Module::t(
35
                'module',
36
                'This username already exists.'
37
            )],
38
            ['username', 'string', 'min' => 2, 'max' => 255],
39
40
            ['email', 'trim'],
41
            ['email', 'required'],
42
            ['email', 'email'],
43
            ['email', 'string', 'max' => 255],
44
            ['email', 'unique', 'targetClass' => '\modules\users\models\User', 'message' => Module::t(
45
                'module',
46
                'This email already exists.'
47
            )],
48
49
            ['password', 'required'],
50
            ['password', 'string',
51
                'min' => User::LENGTH_STRING_PASSWORD_MIN,
52
                'max' => User::LENGTH_STRING_PASSWORD_MAX
53
            ],
54
        ];
55
    }
56
57
    /**
58
     * @inheritdoc
59
     * @return array
60
     */
61
    public function attributeLabels()
62
    {
63
        return [
64
            'username' => Module::t('module', 'Username'),
65
            'email' => Module::t('module', 'Email'),
66
            'password' => Module::t('module', 'Password'),
67
        ];
68
    }
69
70
    /**
71
     * Signs users up.
72
     *
73
     * @return User|null the saved model or null if saving fails
74
     * @throws Exception
75
     */
76
    public function signup()
77
    {
78
        if ($this->validate()) {
79
            $user = $this->processLoadModel();
80
            if ($user->save()) {
81
                Yii::$app->mailer->compose(
82
                    [
83
                        'html' => '@modules/users/mail/emailConfirm-html',
84
                        'text' => '@modules/users/mail/emailConfirm-text'
85
                    ],
86
                    ['user' => $user]
87
                )
88
                    ->setFrom([Yii::$app->params['supportEmail'] => Yii::$app->name . ' robot'])
89
                    ->setTo($this->email)
90
                    ->setSubject(Yii::$app->name . ' | ' . Module::t(
91
                        'module',
92
                        'Account activation'
93
                    ))
94
                    ->send();
95
96
                return $user;
97
            }
98
        }
99
        return null;
100
    }
101
102
    /**
103
     * @return User
104
     * @throws Exception
105
     */
106
    protected function processLoadModel()
107
    {
108
        $user = new User();
109
        $user->username = $this->username;
110
        $user->email = $this->email;
111
        $user->setPassword($this->password);
112
        $user->status = User::STATUS_WAIT;
113
        $user->generateAuthKey();
114
        $user->generateEmailConfirmToken();
115
        return $user;
116
    }
117
}
118