Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
94.59% covered (success)
94.59%
35 / 37
91.30% covered (success)
91.30%
21 / 23
28.57% covered (danger)
28.57%
6 / 21
80.00% covered (warning)
80.00%
4 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
BaseParameter
94.59% covered (success)
94.59%
35 / 37
91.30% covered (success)
91.30%
21 / 23
28.57% covered (danger)
28.57%
6 / 21
80.00% covered (warning)
80.00%
4 / 5
64.48
0.00% covered (danger)
0.00%
0 / 1
 __construct
92.59% covered (success)
92.59%
25 / 27
83.33% covered (warning)
83.33%
10 / 12
15.38% covered (danger)
15.38%
2 / 13
0.00% covered (danger)
0.00%
0 / 1
20.15
 getDefaultValues
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getCurrentValues
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 clearCache
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getAnnotations
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
8 / 8
20.00% covered (danger)
20.00%
1 / 5
100.00% covered (success)
100.00%
1 / 1
12.19
1<?php
2
3namespace App;
4
5use App\Entity\Parameter as ParameterEntity;
6use Doctrine\ORM\EntityManagerInterface;
7use Psr\Cache\InvalidArgumentException;
8use ReflectionClass;
9use ReflectionProperty;
10use Symfony\Component\Cache\Adapter\FilesystemAdapter;
11use Symfony\Contracts\Cache\ItemInterface;
12use Throwable;
13
14class BaseParameter
15{
16    public const string PARAMETER_KEY_CACHE = 'parameter';
17    /**
18     * @var string[]
19     */
20    protected array $defaultValues = [];
21    /**
22     * @var array<string|null>
23     */
24    protected array $currentValues = [];
25    protected FilesystemAdapter $cache;
26    /**
27     * @var ReflectionProperty[]
28     */
29    private array $paramProperties;
30    /**
31     * @var ?Param[]
32     */
33    private ?array $annotations = null;
34
35    /**
36     * @throws ExceptionApplication
37     */
38    public function __construct(EntityManagerInterface $entityManager)
39    {
40        try {
41            $this->cache = new FilesystemAdapter();
42            // Initializes a 'ReflectionClass' class that allows you to report certain information from a class.
43            // In this case, the 'Parameter' class.
44            $paramClass = new ReflectionClass($this);
45            // Get all the properties of the class as an array of 'ReflectionProperty' objects.
46            $this->paramProperties = $paramClass->getProperties(ReflectionProperty::IS_PUBLIC);
47            $paramNames = [];
48            // Get the 'name' value and the default values of each object present
49            // in $paramProperties.
50            foreach ($this->paramProperties as $paramProperty) {
51                $paramName = $paramProperty->getName();
52                // Add the 'name' to the final array.
53                $paramNames[] = $paramName;
54                // Adds to the array "$paramName" as key and the default text of the properties as value
55                /* @phpstan-ignore-next-line */
56                $this->defaultValues[$paramName] = $this->{$paramName};
57            }
58
59            /** @var ParameterEntity[] $dbParameters */
60            $dbParameters = $this->cache->get(
61                self::PARAMETER_KEY_CACHE,
62                function (ItemInterface $item) use ($entityManager) {
63                    $item->expiresAfter(7200);
64                    // Selecting the 'parameter' table from the database, using the Doctrine QueryBuilder
65                    $mainQuery = $entityManager->createQueryBuilder();
66                    $mainQuery->select('parameter')
67                        ->from(ParameterEntity::class, 'parameter');
68
69                    return $mainQuery->getQuery()->getResult();
70                },
71                0.0
72            );
73            // Loop over the array containing all records (stored as objects) of the 'parameter' table
74            foreach ($dbParameters as $dbParameter) {
75                // Retrieves the 'name' value of the records
76                $dbParameterName = $dbParameter->getName();
77                // Checks if the 'name' field of the record matches that of one of the parameters
78                if (in_array($dbParameterName, $paramNames)) {
79                    //  retrieve the 'value' of the record
80                    $dbParameterValue = $dbParameter->getValue();
81                    //  changes the value of the parameter in question to that of the database record
82                    // And adds the record to the '$dbParameterValue' table
83                    $this->{$dbParameterName} = $dbParameterValue;
84                    $this->currentValues[$dbParameterName] = $dbParameterValue;
85                }
86            }
87        } catch (Throwable) {
88            throw new ExceptionApplication('Erreur fatal paramètre DB');
89        }
90    }
91
92    /**
93     * @return string[]
94     */
95    public function getDefaultValues(): array
96    {
97        return $this->defaultValues;
98    }
99
100    /**
101     * @return array<string|null>
102     */
103    public function getCurrentValues(): array
104    {
105        return $this->currentValues;
106    }
107
108    /**
109     * @throws InvalidArgumentException
110     */
111    public function clearCache(): void
112    {
113        $this->cache->delete(self::PARAMETER_KEY_CACHE);
114    }
115
116    /**
117     * @return Param[]
118     */
119    public function getAnnotations(): array
120    {
121        if (null === $this->annotations) {
122            $this->annotations = [];
123            foreach ($this->paramProperties as $paramProperty) {
124                $annotations = $paramProperty->getAttributes(Param::class);
125                if ($annotations) {
126                    $this->annotations[$paramProperty->getName()] = $annotations[0]->newInstance();
127                }
128            }
129        }
130
131        return $this->annotations;
132    }
133}

