Completed
Push — master ( ae5e03...0447ee )
by Jeroen
10:35 queued 04:37
created

src/Kunstmaan/MediaBundle/Entity/Folder.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Kunstmaan\MediaBundle\Entity;
4
5
use Doctrine\Common\Collections\ArrayCollection;
6
use Doctrine\ORM\Mapping as ORM;
7
use Gedmo\Mapping\Annotation as Gedmo;
8
use Gedmo\Tree\Node as GedmoNode;
9
use Kunstmaan\AdminBundle\Entity\AbstractEntity;
10
use Symfony\Component\Validator\Constraints as Assert;
11
12
/**
13
 * Class that defines a folder from the MediaBundle in the database
14
 *
15
 * @ORM\Entity(repositoryClass="Kunstmaan\MediaBundle\Repository\FolderRepository")
16
 * @ORM\Table(name="kuma_folders", indexes={
17
 *      @ORM\Index(name="idx_folder_internal_name", columns={"internal_name"}),
18
 *      @ORM\Index(name="idx_folder_name", columns={"name"}),
19
 *      @ORM\Index(name="idx_folder_deleted", columns={"deleted"})
20
 * })
21
 * @Gedmo\Tree(type="nested")
22
 * @ORM\HasLifecycleCallbacks
23
 */
