Completed
Push — master ( ccfeeb...7d9725 )
by Alexey
02:50 queued 46s
created

DefaultController::actionEmailConfirm()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 7
nc 3
nop 1
1
<?php
2
3
namespace modules\users\controllers;
4
5
use Yii;
6
use yii\filters\AccessControl;
7
use yii\helpers\VarDumper;
8
use yii\web\Controller;
9
use yii\web\Response;
10
use yii\filters\VerbFilter;
11
use yii\base\InvalidArgumentException;
12
use yii\web\BadRequestHttpException;
13
use modules\users\models\LoginForm;
14
use modules\users\models\PasswordResetRequestForm;
15
use modules\users\models\ResetPasswordForm;
16
use modules\users\models\SignupForm;
17
use modules\users\models\EmailConfirmForm;
18
use modules\users\Module;
19
20
/**
21
 * Class DefaultController
22
 * @package modules\users\controllers
23
 */
24
class DefaultController extends Controller
25
{
26
    /**
27
     * @inheritdoc
28
     */
29
    public function behaviors()
30
    {
31
        return [
32
            'access' => [
33
                'class' => AccessControl::class,
34
                'only' => ['logout'],
35
                'rules' => [
36
                    [
37
                        'actions' => ['logout'],
38
                        'allow' => true,
39
                        'roles' => ['@'],
40
                    ],
41
                ],
42
            ],
43
            'verbs' => [
44
                'class' => VerbFilter::class,
45
                'actions' => [
46
                    'logout' => ['post'],
47
                ],
48
            ],
49
        ];
50
    }
51
52
    /**
53
     * Login action.
54
     *
55
     * @return Response|string
56
     */
57
    public function actionLogin()
58
    {
59
        if (!Yii::$app->user->isGuest) {
60
            return $this->goHome();
61
        }
62
63
        $model = new LoginForm();
64
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
65
            return $this->goBack();
66
        }
67
68
        $model->password = '';
69
        return $this->render('login', [
70
            'model' => $model,
71
        ]);
72
    }
73
74
    /**
75
     * Logout action.
76
     *
77
     * @return Response
78
     */
79
    public function actionLogout()
80
    {
81
        Yii::$app->user->logout();
82
83
        return $this->goHome();
84
    }
85
86
    /**
87
     * Requests password reset.
88
     *
89
     * @return string|\yii\web\Response
90
     */
91
    public function actionRequestPasswordReset()
92
    {
93
        $model = new PasswordResetRequestForm();
94
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
95
            if ($model->sendEmail()) {
96
                return $this->processGoHome(Module::t('module', 'To the address {:Email} We sent you a letter with further instructions, check mail.', [':Email' => $model->email]));
97
            } else {
98
                Yii::$app->session->setFlash('error', Module::t('module', 'Sorry, we are unable to reset password.'));
99
            }
100
        }
101
        return $this->render('requestPasswordResetToken', [
102
            'model' => $model,
103
        ]);
104
    }
105
106
    /**
107
     * @param string $message
108
     * @param string $type
109
     * @return \yii\web\Response
110
     */
111
    public function processGoHome($message = '', $type = 'success')
112
    {
113
        if (!empty($message)) {
114
            Yii::$app->session->setFlash($type, $message);
115
        }
116
        return $this->goHome();
117
    }
118
119
    /**
120
     * Resets password.
121
     *
122
     * @param string $token
123
     * @return string|\yii\web\Response
124
     * @throws BadRequestHttpException
125
     */
126
    public function actionResetPassword($token)
127
    {
128
        try {
129
            $model = new ResetPasswordForm($token);
130
        } catch (InvalidArgumentException $e) {
131
            throw new BadRequestHttpException($e->getMessage());
132
        }
133
134
        if ($model->load(Yii::$app->request->post()) && $this->processResetPassword($model)) {
135
            return $this->processGoHome(Module::t('module', 'The new password was successfully saved.'));
136
        }
137
138
        return $this->render('resetPassword', [
139
            'model' => $model,
140
        ]);
141
    }
142
143
    /**
144
     * @inheritdoc
145
     * @param $model ResetPasswordForm
146
     * @return bool
147
     */
148
    public function processResetPassword($model)
149
    {
150
        if ($model->validate() && $model->resetPassword()) {
151
            return true;
152
        }
153
        return false;
154
    }
155
156
    /**
157
     * Signs users up.
158
     *
159
     * @return string|Response
160
     * @throws \yii\base\Exception
161
     */
162
    public function actionSignup()
163
    {
164
        $model = new SignupForm();
165
        if ($model->load(Yii::$app->request->post())) {
166
            if ($model->signup()) {
167
                return $this->processGoHome(Module::t('module', 'It remains to activate the account, check your mail.'));
168
            }
169
        }
170
        return $this->render('signup', [
171
            'model' => $model,
172
        ]);
173
    }
174
175
    /**
176
     * @param string $token
177
     * @return Response
178
     * @throws BadRequestHttpException
179
     * @throws \Exception
180
     */
181
    public function actionEmailConfirm($token)
182
    {
183
        try {
184
            $model = new EmailConfirmForm($token);
185
        } catch (\InvalidArgumentException $e) {
186
            throw new BadRequestHttpException($e->getMessage());
187
        }
188
189
        if ($model->confirmEmail()) {
190
            return $this->processGoHome(Module::t('module', 'Thank you for registering! Now you can log in using your credentials.'));
191
        }
192
        return $this->processGoHome(Module::t('module', 'Error sending message!'), 'error');
193
    }
194
}
195