Completed
Push — 5.0 ( a48099...63af02 )
by
unknown
11:33
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
    /**
27
     * @var string
28
     *
29
     * @Gedmo\Translatable
30
     * @ORM\Column(type="string")
31
     * @Assert\NotBlank()
32
     */
33
    protected $name;
34
35
    /**
36
     * @var string
37
     *
38
     * @Gedmo\Locale
39
     * Used locale to override Translation listener`s locale
40
     * this is not a mapped field of entity metadata, just a simple property
41
     */
42
    protected $locale;
43
44
    /**
45
     * @var Folder
46
     *
47
     * @ORM\ManyToOne(targetEntity="Folder", inversedBy="children", fetch="LAZY")
48
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true)
49
     * @Gedmo\TreeParent
50
     */
51
    protected $parent;
52
53
    /**
54
     * @var ArrayCollection
55
     *
56
     * @ORM\OneToMany(targetEntity="Folder", mappedBy="parent", fetch="LAZY")
57
     * @ORM\OrderBy({"lft" = "ASC"})
58
     */
59
    protected $children;
60
61
    /**
62
     * @var ArrayCollection
63
     *
64
     * @ORM\OneToMany(targetEntity="Media", mappedBy="folder", fetch="LAZY")
65
     * @ORM\OrderBy({"name" = "ASC"})
66
     */
67
    protected $media;
68
69
    /**
70
     * @var \DateTime
71
     *
72
     * @ORM\Column(type="datetime", name="created_at")
73
     */
74
    protected $createdAt;
75
76
    /**
77
     * @var \DateTime
78
     *
79
     * @ORM\Column(type="datetime", name="updated_at")
80
     */
81
    protected $updatedAt;
82
83
    /**
84
     * @var string
85
     *
86
     * @ORM\Column(type="string", nullable=true)
87
     */
88
    protected $rel;
89
90
    /**
91
     * @var string
92
     *
93
     * @ORM\Column(type="string", name="internal_name", nullable=true)
94
     */
95
    protected $internalName;
96
97
    /**
98
     * @var int
99
     *
100
     * @ORM\Column(name="lft", type="integer", nullable=true)
101
     * @Gedmo\TreeLeft
102
     */
103
    protected $lft;
104
105
    /**
106
     * @var int
107
     *
108
     * @ORM\Column(name="lvl", type="integer", nullable=true)
109
     * @Gedmo\TreeLevel
110
     */
111
    protected $lvl;
112
113
    /**
114
     * @var int
115
     *
116
     * @ORM\Column(name="rgt", type="integer", nullable=true)
117
     * @Gedmo\TreeRight
118
     */
119
    protected $rgt;
120
121
    /**
122
     * @var bool
123
     *
124
     * @ORM\Column(type="boolean")
125
     */
126
    protected $deleted;
127
128
    /**
129
     * constructor
130
     */
131 View Code Duplication
    public function __construct()
132
    {
133
        $this->children = new ArrayCollection();
134
        $this->media = new ArrayCollection();
135
        $this->setCreatedAt(new \DateTime());
136
        $this->setUpdatedAt(new \DateTime());
137
        $this->deleted = false;
138
    }
139
140
    /**
141
     * @return string
142
     */
143
    public function getTranslatableLocale()
144
    {
145
        return $this->locale;
146
    }
147
148
    /**
149
     * @param string $locale
150
     *
151
     * @return Folder
152
     */
153
    public function setTranslatableLocale($locale)
154
    {
155
        $this->locale = $locale;
156
157
        return $this;
158
    }
159
160
    /**
161
     * @return string
162
     */
163
    public function getRel()
164
    {
165
        return $this->rel;
166
    }
167
168
    /**
169
     * @param string $rel
170
     *
171
     * @return Folder
172
     */
173
    public function setRel($rel)
174
    {
175
        $this->rel = $rel;
176
177
        return $this;
178
    }
179
180
    /**
181
     * Get createdAd
182
     *
183
     * @return \DateTime
184
     */
185
    public function getCreatedAt()
186
    {
187
        return $this->createdAt;
188
    }
189
190
    /**
191
     * Set createdAd
192
     *
193
     * @param \DateTime $createdAt
194
     *
195
     * @return Folder
196
     */
197
    public function setCreatedAt($createdAt)
198
    {
199
        $this->createdAt = $createdAt;
200
201
        return $this;
202
    }
203
204
    /**
205
     * Get updatedAt
206
     *
207
     * @return \DateTime
208
     */
209
    public function getUpdatedAt()
210
    {
211
        return $this->updatedAt;
212
    }
213
214
    /**
215
     * Set updatedAt
216
     *
217
     * @param \DateTime $updatedAt
218
     *
219
     * @return Folder
220
     */
221
    public function setUpdatedAt($updatedAt)
222
    {
223
        $this->updatedAt = $updatedAt;
224
225
        return $this;
226
    }
227
228
    /**
229
     * @return Folder[]:
230
     */
231 View Code Duplication
    public function getParents()
0 ignored issues
show
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...
232
    {
233
        $parent = $this->getParent();
234
        $parents = array();
235
        while ($parent !== null) {
236
            $parents[] = $parent;
237
            $parent = $parent->getParent();
238
        }
239
240
        return array_reverse($parents);
241
    }
