SignupForm   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 93
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 5
eloc 53
c 2
b 0
f 0
dl 0
loc 93
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A attributeLabels() 0 6 1
A rules() 0 31 1
A signup() 0 29 3
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
            [
35
                'username',
36
                'unique',
37
                'targetClass' => User::class,
38
                'message' => Module::translate('module', 'This username already exists.')
39
            ],
40
            ['username', 'string', 'min' => 2, 'max' => 255],
41
42
            ['email', 'trim'],
43
            ['email', 'required'],
44
            ['email', 'email'],
45
            ['email', 'string', 'max' => 255],
46
            [
47
                'email',
48
                'unique',
49
                'targetClass' => User::class,
50
                'message' => Module::translate('module', 'This email already exists.')
51
            ],
52
53
            ['password', 'required'],
54
            [
55
                'password',
56
                'string',
57
                'min' => User::LENGTH_STRING_PASSWORD_MIN,
58
                'max' => User::LENGTH_STRING_PASSWORD_MAX
59
            ],
60
        ];
61
    }
62
63
    /**
64
     * @inheritdoc
65
     * @return array
66
     */
67
    public function attributeLabels()
68
    {
69
        return [
70
            'username' => Module::translate('module', 'Username'),
71
            'email' => Module::translate('module', 'Email'),
72
            'password' => Module::translate('module', 'Password'),
73
        ];
74
    }
75
76
    /**
77
     * Signs user up.
78
     *
79
     * @return User|null the saved model or null if saving fails
80
     * @throws Exception
81
     */
82
    public function signup()
83
    {
84
        if ($this->validate()) {
85
            $user = new User();
86
            $user->username = $this->username;
87
            $user->email = $this->email;
88
            $user->setPassword($this->password);
89
            $user->status = User::STATUS_WAIT;
90
            $user->generateAuthKey();
91
            $user->generateEmailConfirmToken();
92
93
            if ($user->save()) {
94
                Yii::$app->mailer->compose([
95
                    'html' => '@modules/users/mail/emailConfirm-html',
96
                    'text' => '@modules/users/mail/emailConfirm-text'
97
                ], ['user' => $user])
98
                    ->setFrom([Yii::$app->params['supportEmail'] => Yii::$app->name])
99
                    ->setTo($this->email)
100
                    ->setSubject(
101
                        Module::translate(
102
                            'module',
103
                            'Account activation!'
104
                        ) . ' ' . Yii::$app->name
105
                    )->send();
106
107
                return $user;
108
            }
109
        }
110
        return null;
111
    }
112
}
113