UserSearch::search()   A
last analyzed

Complexity

Conditions 3
Paths 2

Size

Total Lines 33

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 7.608

Importance

Changes 0
Metric Value
dl 0
loc 33
rs 9.392
c 0
b 0
f 0
ccs 2
cts 10
cp 0.2
cc 3
nc 2
nop 1
crap 7.608
1
<?php
2
3
namespace app\modules\admin\models\search;
4
5
use yii\data\ActiveDataProvider;
6
use app\models\entity\User;
7
8
/**
9
 * UserSearch represents the model behind the search form about `app\models\entity\User`
10
 */
11
class UserSearch extends User
12
{
13
    public $date_create_start;
14
    public $date_create_end;
15
    public $date_login_start;
16 6
    public $date_login_end;
17
18
    /**
19
     * @inheritdoc
20 6
     */
21
    public function rules()
22
    {
23
        return [
24
            [['email', 'role_name'], 'string'],
25
26 6
            ['id', 'number'],
27
28
            [
29
                [
30
                    'date_create_start',
31
                    'date_create_end',
32
                    'date_login_start',
33
                    'date_login_end'
34
                ], 'date', 'format' => 'yyyy-mm-dd'
35
            ],
36 6
37
            ['status', 'integer'],
38 6
            ['status', 'in', 'range' => array_keys(User::getStatuses())],
39
        ];
40 6
    }
41 6
42
    /**
43
     * Search by request criteria
44 6
     *
45
     * @param array|null Filter params
46
     * @return ActiveDataProvider Data provider
47
     */
48
    public function search($params)
49
    {
50
        $query = User::find()->with('role');
51
52 6
        $dataProvider = new ActiveDataProvider([
53 6
            'query' => $query,
54
            'sort' => [
55
                'defaultOrder' => [
56
                    'date_create' => SORT_DESC,
57
                ]
58
            ],
59
            'pagination' => [
60
                'pageSize' => 50,
61
            ],
62
        ]);
63
64
        if (!($this->load($params) && $this->validate())) {
65
            return $dataProvider;
66
        }
67
68
        $query->andFilterWhere([
69
            'id' => $this->id,
70
            'status' => $this->status,
71
            'role_name' => $this->role_name,
72
        ]);
73
74
        $query->andFilterWhere(['between', 'DATE(date_create)', $this->date_create_start, $this->date_create_end]);
75
        $query->andFilterWhere(['between', 'DATE(date_login)', $this->date_login_start, $this->date_login_end]);
76
77
        $query->andFilterWhere(['like', 'user.email', $this->email]);
78
79
        return $dataProvider;
80
    }
81
}
82