User::setLanguage()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 5
ccs 3
cts 3
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
declare(strict_types = 1);
3
/**
4
 * /src/Entity/User.php
5
 *
6
 * @author TLe, Tarmo Leppänen <[email protected]>
7
 */
8
9
namespace App\Entity;
10
11
use App\Doctrine\DBAL\Types\Types as AppTypes;
12
use App\Entity\Interfaces\EntityInterface;
13
use App\Entity\Interfaces\UserGroupAwareInterface;
14
use App\Entity\Interfaces\UserInterface;
15
use App\Entity\Traits\Blameable;
16
use App\Entity\Traits\Timestampable;
17
use App\Entity\Traits\UserRelations;
18
use App\Entity\Traits\Uuid;
19
use App\Enum\Language;
20
use App\Enum\Locale;
21
use App\Service\Localization;
0 ignored issues
show
Bug introduced by
The type App\Service\Localization was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
22
use App\Validator\Constraints as AppAssert;
23
use Doctrine\Common\Collections\ArrayCollection;
24
use Doctrine\DBAL\Types\Types;
25
use Doctrine\ORM\Mapping as ORM;
26
use Ramsey\Uuid\Doctrine\UuidBinaryOrderedTimeType;
27
use Ramsey\Uuid\UuidInterface;
28
use Symfony\Bridge\Doctrine\Validator\Constraints as AssertCollection;
29
use Symfony\Component\Serializer\Annotation\Groups;
30
use Symfony\Component\Validator\Constraints as Assert;
31
32
/**
33
 * Class User
34
 *
35
 * @package App\Entity
36
 * @author TLe, Tarmo Leppänen <[email protected]>
37
 */
38
#[ORM\Entity]
39
#[ORM\Table(
40
    name: 'user',
41
)]
42
#[ORM\UniqueConstraint(
43
    name: 'uq_username',
44
    columns: [
45
        'username',
46
    ],
47
)]
48
#[ORM\UniqueConstraint(
49
    name: 'uq_email',
50
    columns: [
51
        'email',
52
    ],
53
)]
54
#[ORM\ChangeTrackingPolicy('DEFERRED_EXPLICIT')]
55
#[AssertCollection\UniqueEntity('email')]
56
#[AssertCollection\UniqueEntity('username')]
57
class User implements EntityInterface, UserInterface, UserGroupAwareInterface
58
{
59
    use Blameable;
60
    use Timestampable;
61
    use UserRelations;
62
    use Uuid;
63
64
    final public const SET_USER_PROFILE = 'set.UserProfile';
65
    final public const SET_USER_BASIC = 'set.UserBasic';
66
67
    #[ORM\Id]
68
    #[ORM\Column(
69
        name: 'id',
70
        type: UuidBinaryOrderedTimeType::NAME,
71
        unique: true,
72
        nullable: false,
73
    )]
74
    #[Groups([
75
        'User',
76
        'User.id',
77
78
        'LogLogin.user',
79
        'LogLoginFailure.user',
80
        'LogRequest.user',
81
82
        'UserGroup.users',
83
84
        self::SET_USER_PROFILE,
85
        self::SET_USER_BASIC,
86
    ])]
87
    private UuidInterface $id;
88
89
    #[ORM\Column(
90
        name: 'username',
91
        type: Types::STRING,
92
        length: 255,
93
        nullable: false,
94
    )]
95
    #[Groups([
96
        'User',
97
        'User.username',
98
99
        self::SET_USER_PROFILE,
100
        self::SET_USER_BASIC,
101
    ])]
102
    #[Assert\NotBlank]
103
    #[Assert\NotNull]
104
    #[Assert\Length(
105
        min: 2,
106
        max: 255,
107
    )]
108
    private string $username = '';
109
110
    #[ORM\Column(
111
        name: 'first_name',
112
        type: Types::STRING,
113
        length: 255,
114
        nullable: false,
115
    )]
116
    #[Groups([
117
        'User',
118
        'User.firstName',
119
120
        self::SET_USER_PROFILE,
121
        self::SET_USER_BASIC,
122
    ])]
123
    #[Assert\NotBlank]
124
    #[Assert\NotNull]
125
    #[Assert\Length(
126
        min: 2,
127
        max: 255,
128
    )]
129
    private string $firstName = '';
130
131
    #[ORM\Column(
132
        name: 'last_name',
133
        type: Types::STRING,
134
        length: 255,
135
        nullable: false,
136
    )]
137
    #[Groups([
138
        'User',
139
        'User.lastName',
140
141
        self::SET_USER_PROFILE,
142
        self::SET_USER_BASIC,
143
    ])]
144
    #[Assert\NotBlank]
145
    #[Assert\NotNull]
146
    #[Assert\Length(
147
        min: 2,
148
        max: 255,
149
    )]
150
    private string $lastName = '';
151
152
    #[ORM\Column(
153
        name: 'email',
154
        type: Types::STRING,
155
        length: 255,
156
        nullable: false,
157
    )]
158
    #[Groups([
159
        'User',
160
        'User.email',
161
162
        self::SET_USER_PROFILE,
163
        self::SET_USER_BASIC,
164
    ])]
165
    #[Assert\NotBlank]
166
    #[Assert\NotNull]
167
    #[Assert\Email]
168
    private string $email = '';
169
170
    #[ORM\Column(
171
        name: 'language',
172
        type: AppTypes::ENUM_LANGUAGE,
173
        nullable: false,
