RegistrationForm::rules()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 41

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 41
ccs 17
cts 17
cp 1
rs 9.264
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1
1
<?php
2
3
/*
4
 * This file is part of the 2amigos/yii2-usuario project.
5
 *
6
 * (c) 2amigOS! <http://2amigos.us/>
7
 *
8
 * For the full copyright and license information, please view
9
 * the LICENSE file that was distributed with this source code.
10
 */
11
12
namespace Da\User\Form;
13
14
use Da\User\Model\User;
15
use Da\User\Traits\ContainerAwareTrait;
16
use Da\User\Traits\ModuleAwareTrait;
17
use Yii;
18
use yii\base\Model;
19
use yii\helpers\Html;
20
21
class RegistrationForm extends Model
22
{
23
    use ModuleAwareTrait;
24
    use ContainerAwareTrait;
25
26
    /**
27
     * @var string User email address
28
     */
29
    public $email;
30
    /**
31
     * @var string Username
32
     */
33
    public $username;
34
    /**
35
     * @var string Password
36
     */
37
    public $password;
38
    /**
39
     * @var bool Data processing consent
40
     */
41
    public $gdpr_consent;
42
43
    /**
44
     * {@inheritdoc}
45
     *
46
     * @throws \Exception
47
     */
48 6
    public function rules()
49
    {
50
        /** @var User $user */
51 6
        $user = $this->getClassMap()->get(User::class);
52
53
        return [
54
            // username rules
55 6
            'usernameLength' => ['username', 'string', 'min' => 3, 'max' => 255],
56
            'usernameTrim' => ['username', 'filter', 'filter' => 'trim'],
57
            'usernamePattern' => ['username', 'match', 'pattern' => '/^[-a-zA-Z0-9_\.@]+$/'],
58
            'usernameRequired' => ['username', 'required'],
59
            'usernameUnique' => [
60 6
                'username',
61 6
                'unique',
62 6
                'targetClass' => $user,
63 6
                'message' => Yii::t('usuario', 'This username has already been taken'),
64
            ],
65
            // email rules
66
            'emailTrim' => ['email', 'filter', 'filter' => 'trim'],
67
            'emailRequired' => ['email', 'required'],
68
            'emailPattern' => ['email', 'email'],
69
            'emailUnique' => [
70 6
                'email',
71 6
                'unique',
72 6
                'targetClass' => $user,
73 6
                'message' => Yii::t('usuario', 'This email address has already been taken'),
74
            ],
75
            // password rules
76 6
            'passwordRequired' => ['password', 'required', 'skipOnEmpty' => $this->module->generatePasswords],
77
            'passwordLength' => ['password', 'string', 'min' => 6, 'max' => 72],
78
            'gdprType' => ['gdpr_consent', 'boolean'],
79
            'gdprDefault' => ['gdpr_consent', 'default', 'value' => 0, 'skipOnEmpty' => false],
80 6
            'gdprRequired' => ['gdpr_consent',
81 6
                'compare',
82
                'compareValue' => true,
83 6
                'message' => Yii::t('usuario', 'Your consent is required to register'),
84
                'when' => function () {
85 6
                    return $this->module->enableGdprCompliance;
86 6
                }]
87
        ];
88
    }
89
90
    /**
91
     * {@inheritdoc}
92
     */
93 6
    public function attributeLabels()
94
    {
95
        return [
96 6
            'email' => Yii::t('usuario', 'Email'),
97 6
            'username' => Yii::t('usuario', 'Username'),
98 6
            'password' => Yii::t('usuario', 'Password'),
99 6
            'gdpr_consent' => Yii::t('usuario', 'Data processing consent')
100
        ];
101
    }
102
103 6
    public function attributeHints()
104
    {
105
        return [
106 6
            'gdpr_consent' => $this->module->getConsentMessage()
107
        ];
108
    }
109
}
110