Completed
Push — master ( aabc6b...28d361 )
by Timur
11:09
created

AchievementCriteria::achievementId()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace Zurbaev\Achievements;
4
5
class AchievementCriteria
6
{
7
    /**
8
     * @var array
9
     */
10
    protected $data = [];
11
12
    /**
13
     * @var AchievementCriteriaProgress
14
     */
15
    protected $progress;
16
17
    /**
18
     * AchievementCriteria constructor.
19
     *
20
     * @param array $data
21
     */
22
    public function __construct(array $data)
23
    {
24
        $this->data = $data;
25
    }
26
27
    /**
28
     * Criteria ID.
29
     *
30
     * @return mixed|null
31
     */
32
    public function id()
33
    {
34
        return $this->data['id'] ?? null;
35
    }
36
37
    /**
38
     * Achievement ID.
39
     *
40
     * @return mixed|null
41
     */
42
    public function achievementId()
43
    {
44
        return $this->data['achievement_id'] ?? null;
45
    }
46
47
    /**
48
     * Criteria type.
49
     *
50
     * @return string|null
51
     */
52
    public function type()
53
    {
54
        return $this->data['type'] ?? null;
55
    }
56
57
    /**
58
     * Criteria requirements.
59
     *
60
     * @return array
61
     */
62 View Code Duplication
    public function requirements(): array
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
63
    {
64
        if (!isset($this->data['requirements']) || !is_array($this->data['requirements'])) {
65
            return [];
66
        }
67
68
        return $this->data['requirements'];
69
    }
70
71
    /**
72
     * Max criteria value.
73
     *
74
     * @return int
75
     */
76
    public function maxValue(): int
77
    {
78
        return intval($this->data['max_value'] ?? 0);
79
    }
80
81
    /**
82
     * Get single requirement by name.
83
     *
84
     * @param string $requirement
85
     * @param mixed  $default     =  null
86
     *
87
     * @return mixed|null
88
     */
89
    public function requirement(string $requirement, $default = null)
90
    {
91
        return $this->requirements()[$requirement] ?? $default;
92
    }
93
94
    /**
95
     * Determines if criteria has given requirement.
96
     *
97
     * @param string $requirement
98
     *
99
     * @return bool
100
     */
101
    public function hasRequirement(string $requirement): bool
102
    {
103
        return isset($this->requirements()[$requirement]);
104
    }
105
106
    /**
107
     * Criteria progress.
108
     *
109
     * @return AchievementCriteriaProgress
110
     */
111
    public function progress(): AchievementCriteriaProgress
112
    {
113
        if (!is_null($this->progress)) {
114
            return $this->progress;
115
        }
116
117
        return $this->progress = new AchievementCriteriaProgress(
118
            $this->data['progress']['value'] ?? 0,
119
            $this->data['progress']['changed'] ?? false,
120
            $this->data['progress']['completed'] ?? false
121
        );
122
    }
123
124
    /**
125
     * Determines if criteria has previously stored progress.
126
     *
127
     * @return bool
128
     */
129
    public function hasProgress(): bool
130
    {
131
        return !empty($this->data['progress']);
132
    }
133
134
    /**
135
     * Determines if criteria was already completed.
136
     *
137
     * @return bool
138
     */
139
    public function completed(): bool
140
    {
141
        return boolval($this->progress()->completed ?? false);
142
    }
143
}
144