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