Completed
Push — master ( e3f8d4...3c1926 )
by Charles
02:37
created

ChangeEmail::change()   B

Complexity

Conditions 4
Paths 4

Size

Total Lines 31
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 31
rs 8.5806
cc 4
eloc 15
nc 4
nop 0
1
<?php
2
3
namespace yrc\api\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'], 'required'],
49
            [['email'], 'email'],
50
            [['password'], 'validatePassword']
51
        ];
52
    }
53
54
    /**
55
     * Validates the user's current password
56
     * @inheritdoc
57
     */
58 View Code Duplication
    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...
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
59
    {
60
        if (!$this->hasErrors()) {
61
            if (!$this->user->validatePassword($this->password_current)) {
0 ignored issues
show
Bug introduced by
The property password_current does not seem to exist. Did you mean password?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
62
                $this->addError('password_current', Yii::t('yrc', 'The provided password is not valid'));
63
            }
64
        }
65
    }
66
67
    /**
68
     * Changes the user's email address
69
     * @return boolean
70
     */
71
    public function change()
72
    {
73
        if ($this->validate()) {
74
            $oldEmail = $this->user->email;
75
            $this->user->email = $this->email;
76
77
            // Validation check
78
            if ($this->user->validate()) {
79
                // Save chec
80
                if ($this->user->save()) {
81
                    // Notify the user via their new email that their login information has been changed
82
                    Yii::$app->yrc->sendEmail('email_change', Yii::t('app', 'Your login information has changed'), $user->email, [
0 ignored issues
show
Bug introduced by
The variable $user does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
83
                        'oldEmail' => $oldEmail,
84
                        'newEmail' => $this->email
85
                    ]);
86
87
                    // Send a notice to the old email notifying them their login information has been changed
88
                    Yii::$app->yrc->sendEmail('email_change', Yii::t('app', 'Your login information has changed'), $oldEmail, [
89
                        'oldEmail' => $oldEmail,
90
                        'newEmail' => $this->email
91
                    ]);
92
93
                    return true;
94
                }
95
            }
96
97
            $this->addError('email', $this->user->getError('email'));
98
        }
99
100
        return false;
101
    }
102
}