Completed
Push — master ( 3bd1f0...88ccf2 )
by Charles
01:38
created

ChangeEmail::rules()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
3
namespace yrc\forms;
4
5
use Base32\Base32;
6
use Yii;
7
8
/**
9
 * @class ChangeEmail
10
 * The form for validating the activation form
11
 */
12
abstract class ChangeEmail extends \yii\base\Model
13
{
14
    /**
15
     * The new email to be changed
16
     * @var string $email
17
     */
18
    public $email;
19
20
    /**
21
     * The user's current password
22
     * @var string $password
23
     */
24
    public $password;
25
26
    /**
27
     * The user whose information we want to change
28
     * @var User $user
29
     */
30
    private $user;
31
32
    /**
33
     * Sets the user object
34
     * @param User $user
35
     */
36
    public function setUser($user)
37
    {
38
        $this->user = $user;
39
    }
40
41
    /**
42
     * Validation rules
43
     * @return array
44
     */
45
    public function rules()
46
    {
47
        return [
48
            [['email', 'password'], 'required'],
49
            [['email'], 'email'],
50
            [['email'], 'validateNewEmail'],
51
            [['password'], 'validatePassword']
52
        ];
53
    }
54
55
    /**
56
     * Validates the email address
57
     * @inheritdoc
58
     */
59
    public function validateNewEmail($attributes, $params)
0 ignored issues
show
Unused Code introduced by
The parameter $attributes is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $params is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
60
    {
61
        if (!$this->hasErrors()) {
62
            if ($this->user === null) {
63
                throw new \yii\base\Exception('User object not set. Unable to proceed.');
64
            }
65
66
            if ($this->email === $this->user->email) {
67
                $this->addError('email', Yii::t('yrc', 'You cannot change your email to your current email address'));
68
            }
69
70
            if (!$this->hasErrors()) {
71
                // Clone the user object to verify the email can be set
72
                $mock = clone $this->user;
73
                $mock->email = $this->email;
74
                if (!$mock->validate()) {
75
                    $this->addError('email', $mock->getFirstError('email'));
76
                }
77
78
                unset($mock);
79
            }
80
        }
81
    }
82
83
    /**
84
     * Validates the user's current password
85
     * @inheritdoc
86
     */
87
    public function validatePassword($attributes, $params)
0 ignored issues
show
Unused Code introduced by
The parameter $attributes is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $params is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
88
    {
89
        if (!$this->hasErrors()) {
90
            if ($this->user === null) {
91
                throw new \Exception('User object not set. Unable to proceed.');
92
            }
93
94
            if (!$this->user->validatePassword($this->password)) {
95
                $this->addError('password', Yii::t('yrc', 'The provided password is not valid'));
96
            }
97
        }
98
    }
99
100
    /**
101
     * Changes the user's email address
102
     * @return boolean
103
     */
104
    public function change()
105
    {
106
        if ($this->validate()) {
107
            $oldEmail = $this->user->email;
0 ignored issues
show
Unused Code introduced by
$oldEmail is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
108
            $this->user->email = $this->email;
109
110
            // Validation check
111
            if ($this->user->validate()) {
112
                // Save chec
113
                if ($this->user->save()) {
114
115
                    return true;
116
                }
117
            }
118
119
            $this->addError('email', $this->user->getError('email'));
120
        }
121
122
        return false;
123
    }
124
}
125