Branches

Below are the source code lines that represent each code branch as identified by Xdebug. Please note a branch is not necessarily coterminous with a line, a line may contain multiple branches and therefore show up more than once. Please also be aware that some branches may be implicit rather than explicit, e.g. an if statement always has an else as part of its logical flow even if you didn't write one.

App\
62                function (ItemInterface $item) use ($entityManager) {
63                    $item->expiresAfter(7200);
64                    // Selecting the 'parameter' table from the database, using the Doctrine QueryBuilder
65                    $mainQuery = $entityManager->createQueryBuilder();
66                    $mainQuery->select('parameter')
67                        ->from(ParameterEntity::class, 'parameter');
68
69                    return $mainQuery->getQuery()->getResult();
70                },
BaseParameter->__construct
38    public function __construct(EntityManagerInterface $entityManager)
39    {
40        try {
41            $this->cache = new FilesystemAdapter();
42            // Initializes a 'ReflectionClass' class that allows you to report certain information from a class.
43            // In this case, the 'Parameter' class.
44            $paramClass = new ReflectionClass($this);
45            // Get all the properties of the class as an array of 'ReflectionProperty' objects.
46            $this->paramProperties = $paramClass->getProperties(ReflectionProperty::IS_PUBLIC);
47            $paramNames = [];
48            // Get the 'name' value and the default values of each object present
49            // in $paramProperties.
50            foreach ($this->paramProperties as $paramProperty) {
50            foreach ($this->paramProperties as $paramProperty) {
50            foreach ($this->paramProperties as $paramProperty) {
51                $paramName = $paramProperty->getName();
50            foreach ($this->paramProperties as $paramProperty) {
51                $paramName = $paramProperty->getName();
52                // Add the 'name' to the final array.
53                $paramNames[] = $paramName;
54                // Adds to the array "$paramName" as key and the default text of the properties as value
55                /* @phpstan-ignore-next-line */
56                $this->defaultValues[$paramName] = $this->{$paramName};
57            }
58
59            /** @var ParameterEntity[] $dbParameters */
60            $dbParameters = $this->cache->get(
61                self::PARAMETER_KEY_CACHE,
62                function (ItemInterface $item) use ($entityManager) {
63                    $item->expiresAfter(7200);
64                    // Selecting the 'parameter' table from the database, using the Doctrine QueryBuilder
65                    $mainQuery = $entityManager->createQueryBuilder();
66                    $mainQuery->select('parameter')
67                        ->from(ParameterEntity::class, 'parameter');
68
69                    return $mainQuery->getQuery()->getResult();
70                },
71                0.0
72            );
73            // Loop over the array containing all records (stored as objects) of the 'parameter' table
74            foreach ($dbParameters as $dbParameter) {
74            foreach ($dbParameters as $dbParameter) {
76                $dbParameterName = $dbParameter->getName();
77                // Checks if the 'name' field of the record matches that of one of the parameters
78                if (in_array($dbParameterName, $paramNames)) {
74            foreach ($dbParameters as $dbParameter) {
75                // Retrieves the 'name' value of the records
76                $dbParameterName = $dbParameter->getName();
77                // Checks if the 'name' field of the record matches that of one of the parameters
78                if (in_array($dbParameterName, $paramNames)) {
79                    //  retrieve the 'value' of the record
80                    $dbParameterValue = $dbParameter->getValue();
74            foreach ($dbParameters as $dbParameter) {
74            foreach ($dbParameters as $dbParameter) {
87        } catch (Throwable) {
88            throw new ExceptionApplication('Erreur fatal paramètre DB');
90    }
BaseParameter->clearCache
113        $this->cache->delete(self::PARAMETER_KEY_CACHE);
114    }
BaseParameter->getAnnotations
121        if (null === $this->annotations) {
122            $this->annotations = [];
123            foreach ($this->paramProperties as $paramProperty) {
123            foreach ($this->paramProperties as $paramProperty) {
124                $annotations = $paramProperty->getAttributes(Param::class);
125                if ($annotations) {
123            foreach ($this->paramProperties as $paramProperty) {
124                $annotations = $paramProperty->getAttributes(Param::class);
125                if ($annotations) {
126                    $this->annotations[$paramProperty->getName()] = $annotations[0]->newInstance();
123            foreach ($this->paramProperties as $paramProperty) {
123            foreach ($this->paramProperties as $paramProperty) {
124                $annotations = $paramProperty->getAttributes(Param::class);
125                if ($annotations) {
126                    $this->annotations[$paramProperty->getName()] = $annotations[0]->newInstance();
127                }
128            }
129        }
130
131        return $this->annotations;
131        return $this->annotations;
132    }
BaseParameter->getCurrentValues
105        return $this->currentValues;
106    }
BaseParameter->getDefaultValues
97        return $this->defaultValues;
98    }