24
class Folder extends AbstractEntity implements GedmoNode
25
{
26
    const TYPE_FILES = 'files';
27
    const TYPE_IMAGE = 'image';
28
    const TYPE_MEDIA = 'media';
29
    const TYPE_SLIDESHOW = 'slideshow';
30
    const TYPE_VIDEO = 'video';
31
32
    /**
33
     * @var string
34
     *
35
     * @Gedmo\Translatable
36
     * @ORM\Column(type="string")
37
     * @Assert\NotBlank()
38
     */
39
    protected $name;
40
41
    /**
42
     * @var string
43
     *
44
     * @Gedmo\Locale
45
     * Used locale to override Translation listener`s locale
46
     * this is not a mapped field of entity metadata, just a simple property
47
     */
48
    protected $locale;
49
50
    /**
51
     * @var Folder
52
     *
53
     * @ORM\ManyToOne(targetEntity="Folder", inversedBy="children", fetch="LAZY")
54
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true)
55
     * @Gedmo\TreeParent
56
     */
57
    protected $parent;
58
59
    /**
60
     * @var ArrayCollection
61
     *
62
     * @ORM\OneToMany(targetEntity="Folder", mappedBy="parent", fetch="LAZY")
63
     * @ORM\OrderBy({"lft" = "ASC"})
64
     */
65
    protected $children;
66
67
    /**
68
     * @var ArrayCollection
69
     *
70
     * @ORM\OneToMany(targetEntity="Media", mappedBy="folder", fetch="LAZY")
71
     * @ORM\OrderBy({"name" = "ASC"})
72
     */
73
    protected $media;
74
75
    /**
76
     * @var \DateTime
77
     *
78
     * @ORM\Column(type="datetime", name="created_at")
79
     */
80
    protected $createdAt;
81
82
    /**
83
     * @var \DateTime
84
     *
85
     * @ORM\Column(type="datetime", name="updated_at")
86
     */
87
    protected $updatedAt;
88
89
    /**
90
     * @var string
91
     *
92
     * @ORM\Column(type="string", nullable=true)
93
     */
94
    protected $rel;
95
96
    /**
97
     * @var string
98
     *
99
     * @ORM\Column(type="string", name="internal_name", nullable=true)
100
     */
101
    protected $internalName;
102
103
    /**
104
     * @var int
105
     *
106
     * @ORM\Column(name="lft", type="integer", nullable=true)
107
     * @Gedmo\TreeLeft
108
     */
109
    protected $lft;
110
111
    /**
112
     * @var int
113
     *
114
     * @ORM\Column(name="lvl", type="integer", nullable=true)
115
     * @Gedmo\TreeLevel
116
     */
117
    protected $lvl;
118
119
    /**
120
     * @var int
121
     *
122
     * @ORM\Column(name="rgt", type="integer", nullable=true)
123
     * @Gedmo\TreeRight
124
     */
125
    protected $rgt;
126
127
    /**
128
     * @var bool
129
     *
130
     * @ORM\Column(type="boolean")
131
     */
132
    protected $deleted;
133
134
    /**
135
     * constructor
136
     */
137 24 View Code Duplication
    public function __construct()
138
    {
139 24
        $this->children = new ArrayCollection();
140 24
        $this->media = new ArrayCollection();
141 24
        $this->setCreatedAt(new \DateTime());
142 24
        $this->setUpdatedAt(new \DateTime());
143 24
        $this->deleted = false;
144 24
    }
145
146
    /**
147
     * @return array
0 ignored issues
show
Consider making the return type a bit more specific; maybe use array<string,string>.

This check looks for the generic type array as a return type and suggests a more specific type. This type is inferred from the actual code.

Loading history...
148
     */
149
    public static function allTypes()
150
    {
151
        return [
152
            self::TYPE_MEDIA => self::TYPE_MEDIA,
153
            self::TYPE_IMAGE => self::TYPE_IMAGE,
154
            self::TYPE_FILES => self::TYPE_FILES,
155
            self::TYPE_SLIDESHOW => self::TYPE_SLIDESHOW,
156
            self::TYPE_VIDEO => self::TYPE_VIDEO,
157
        ];
158
    }
159
160
    /**
161
     * @return string
162
     */
163 1
    public function getTranslatableLocale()
164
    {
165 1
        return $this->locale;
166
    }
167
168
    /**
169
     * @param string $locale
170
     *
171
     * @return Folder
172
     */
173 1
    public function setTranslatableLocale($locale)
174
    {
175 1
        $this->locale = $locale;
176
177 1
        return $this;
178
    }
179
180
    /**
181
     * @return string
182
     */
183 1
    public function getRel()
184
    {
185 1
        return $this->rel;
186
    }
187
188
    /**
189
     * @param string $rel
190
     *
191
     * @return Folder
192
     */
193 1
    public function setRel($rel)
194
    {
195 1
        $this->rel = $rel;
196
197 1
        return $this;
198
    }
199
200
    /**
201
     * Get createdAd
202
     *
203
     * @return \DateTime
204
     */
205 1
    public function getCreatedAt()
206
    {
207 1
        return $this->createdAt;
208
    }
209
210
    /**
211
     * Set createdAd
212
     *
213
     * @param \DateTime $createdAt
214
     *
215
     * @return Folder
216
     */
217 24
    public function setCreatedAt($createdAt)
218
    {
219 24
        $this->createdAt = $createdAt;
220
221 24
        return $this;
222
    }
223
224
    /**
225
     * Get updatedAt
226
     *
227
     * @return \DateTime
228
     */
229 1
    public function getUpdatedAt()
230
    {
231 1
        return $this->updatedAt;
232
    }
233
234
    /**
235
     * Set updatedAt
236
     *
237
     * @param \DateTime $updatedAt
238
     *
239
     * @return Folder
240
     */
241 24
    public function setUpdatedAt($updatedAt)
242
    {
243 24
        $this->updatedAt = $updatedAt;
244
245 24
        return $this;
246
    }
247
248
    /**
249
     * @return Folder[]:
250
     */
251 1 View Code Duplication
    public function getParents()
252
    {
253 1
        $parent = $this->getParent();
254 1
        $parents = array();
255 1
        while ($parent !== null) {
256 1
            $parents[] = $parent;
257 1
            $parent = $parent->getParent();
258
        }
259
260 1
        return array_reverse($parents);
261
    }
262
263
    /**
264
     * Get parent
265
     *
266
     * @return Folder
267
     */
268 3
    public function getParent()
269
    {
270 3
        return $this->parent;
271
    }
272
273
    /**
274
     * Set parent
275
     *
276
     * @param Folder $parent
277
     *
278
     * @return Folder
279
     */
280 4
    public function setParent(Folder $parent = null)
281
    {
282 4
        $this->parent = $parent;
283
284 4
        return $this;
285
    }
286
287
    /**
288
     * Add a child
289
     *
290
     * @param Folder $child
291
     *
292
     * @return Folder
293
     */
294 2
    public function addChild(Folder $child)
295
    {
296 2
        $this->children[] = $child;
297 2
        $child->setParent($this);
298
299 2
        return $this;
300
    }
301
302
    /**
303
     * Add file
304
     *
305
     * @param Media $media
306
     *
307
     * @return Folder
308
     */
309 2
    public function addMedia(Media $media)
310
    {
311 2
        $this->media[] = $media;
312
313 2
        return $this;
314
    }
315
316
    /**
317
     * Get media
318
     *
319
     * @param bool $includeDeleted
320
     *
321
     * @return ArrayCollection
322
     */
323 2 View Code Duplication
    public function getMedia($includeDeleted = false)
324
    {
325 2
        if ($includeDeleted) {
326 1
            return $this->media;
327
        }
328
329 2
        return $this->media->filter(
330
            function (Media $entry) {
331 2
                if ($entry->isDeleted()) {
332 1
                    return false;
333
                }
334
335 2
                return true;
336 2
            }
337
        );
338
    }
339
340
    /**
341
     * @param int $id
342
     *
343
     * @return bool
344
     */
345 1
    public function hasActive($id)
346
    {
347 1
        foreach ($this->getChildren() as $child) {
348 1
            if ($child->hasActive($id) || $child->getId() == $id) {
349 1
                return true;
350
            }
351
        }
352
353 1
        return false;
354
    }
355
356
    /**
357
     * Get child folders
358
     *
359
     * @param bool $includeDeleted
360
     *
361
     * @return ArrayCollection
362
     */
363 3 View Code Duplication
    public function getChildren($includeDeleted = false)
364
    {
365 3
        if ($includeDeleted) {
366 1
            return $this->children;
367
        }
368
369 3
        return $this->children->filter(
370
            function (Folder $entry) {
371 3
                if ($entry->isDeleted()) {
372 1
                    return false;
373
                }
374
375 3
                return true;
376 3
            }
377
        );
378
    }
379
380
    /**
381
     * @param ArrayCollection $children
382
     *
383
     * @return Folder
384
     */
385 1
    public function setChildren($children)
386
    {
387 1
        $this->children = $children;
388
389 1
        return $this;
390
    }
391
392
    /**
393
     * @return bool
394
     */
395 4
    public function isDeleted()
396
    {
397 4
        return $this->deleted;
398
    }
399
400
    /**
401
     * @param bool $deleted
402
     *
403
     * @return Folder
404
     */
405 2
    public function setDeleted($deleted)
406
    {
407 2
        $this->deleted = $deleted;
408
409 2
        return $this;
410
    }
411
412
    /**
413
     * @return string
414
     */
415 1
    public function getInternalName()
416
    {
417 1
        return $this->internalName;
418
    }
419
420
    /**
421
     * @param string $internalName
422
     *
423
     * @return Folder
424
     */
425 1
    public function setInternalName($internalName)
426
    {
427 1
        $this->internalName = $internalName;
428
429 1
        return $this;
430
    }
431
432
    /**
433
     * @return string
434
     */
435 1
    public function __toString()
436
    {
437 1
        return $this->getName();
438
    }
439
440
    /**
441
     * @return string
442
     */
443 2
    public function getName()
444
    {
445 2
        return $this->name;
446
    }
447
448
    /**
449
     * @param string $name
450
     *
451
     * @return Folder
452
     */
453 2
    public function setName($name)
454
    {
455 2
        $this->name = $name;
456
457 2
        return $this;
458
    }
459
460
    /**
461
     * @param int $lft
462
     *
463
     * @return Folder
464
     */
465 1
    public function setLeft($lft)
466
    {
467 1
        $this->lft = $lft;
468
469 1
        return $this;
470
    }
471
472
    /**
473
     * @return int
474
     */
475 1
    public function getLeft()
476
    {
477 1
        return $this->lft;
478
    }
479
480
    /**
481
     * @param int $lvl
482
     *
483
     * @return Folder
484
     */
485 2
    public function setLevel($lvl)
486
    {
487 2
        $this->lvl = $lvl;
488
489 2
        return $this;
490
    }
491
492
    /**
493
     * @param int $rgt
494
     *
495
     * @return Folder
496
     */
497 1
    public function setRight($rgt)
498
    {
499 1
        $this->rgt = $rgt;
500
501 1
        return $this;
502
    }
503
504
    /**
505
     * @return int
506
     */
507 1
    public function getRight()
508
    {
509 1
        return $this->rgt;
510
    }
511
512
    /**
513
     * @return string
514
     */
515 1
    public function getOptionLabel()
516
    {
517 1
        return str_repeat(
518 1
            '-',
519 1
            $this->getLevel()
520 1
        ) . ' ' . $this->getName();
521
    }
522
523
    /**
524
     * @return int
525
     */
526 2
    public function getLevel()
527
    {
528 2
        return $this->lvl;
529
    }
530
531
    /**
532
     * @ORM\PreUpdate
533
     */
534 1
    public function preUpdate()
535
    {
536 1
        $this->setUpdatedAt(new \DateTime());
537 1
    }
538
}
539