Collection::setIsHistoric()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 1
c 0
b 0
f 0
dl 0
loc 3
ccs 0
cts 2
cp 0
rs 10
cc 1
nc 1
nop 1
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Application\Model;
6
7
use Application\Api\Input\Operator\ExcludeSelfAndDescendantsOperatorType;
8
use Application\Enum\CollectionVisibility;
9
use Application\Repository\CollectionRepository;
10
use Application\Traits\HasInstitution;
11
use Application\Traits\HasParent;
12
use Application\Traits\HasParentInterface;
13
use Application\Traits\HasSite;
14
use Application\Traits\HasSiteInterface;
15
use Application\Traits\HasSorting;
16
use Doctrine\Common\Collections\ArrayCollection;
17
use Doctrine\Common\Collections\Collection as DoctrineCollection;
18
use Doctrine\ORM\Mapping as ORM;
19
use Ecodev\Felix\Model\Traits\HasName;
20
use GraphQL\Doctrine\Attribute as API;
21
22
/**
23
 * A collection of cards.
24
 */
25
#[ORM\Index(name: 'collection_name_idx', columns: ['name'])]
26
#[API\Filter(field: 'custom', operator: ExcludeSelfAndDescendantsOperatorType::class, type: 'id')]
27
#[ORM\Entity(CollectionRepository::class)]
28
class Collection extends AbstractModel implements HasParentInterface, HasSiteInterface
29
{
30
    use HasInstitution;
31
    use HasName;
32
    use HasParent;
33
    use HasSite;
34
    use HasSorting;
35
36
    #[ORM\Column(type: 'enum', options: ['default' => CollectionVisibility::Private])]
37
    private CollectionVisibility $visibility = CollectionVisibility::Private;
38
39
    #[ORM\Column(type: 'text')]
40
    private string $description = '';
41
42
    #[ORM\Column(type: 'boolean', options: ['default' => false])]
43
    private bool $isSource = false;
44
45
    #[ORM\Column(type: 'string', length: 191)]
46
    private string $copyrights = '';
47
48
    #[ORM\Column(type: 'string', length: 191)]
49
    private string $usageRights = '';
50
51
    #[ORM\JoinColumn(onDelete: 'CASCADE')]
52
    #[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
53
    private ?self $parent = null;
0 ignored issues
show
introduced by
The private property $parent is not used, and could be removed.
Loading history...
54
55
    /**
56
     * @var DoctrineCollection<Collection>
57
     */
58
    #[ORM\OneToMany(targetEntity: self::class, mappedBy: 'parent')]
59
    #[ORM\OrderBy(['name' => 'ASC', 'id' => 'ASC'])]
60
    private DoctrineCollection $children;
61
62
    /**
63
     * @var DoctrineCollection<User>
64
     */
65
    #[ORM\ManyToMany(targetEntity: User::class, inversedBy: 'collections')]
66
    private DoctrineCollection $users;
67
68
    #[ORM\Column(type: 'boolean', options: ['default' => false])]
69
    private bool $isHistoric = false;
70
71 10
    public function __construct()
72
    {
73 10
        $this->children = new ArrayCollection();
74 10
        $this->users = new ArrayCollection();
75
    }
76
77
    /**
78
     * Return whether this is publicly available to only to member, or only administrators, or only owner.
79
     */
80 1
    public function getVisibility(): CollectionVisibility
81
    {
82 1
        return $this->visibility;
83
    }
84
85
    /**
86
     * Set whether this is publicly available to only to member, or only administrators, or only owner.
87
     */
88 1
    public function setVisibility(CollectionVisibility $visibility): void
89
    {
90 1
        $this->visibility = $visibility;
91
    }
92
93
    /**
94
     * Set description.
95
     */
96
    public function setDescription(string $description): void
97
    {
98
        $this->description = $description;
99
    }
100
101
    /**
102
     * Get description.
103
     */
104
    public function getDescription(): string
105
    {
106
        return $this->description;
107
    }
108
109
    /**
110
     * Returns whether the collection is a source ("main" collection).
111
     */
112
    public function isSource(): bool
113
    {
114
        return $this->isSource;
115
    }
116
117
    /**
118
     * Set whether the collection is a source ("main" collection).
119
     */
120
    public function setIsSource(bool $isSource): void
121
    {
122
        $this->isSource = $isSource;
123
    }
124
125
    /**
126
     * Set copyrights.
127
     */
128
    public function setCopyrights(string $copyrights): void
129
    {
130
        $this->copyrights = $copyrights;
131
    }
132
133
    /**
134
     * Get copyrights.
135
     */
136
    public function getCopyrights(): string
137
    {
138
        return $this->copyrights;
139
    }
140
141
    /**
142
     * Set usageRights.
143
     *
144
     * @param string $usageRights
145
     */
146
    public function setUsageRights($usageRights): void
147
    {
148
        $this->usageRights = $usageRights;
149
    }
150
151
    /**
152
     * Get usageRights.
153
     */
154
    public function getUsageRights(): string
155
    {
156
        return $this->usageRights;
157
    }
158
159
    /**
160
     * Get users.
161
     */
162 3
    public function getUsers(): DoctrineCollection
163
    {
164 3
        return $this->users;
165
    }
166
167
    /**
168
     * Add User.
169
     */
170
    public function addUser(User $user): void
171
    {
172
        if (!$this->users->contains($user)) {
173
            $this->users[] = $user;
174
        }
175
    }
176
177
    /**
178
     * Remove User.
179
     */
180
    public function removeUser(User $user): void
181
    {
182
        $this->users->removeElement($user);
183
    }
184
185
    public function hasUsers(): bool
186
    {
187
        return count($this->users) > 0;
188
    }
189
190
    /**
191
     * Returns whether the collection is historic (shows icon).
192
     */
193
    public function isHistoric(): bool
194
    {
195
        return $this->isHistoric;
196
    }
197
198
    /**
199
     * Set whether the collection is historic (shows icon).
200
     */
201
    public function setIsHistoric(bool $isHistoric): void
202
    {
203
        $this->isHistoric = $isHistoric;
204
    }
205
206
    /**
207
     * Return whether this collections is an historic collection.
208
     */
209
    public function getShowHistoric(): bool
210
    {
211
        return $this->isHistoric() && $this->isSource();
212
    }
213
}
214