174
        options: [
175
            'comment' => 'User language for translations',
176
        ],
177
    )]
178
    #[Groups([
179
        'User',
180
        'User.language',
181
182
        self::SET_USER_PROFILE,
183
        self::SET_USER_BASIC,
184
    ])]
185
    #[Assert\NotBlank]
186
    #[Assert\NotNull]
187
    private Language $language;
188
189
    #[ORM\Column(
190
        name: 'locale',
191
        type: AppTypes::ENUM_LOCALE,
192
        nullable: false,
193
        options: [
194
            'comment' => 'User locale for number, time, date, etc. formatting.',
195
        ],
196
    )]
197
    #[Groups([
198
        'User',
199
        'User.locale',
200
201
        self::SET_USER_PROFILE,
202
        self::SET_USER_BASIC,
203
    ])]
204
    #[Assert\NotBlank]
205
    #[Assert\NotNull]
206
    private Locale $locale;
207
208
    #[ORM\Column(
209
        name: 'timezone',
210
        type: Types::STRING,
211
        length: 255,
212
        nullable: false,
213
        options: [
214
            'comment' => 'User timezone which should be used to display time, date, etc.',
215
            'default' => Localization::DEFAULT_TIMEZONE,
216
        ],
217
    )]
218
    #[Groups([
219
        'User',
220
        'User.timezone',
221
222
        self::SET_USER_PROFILE,
223
        self::SET_USER_BASIC,
224
    ])]
225
    #[Assert\NotBlank]
226
    #[Assert\NotNull]
227
    #[AppAssert\Timezone]
228
    private string $timezone = Localization::DEFAULT_TIMEZONE;
229
230
    #[ORM\Column(
231
        name: 'password',
232
        type: Types::STRING,
233
        length: 255,
234
        nullable: false,
235
        options: [
236
            'comment' => 'Hashed password',
237
        ],
238
    )]
239
    private string $password = '';
240
241
    /**
242
     * Plain password. Used for model validation. Must not be persisted.
243
     *
244
     * @see UserEntityEventListener
245
     */
246
    private string $plainPassword = '';
247
248 252
    public function __construct()
249
    {
250 252
        $this->id = $this->createUuid();
251 252
        $this->language = Language::getDefault();
252 252
        $this->locale = Locale::getDefault();
253
254 252
        $this->userGroups = new ArrayCollection();
255 252
        $this->logsRequest = new ArrayCollection();
256 252
        $this->logsLogin = new ArrayCollection();
257 252
        $this->logsLoginFailure = new ArrayCollection();
258
    }
259
260 324
    public function getId(): string
261
    {
262 324
        return $this->id->toString();
263
    }
264
265 126
    public function getUsername(): string
266
    {
267 126
        return $this->username;
268
    }
269
270 30
    public function setUsername(string $username): self
271
    {
272 30
        $this->username = $username;
273
274 30
        return $this;
275
    }
276
277 64
    public function getFirstName(): string
278
    {
279 64
        return $this->firstName;
280
    }
281
282 26
    public function setFirstName(string $firstName): self
283
    {
284 26
        $this->firstName = $firstName;
285
286 26
        return $this;
287
    }
288
289 64
    public function getLastName(): string
290
    {
291 64
        return $this->lastName;
292
    }
293
294 26
    public function setLastName(string $lastName): self
295
    {
296 26
        $this->lastName = $lastName;
297
298 26
        return $this;
299
    }
300
301 66
    public function getEmail(): string
302
    {
303 66
        return $this->email;
304
    }
305
306 28
    public function setEmail(string $email): self
307
    {
308 28
        $this->email = $email;
309
310 28
        return $this;
311
    }
312
313 312
    public function getLanguage(): Language
314
    {
315 312
        return $this->language;
316
    }
317
318 17
    public function setLanguage(Language $language): self
319
    {
320 17
        $this->language = $language;
321
322 17
        return $this;
323
    }
324
325 312
    public function getLocale(): Locale
326
    {
327 312
        return $this->locale;
328
    }
329
330 18
    public function setLocale(Locale $locale): self
331
    {
332 18
        $this->locale = $locale;
333
334 18
        return $this;
335
    }
336
337 312
    public function getTimezone(): string
338
    {
339 312
        return $this->timezone;
340
    }
341
342 5
    public function setTimezone(string $timezone): self
343
    {
344 5
        $this->timezone = $timezone;
345
346 5
        return $this;
347
    }
348
349 310
    public function getPassword(): string
350
    {
351 310
        return $this->password;
352
    }
353
354 22
    public function setPassword(callable $encoder, string $plainPassword): self
355
    {
356 22
        $this->password = (string)$encoder($plainPassword);
357
358 22
        return $this;
359
    }
360
361 26
    public function getPlainPassword(): string
362
    {
363 26
        return $this->plainPassword;
364
    }
365
366 20
    public function setPlainPassword(string $plainPassword): self
367
    {
368 20
        if ($plainPassword !== '') {
369 19
            $this->plainPassword = $plainPassword;
370
371
            // Change some mapped values so preUpdate will get called - just blank it out
372 19
            $this->password = '';
373
        }
374
375 20
        return $this;
376
    }
377
378
    /**
379
     * Removes sensitive data from the user.
380
     *
381
     * This is important if, at any given point, sensitive information like
382
     * the plain-text password is stored on this object.
383
     */
384 16
    public function eraseCredentials(): void
385
    {
386 16
        $this->plainPassword = '';
387
    }
388
}
389