Completed
Push — master ( 5b6d3c...e19d53 )
by Marcel
03:17
created

DarkModeManager::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 3
ccs 3
cts 3
cp 1
crap 1
rs 10
1
<?php
2
3
namespace App\DarkMode;
4
5
use App\Entity\User;
6
use App\Repository\UserRepositoryInterface;
7
use SchoolIT\CommonBundle\DarkMode\DarkModeManagerInterface;
8
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
9
10
class DarkModeManager implements DarkModeManagerInterface {
11
12
    private const Key = 'dark_mode.enabled';
13
14
    private $tokenStorage;
15
    private $userRepository;
16
17 7
    public function __construct(TokenStorageInterface $tokenStorage, UserRepositoryInterface $userRepository) {
18 7
        $this->tokenStorage = $tokenStorage;
19 7
        $this->userRepository = $userRepository;
20 7
    }
21
22 2
    private function getUser(): ?User {
23 2
        $token = $this->tokenStorage->getToken();
24
25 2
        if ($token === null) {
26
            return null;
27
        }
28
29 2
        $user = $token->getUser();
30
31 2
        if (!$user instanceof User) {
32
            return null;
33
        }
34
35 2
        return $user;
36
    }
37
38
    private function setDarkMode(bool $isDarkModeEnabled): void {
39
        $user = $this->getUser();
40
41
        if ($user !== null) {
42
            $user->setData(static::Key, $isDarkModeEnabled);
43
            $this->userRepository->persist($user);
44
        }
45
    }
46
47
    public function enableDarkMode(): void {
48
        $this->setDarkMode(true);
49
    }
50
51
    public function disableDarkMode(): void {
52
        $this->setDarkMode(false);
53
    }
54
55 2
    public function isDarkModeEnabled(): bool {
56 2
        $user = $this->getUser();
57
58 2
        if ($user !== null) {
59 2
            return $user->getData(static::Key, false) === true;
60
        }
61
62
        return false;
63
    }
64
}