Completed
Pull Request — master (#64)
by Emanuele
03:40 queued 12s
created

Feature::addFeature()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
1
<?php
2
3
namespace Ae\FeatureBundle\Entity;
4
5
use DateTime;
6
use DateTimeInterface;
7
use Doctrine\Common\Collections\ArrayCollection;
8
use Doctrine\ORM\Mapping as ORM;
9
10
/**
11
 * Feature entity.
12
 *
13
 * @ORM\Table(name="application_feature")
14
 * @ORM\Entity
15
 */
16
class Feature
17
{
18
    /**
19
     * @var int
20
     *
21
     * @ORM\Column(type="integer")
22
     * @ORM\Id
23
     * @ORM\GeneratedValue(strategy="AUTO")
24
     */
25
    private $id;
26
27
    /**
28
     * @var string
29
     *
30
     * @ORM\Column(length=250)
31
     */
32
    private $name;
33
34
    /**
35
     * @var bool
36
     *
37
     * @ORM\Column(type="boolean")
38
     */
39
    private $enabled = false;
40
41
    /**
42
     * @var string
43
     *
44
     * @ORM\Column(type="text", nullable=true)
45
     */
46
    private $role;
47
48
    /**
49
     * @var ArrayCollection
50
     *
51
     * @ORM\OneToMany(targetEntity="Feature", mappedBy="parent")
52
     */
53
    private $children;
54
55
    /**
56
     * @var Feature
57
     *
58
     * @ORM\ManyToOne(targetEntity="Feature", inversedBy="children", cascade={"persist", "remove"})
59
     */
60
    private $parent;
61
62
    /**
63
     * @var string|null
64
     *
65
     * @ORM\Column(nullable=true)
66
     */
67
    private $description;
68
69
    /**
70
     * @var DateTimeInterface|null
71
     *
72
     * @ORM\Column(type="datetime", nullable=true)
73
     */
74
    private $expiration;
75
76 13
    public function __construct()
77
    {
78 13
        $this->children = new ArrayCollection();
79 13
    }
80
81
    public function __toString()
82
    {
83
        return $this->getName();
84
    }
85
86
    /**
87
     * Get id.
88
     *
89
     * @return int
90
     */
91
    public function getId()
92
    {
93
        return $this->id;
94
    }
95
96
    /**
97
     * Set parent.
98
     *
99
     * @param Feature $parent
100
     */
101 6
    public function setParent(Feature $parent)
102
    {
103 6
        $this->parent = $parent;
104 6
    }
105
106
    /**
107
     * Get parent.
108
     *
109
     * @return Feature
110
     */
111 6
    public function getParent()
112
    {
113 6
        return $this->parent;
114
    }
115
116
    /**
117
     * Set name.
118
     *
119
     * @param string $name
120
     */
121
    public function setName($name)
122
    {
123
        $this->name = $name;
124
    }
125
126
    /**
127
     * Get name.
128
     *
129
     * @return string
130
     */
131
    public function getName()
132
    {
133
        return $this->name;
134
    }
135
136
    /**
137
     * Set enabled.
138
     *
139
     * @param bool $enabled
140
     */
141 3
    public function setEnabled($enabled)
142
    {
143 3
        $this->enabled = $enabled;
144 3
    }
145
146
    /**
147
     * Get enabled.
148
     *
149
     * @return bool
150
     */
151 4
    public function getEnabled()
152
    {
153 4
        return $this->enabled;
154
    }
155
156
    /**
157
     * Set role.
158
     *
159
     * @param string $role
160
     */
161 4
    public function setRole($role)
162
    {
163 4
        $this->role = $role;
164 4
    }
165
166
    /**
167
     * Get role.
168
     *
169
     * @return string
170
     */
171 1
    public function getRole()
172
    {
173 1
        return $this->role;
174
    }
175
176 3
    public function hasRole(): bool
177
    {
178 3
        return !empty($this->role);
179
    }
180
181 2
    public function hasParentRole(): bool
182
    {
183 2
        return $this->parent instanceof self && $this->parent->hasRole();
184
    }
185
186 1
    public function requiresRoleCheck(): bool
187
    {
188 1
        return $this->hasRole() || $this->hasParentRole();
189
    }
190
191 2
    public function getParentRole()
192
    {
193 2
        return $this->getParent() ? $this->getParent()->getRole() : null;
194
    }
195
196
    /**
197
     * Add children.
198
     *
199
     * @param Feature $children
200
     */
201 1
    public function addFeature(Feature $children)
202
    {
203 1
        $this->children[] = $children;
204 1
    }
205
206
    /**
207
     * Get children.
208
     *
209
     * @return ArrayCollection
210
     */
211 1
    public function getChildren()
212
    {
213 1
        return $this->children;
214
    }
215
216 4
    public function isEnabled()
217
    {
218 4
        return $this->getEnabled() && ($this->getParent() ? $this->getParent()->getEnabled() : true);
219
    }
220
221
    /**
222
     * Get description.
223
     *
224
     * @return string|null
225
     */
226 1
    public function getDescription()
227
    {
228 1
        return $this->description;
229
    }
230
231
    /**
232
     * Set description.
233
     *
234
     * @param string|null $description
235
     */
236 1
    public function setDescription($description)
237
    {
238 1
        $this->description = $description;
239 1
    }
240
241 1
    public function setExpiration(?DateTimeInterface $expiration)
242
    {
243 1
        $this->expiration = $expiration;
244 1
    }
245
246 1
    public function hasExpiration(): bool
247
    {
248 1
        return $this->expiration instanceof DateTimeInterface;
249
    }
250
251 1
    public function getExpiration(): ?DateTimeInterface
252
    {
253 1
        return $this->expiration;
254
    }
255
256 1
    public function isExpired(): bool
257
    {
258 1
        return $this->hasExpiration()
259 1
            && $this->expiration < new DateTime();
260
    }
261
}
262