Completed
Push — master ( ee995a...0c9edb )
by Razon
02:23
created

SignupForm::rules()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 15
c 1
b 0
f 0
dl 0
loc 20
ccs 0
cts 17
cp 0
rs 9.7666
cc 1
nc 1
nop 0
crap 2
1
<?php
2
namespace App\Http\Form;
3
4
use App\Model\User;
5
use Yii;
6
use yii\base\Model;
7
8
/**
9
 * Signup form
10
 */
11
class SignupForm extends Model
12
{
13
    public $username;
14
    public $email;
15
    public $password;
16
    public $first_name;
17
    public $last_name;
18
19
    /**
20
     * {@inheritdoc}
21
     */
22
    public function rules()
23
    {
24
        return [
25
            ['username', 'trim'],
26
            ['username', 'required'],
27
            ['username', 'unique', 'targetClass' => User::class, 'message' => 'This username has already been taken.'],
28
            ['username', 'string', 'min' => 2, 'max' => 255],
29
30
            ['email', 'trim'],
31
            ['email', 'required'],
32
            ['email', 'email'],
33
            ['email', 'string', 'max' => 255],
34
            ['email', 'unique', 'targetClass' => User::class, 'message' => 'This email address has already been taken.'],
35
36
            ['password', 'required'],
37
            ['password', 'string', 'min' => 6],
38
39
            [['first_name', 'last_name'], 'trim'],
40
            [['first_name', 'last_name'], 'required'],
41
            [['first_name', 'last_name'], 'string'],
42
        ];
43
    }
44
45
    /**
46
     * Signs user up.
47
     *
48
     * @return bool whether the creating new account was successful and email was sent
49
     */
50
    public function signup()
51
    {
52
        if (!$this->validate()) {
53
            return false;
54
        }
55
        
56
        $user = new User();
57
        $user->username = $this->username;
58
        $user->email = $this->email;
59
        $user->first_name = $this->first_name;
60
        $user->last_name = $this->last_name;
61
        $user->setPassword($this->password);
62
        $user->generateAuthKey();
63
        $user->generateEmailVerificationToken();
64
65
        if (!$user->save()) {
66
            Yii::error($user->getErrors(), __METHOD__);
67
            return false;
68
        }
69
70
        return $this->sendEmail($user);
71
72
    }
73
74
    /**
75
     * Sends confirmation email to user
76
     * @param User $user user model to with email should be send
77
     * @return bool whether the email was sent
78
     */
79
    protected function sendEmail($user)
80
    {
81
        return Yii::$app
82
            ->mailer
83
            ->compose(
84
                ['html' => 'emailVerify-html', 'text' => 'emailVerify-text'],
85
                ['user' => $user]
86
            )
87
            ->setFrom([Yii::$app->params['supportEmail'] => Yii::$app->name . ' robot'])
88
            ->setTo($this->email)
89
            ->setSubject('Account registration at ' . Yii::$app->name)
90
            ->send();
91
    }
92
}
93