Completed
Push — master ( 695c23...79f10c )
by Igor
03:38
created

SocialController::actionSignup()   C

Complexity

Conditions 7
Paths 5

Size

Total Lines 35
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 35
rs 6.7272
c 0
b 0
f 0
cc 7
eloc 22
nc 5
nop 0
1
<?php
2
3
namespace app\modules\auth\controllers;
4
5
use Yii;
6
use app\modules\auth\services\SocialAuth;
7
use app\modules\auth\models\forms\SignupProviderForm;
8
9
class SocialController extends \yii\web\Controller
10
{
11
    /**
12
     * @inheritdoc
13
     */
14
    public function behaviors()
15
    {
16
        return [
17
            'access' => [
18
                'class' => 'yii\filters\AccessControl',
19
                'rules' => [
20
                    [
21
                        'actions' => [
22
                            'index',
23
                            'signup',
24
                        ],
25
                        'allow' => true,
26
                        'roles' => ['?'],
27
                    ],
28
                ],
29
            ],
30
        ];
31
    }
32
33
    /**
34
     * @inheritdoc
35
     */
36
    public function actions()
37
    {
38
        return [
39
            'index' => [
40
                'class' => 'yii\authclient\AuthAction',
41
                'successCallback' => [$this, 'successCallback'],
42
                'successUrl' => '/auth/social/signup'
43
            ],
44
        ];
45
    }
46
47
    public function successCallback($client)
48
    {
49
        Yii::$app->session['authClient'] = $client;
50
    }
51
52
    public function redirect($url, $statusCode = 302)
53
    {
54
        Yii::$app->session['authClient'] = null;
55
        return parent::redirect($url, $statusCode);
56
    }
57
58
    public function actionSignup()
59
    {
60
        if (Yii::$app->session['authClient'] === null) {
61
            return $this->redirect(['/']);
62
        }
63
64
        $socialAuth = Yii::$container->get(SocialAuth::class, [Yii::$app->session['authClient']]);
65
        $user = $socialAuth->prepareUser();
66
        $model = Yii::$container->get(SignupProviderForm::class, [$user]);
67
68
        if (!$user->isNewRecord) {
69
            if ($user->isActive()) {
70
                $model->login();
71
            } else {
72
                Yii::$app->session->setFlash('error', $user->getStatusDescription());
73
            }
74
            return $this->redirect(['/']);
75
        }
76
77
        if ($model->validate() || ($model->load(Yii::$app->request->post()) && $model->validate())) {
78
            $model->signup();
79
            $model->sendEmail();
80
81
            Yii::$app->session->setFlash(
82
                'success',
83
                Yii::t('app.msg', 'Please activate your account') . '. ' .
84
                Yii::t('app.msg', 'A letter for activation was sent to {email}', ['email' => $model->email])
85
            );
86
            return $this->redirect(['/']);
87
        }
88
89
        return $this->render('signup', [
90
            'model' => $model
91
        ]);
92
    }
93
}
94