242
243
    /**
244
     * Get parent
245
     *
246
     * @return Folder
247
     */
248
    public function getParent()
249
    {
250
        return $this->parent;
251
    }
252
253
    /**
254
     * Set parent
255
     *
256
     * @param Folder $parent
257
     *
258
     * @return Folder
259
     */
260
    public function setParent(Folder $parent = null)
261
    {
262
        $this->parent = $parent;
263
264
        return $this;
265
    }
266
267
    /**
268
     * Add a child
269
     *
270
     * @param Folder $child
271
     *
272
     * @return Folder
273
     */
274
    public function addChild(Folder $child)
275
    {
276
        $this->children[] = $child;
277
        $child->setParent($this);
278
279
        return $this;
280
    }
281
282
    /**
283
     * Add file
284
     *
285
     * @param Media $media
286
     *
287
     * @return Folder
288
     */
289
    public function addMedia(Media $media)
290
    {
291
        $this->media[] = $media;
292
293
        return $this;
294
    }
295
296
    /**
297
     * Get media
298
     *
299
     * @param bool $includeDeleted
300
     *
301
     * @return ArrayCollection
302
     */
303 View Code Duplication
    public function getMedia($includeDeleted = false)
304
    {
305
        if ($includeDeleted) {
306
            return $this->media;
307
        }
308
309
        return $this->media->filter(
310
            function (Media $entry) {
311
                if ($entry->isDeleted()) {
312
                    return false;
313
                }
314
315
                return true;
316
            }
317
        );
318
    }
319
320
    /**
321
     * @param int $id
322
     *
323
     * @return bool
324
     */
325
    public function hasActive($id)
326
    {
327
        foreach ($this->getChildren() as $child) {
328
            if ($child->hasActive($id) || $child->getId() == $id) {
329
                return true;
330
            }
331
        }
332
333
        return false;
334
    }
335
336
    /**
337
     * Get child folders
338
     *
339
     * @param bool $includeDeleted
340
     *
341
     * @return ArrayCollection
342
     */
343 View Code Duplication
    public function getChildren($includeDeleted = false)
344
    {
345
        if ($includeDeleted) {
346
            return $this->children;
347
        }
348
349
        return $this->children->filter(
350
            function (Folder $entry) {
351
                if ($entry->isDeleted()) {
352
                    return false;
353
                }
354
355
                return true;
356
            }
357
        );
358
    }
359
360
    /**
361
     * @param ArrayCollection $children
362
     *
363
     * @return Folder
364
     */
365
    public function setChildren($children)
366
    {
367
        $this->children = $children;
368
369
        return $this;
370
    }
371
372
    /**
373
     * @return bool
374
     */
375
    public function isDeleted()
376
    {
377
        return $this->deleted;
378
    }
379
380
    /**
381
     * @param bool $deleted
382
     *
383
     * @return Folder
384
     */
385
    public function setDeleted($deleted)
386
    {
387
        $this->deleted = $deleted;
388
389
        return $this;
390
    }
391
392
    /**
393
     * @return string
394
     */
395
    public function getInternalName()
396
    {
397
        return $this->internalName;
398
    }
399
400
    /**
401
     * @param string $internalName
402
     *
403
     * @return Folder
404
     */
405
    public function setInternalName($internalName)
406
    {
407
        $this->internalName = $internalName;
408
409
        return $this;
410
    }
411
412
    /**
413
     * @return string
414
     */
415
    public function __toString()
416
    {
417
        return $this->getName();
418
    }
419
420
    /**
421
     * @return string
422
     */
423
    public function getName()
424
    {
425
        return $this->name;
426
    }
427
428
    /**
429
     * @param string $name
430
     *
431
     * @return Folder
432
     */
433
    public function setName($name)
434
    {
435
        $this->name = $name;
436
437
        return $this;
438
    }
439
440
    /**
441
     * @param int $lft
442
     *
443
     * @return Folder
444
     */
445
    public function setLeft($lft)
446
    {
447
        $this->lft = $lft;
448
449
        return $this;
450
    }
451
452
    /**
453
     * @return int
454
     */
455
    public function getLeft()
456
    {
457
        return $this->lft;
458
    }
459
460
    /**
461
     * @param int $lvl
462
     *
463
     * @return Folder
464
     */
465
    public function setLevel($lvl)
466
    {
467
        $this->lvl = $lvl;
468
469
        return $this;
470
    }
471
472
    /**
473
     * @param int $rgt
474
     *
475
     * @return Folder
476
     */
477
    public function setRight($rgt)
478
    {
479
        $this->rgt = $rgt;
480
481
        return $this;
482
    }
483
484
    /**
485
     * @return int
486
     */
487
    public function getRight()
488
    {
489
        return $this->rgt;
490
    }
491
492
    /**
493
     * @return string
494
     */
495
    public function getOptionLabel()
496
    {
497
        return str_repeat(
498
            '-',
499
            $this->getLevel()
500
        ) . ' ' . $this->getName();
501
    }
502
503
    /**
504
     * @return int
505
     */
506
    public function getLevel()
507
    {
508
        return $this->lvl;
509
    }
510
511
    /**
512
     * @ORM\PreUpdate
513
     */
514
    public function preUpdate()
515
    {
516
        $this->setUpdatedAt(new \DateTime());
517
    }
518
}
519