Completed
Push — master ( 22d22f...259b7d )
by Gabriel
19:09
created

ClientHasGrantsTrait::initGrantsFromDb()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 3.0416

Importance

Changes 0
Metric Value
cc 3
nc 4
nop 1
dl 0
loc 9
ccs 5
cts 6
cp 0.8333
crap 3.0416
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
namespace ByTIC\Hello\Models\Clients\Traits;
4
5
use ByTIC\Hello\Utility\GrantsHelper;
6
7
/**
8
 * Trait ClientHasGrantsTrait
9
 * @package ByTIC\Hello\Models\Clients\Traits
10
 */
11
trait ClientHasGrantsTrait
12
{
13
    protected $grants = [];
14
15
    /**
16
     * @return bool
17
     */
18
    public function firstParty(): bool
19
    {
20
        return $this->hasGrant(GrantsHelper::GRANT_TYPE_USER_CREDENTIALS);
21
    }
22
23
    /**
24
     * @param string|array $grants
25
     * @see GrantHelper::GRANT_TYPE_*
26
     */
27 7
    public function addGrants($grants)
28
    {
29 7
        $grants = is_array($grants) ? $grants : [$grants];
30 7
        $this->setGrants(array_unique(array_merge($this->grants, $grants)));
31 7
    }
32
33
    /**
34
     * @param string|array $grants
35
     * @see GrantHelper::GRANT_TYPE_*
36
     */
37
    public function removeGrants($grants)
38
    {
39
        if (($key = array_search($grants, $this->grants)) !== false) {
40
            unset($this->grants[$key]);
41
        }
42
        $this->updateGrantsDbField();
43
    }
44
45
    /**
46
     * @return array
47
     */
48 11
    public function getGrants(): array
49
    {
50 11
        return $this->grants;
51
    }
52
53
    /**
54
     * @param array $grants
55
     */
56 7
    public function setGrants(array $grants)
57
    {
58 7
        $this->grants = $grants;
59 7
        $this->updateGrantsDbField();
60 7
    }
61
62
    /**
63
     * @param $grant
64
     * @return bool
65
     */
66
    public function handlesGrant($grant)
67
    {
68
        return $this->hasGrant($grant);
69
    }
70
71
    /**
72
     * @param string $grant
73
     * @return bool
74
     * @see GrantHelper::GRANT_TYPE_*
75
     */
76 1
    public function hasGrant(string $grant): bool
77
    {
78 1
        return array_search($grant, $this->grants) !== false;
79
    }
80
81 7
    protected function updateGrantsDbField()
82
    {
83 7
        $this->_data['grant_types'] = implode(',', $this->getGrants());
0 ignored issues
show
Bug introduced by
The property _data does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
84 7
    }
85
86
    /**
87
     * @param null $data
88
     */
89 2
    protected function initGrantsFromDb($data = null)
90
    {
91 2
        $data = $data === null ? $this->grant_types : $data;
0 ignored issues
show
Bug introduced by
The property grant_types does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
Unused Code introduced by
$data is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
92 2
        if (!empty($this->grant_types)) {
93 2
            $this->grants = explode(',', $this->grant_types);
94
        } else {
95
            $this->grants = [];
96
        }
97 2
    }
98
}
99