UserPanel::save()   B
last analyzed

Complexity

Conditions 5
Paths 9

Size

Total Lines 56

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 56
rs 8.6488
c 0
b 0
f 0
cc 5
nc 9
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/**
4
 *  _   __ __ _____ _____ ___  ____  _____
5
 * | | / // // ___//_  _//   ||  __||_   _|
6
 * | |/ // /(__  )  / / / /| || |     | |
7
 * |___//_//____/  /_/ /_/ |_||_|     |_|
8
 * @link https://vistart.me/
9
 * @copyright Copyright (c) 2016 - 2017 vistart
10
 * @license https://vistart.me/license/
11
 */
12
13
namespace rhosocial\user\debug\panels;
14
15
use Yii;
16
use yii\data\ArrayDataProvider;
17
use yii\debug\Panel;
18
use yii\db\ActiveRecord;
19
20
/**
21
 * Debugger panel that collects and displays user data.
22
 *
23
 * @version 1.0
24
 * @author vistart <[email protected]>
25
 */
26
class UserPanel extends Panel
27
{
28
    /**
29
     * @inheritdoc
30
     */
31
    public function getName()
32
    {
33
        return 'User';
34
    }
35
36
    /**
37
     * @inheritdoc
38
     */
39
    public function getSummary()
40
    {
41
        return Yii::$app->view->render('@rhosocial/user/debug/views/user/summary', ['panel' => $this]);
42
    }
43
44
    /**
45
     * @inheritdoc
46
     */
47
    public function getDetail()
48
    {
49
        return Yii::$app->view->render('@rhosocial/user/debug/views/user/detail', ['panel' => $this]);
50
    }
51
52
    /**
53
     * @inheritdoc
54
     */
55
    public function save()
56
    {
57
        $data = Yii::$app->user->identity;
58
59
        if (!isset($data)) {
60
            return ;
61
        }
62
63
        $authManager = Yii::$app->getAuthManager();
64
65
        $rolesProvider = null;
66
        $permissionsProvider = null;
67
68
        if ($authManager) {
69
            $rolesProvider = new ArrayDataProvider([
70
                'allModels' => $authManager->getRolesByUser($data),
71
            ]);
72
            $rolesProvider->pagination->defaultPageSize = 20;
73
            $rolesProvider->pagination->pageParam = 'role-page';
74
            $rolesProvider->pagination->pageSizeParam = 'role-per-page';
75
            $rolesProvider->sort->sortParam = 'role-sort';
76
77
            $permissionsProvider = new ArrayDataProvider([
78
                'allModels' => $authManager->getPermissionsByUser($data),
79
            ]);
80
            $permissionsProvider->pagination->defaultPageSize = 20;
81
            $permissionsProvider->pagination->pageParam = 'permission-page';
82
            $permissionsProvider->pagination->pageSizeParam = 'permission-per-page';
83
            $permissionsProvider->sort->sortParam = 'permission-sort';
84
        }
85
86
        if (!class_exists($data->loginLogClass)) {
87
            $loginLogProvider = 'Login Log Class Not Specified.';
88
        } else {
89
            $loginLogProvider = new ArrayDataProvider([
90
                'allModels' => $data->getLoginLogs(),
91
            ]);
92
            $loginLogProvider->pagination->defaultPageSize = 20;
93
            $loginLogProvider->pagination->pageParam = 'login-log-page';
94
            $loginLogProvider->pagination->pageSizeParam = 'login-log-per-page';
95
            $loginLogProvider->sort->sortParam = 'login-log-sort';
96
        }
97
98
        $attributes = array_keys(get_object_vars($data));
99
        if ($data instanceof ActiveRecord) {
100
            $attributes = array_keys($data->getAttributes());
101
        }
102
        
103
        return [
104
            'identity' => $data,
105
            'attributes' => $attributes,
106
            'rolesProvider' => $rolesProvider,
107
            'permissionsProvider' => $permissionsProvider,
108
            'loginLogProvider' => $loginLogProvider,
109
        ];
110
    }
111
}
112