Passed
Pull Request — master (#5576)
by Angel Fernando Quiroz
06:59
created

SessionNormalizer::normalize()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 9
nc 2
nop 3
dl 0
loc 17
rs 9.9666
c 1
b 0
f 0
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