Passed
Pull Request — master (#5576)
by Angel Fernando Quiroz
09:01
created

SessionNormalizer   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 16
dl 0
loc 41
rs 10
c 1
b 0
f 0
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A supportsNormalization() 0 7 2
A normalize() 0 17 2
A getSupportedTypes() 0 3 1
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
declare(strict_types=1);
6
7
namespace Chamilo\CoreBundle\Serializer\Normalizer;
8
9
use Chamilo\CoreBundle\Entity\Session;
10
use Chamilo\CoreBundle\ServiceHelper\UserHelper;
11
use LogicException;
12
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
13
use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait;
14
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
15
16
class SessionNormalizer implements NormalizerInterface, NormalizerAwareInterface
17
{
18
    use NormalizerAwareTrait;
19
20
    public function __construct(
21
        private readonly UserHelper $userHelper,
22
    ) {}
23
24
    private const ALREADY_CALLED = 'SESSION_NORMALIZER_ALREADY_CALLED';
25
26
    public function normalize($object, ?string $format = null, array $context = []): array
27
    {
28
        $context[self::ALREADY_CALLED] = true;
29
30
        $data = $this->normalizer->normalize($object, $format, $context);
31
32
        \assert($object instanceof Session);
33
34
        try {
35
            $object->getAccessVisibility();
36
        } catch (LogicException) {
37
            $data['accessVisibility'] = $object->setAccessVisibilityByUser(
38
                $this->userHelper->getCurrent()
39
            );
40
        }
41
42
        return $data;
43
    }
44
45
    public function supportsNormalization($data, ?string $format = null, array $context = []): bool
46
    {
47
        if (isset($context[self::ALREADY_CALLED])) {
48
            return false;
49
        }
50
51
        return $data instanceof Session;
52
    }
53
54
    public function getSupportedTypes(?string $format): array
55
    {
56
        return [Session::class => false];
57
    }
58
}
59