1 | <?php |
||||
2 | |||||
3 | namespace ControleOnline\Service; |
||||
4 | |||||
5 | use ControleOnline\Entity\Device; |
||||
6 | use ControleOnline\Entity\DeviceConfig; |
||||
7 | use ControleOnline\Entity\ExtraData; |
||||
8 | use ControleOnline\Entity\ExtraFields; |
||||
9 | use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface |
||||
0 ignored issues
–
show
|
|||||
10 | as Security; |
||||
11 | use Symfony\Component\HttpFoundation\RequestStack; |
||||
0 ignored issues
–
show
The type
Symfony\Component\HttpFoundation\RequestStack 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. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||||
12 | use Doctrine\ORM\EntityManagerInterface; |
||||
0 ignored issues
–
show
The type
Doctrine\ORM\EntityManagerInterface 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. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||||
13 | |||||
14 | class ExtraDataService |
||||
15 | { |
||||
16 | private static $persisted = false; |
||||
17 | private $request; |
||||
18 | public function __construct( |
||||
19 | private EntityManagerInterface $manager, |
||||
20 | private RequestStack $requestStack, |
||||
21 | private Security $security, |
||||
22 | private DeviceService $deviceService, |
||||
23 | private SkyNetService $skyNetService |
||||
24 | |||||
25 | ) { |
||||
26 | $this->request = $requestStack->getCurrentRequest(); |
||||
27 | } |
||||
28 | |||||
29 | |||||
30 | public function getEntityByExtraData(ExtraFields $extraFields, string $code, object | string $entity) |
||||
31 | { |
||||
32 | $class = $this->getEntityName($entity); |
||||
33 | $extraData = $this->manager->getRepository(ExtraData::class)->findOneBy([ |
||||
34 | 'extra_fields' => $extraFields, |
||||
35 | 'entity_name' => $class->getShortName(), |
||||
36 | 'value' => $code |
||||
37 | ]); |
||||
38 | if ($extraData) |
||||
39 | return $this->manager->getRepository($class->getName())->find($extraData->getEntityId()); |
||||
40 | |||||
41 | return null; |
||||
42 | } |
||||
43 | |||||
44 | |||||
45 | public function discoveryExtraData(int|string $entityId, ExtraFields $extraFields, string $code, object | string $entity) |
||||
46 | { |
||||
47 | $class = $this->getEntityName($entity); |
||||
48 | |||||
49 | $extraData = $this->getEntityByExtraData($extraFields, $code, $entity); |
||||
50 | if ($extraData) return $extraData; |
||||
51 | |||||
52 | $extraData = new ExtraData(); |
||||
53 | $extraData->setEntityId($entityId); |
||||
54 | $extraData->setExtraFields($extraFields); |
||||
55 | $extraData->setValue($code); |
||||
56 | $extraData->setEntityName($class->getShortName()); |
||||
57 | $this->manager->persist($extraData); |
||||
58 | $this->manager->flush(); |
||||
59 | |||||
60 | return $this->manager->getRepository($class->getName())->find($extraData->getEntityId()); |
||||
61 | } |
||||
62 | |||||
63 | public function discoveryExtraFields(string $fieldName, string $context, ?string $configs = '{}', ?string $fieldType = 'text', ?bool $required = false): ExtraFields |
||||
64 | { |
||||
65 | |||||
66 | $extraFields = $this->manager->getRepository(ExtraFields::class)->findOneBy([ |
||||
67 | 'name' => $fieldName, |
||||
68 | 'type' => $fieldType, |
||||
69 | 'context' => $context |
||||
70 | ]); |
||||
71 | |||||
72 | if (!$extraFields) { |
||||
73 | $extraFields = new ExtraFields(); |
||||
74 | $extraFields->setName($fieldName); |
||||
75 | $extraFields->setContext($context); |
||||
76 | $extraFields->setConfigs($configs); |
||||
77 | $extraFields->setType($fieldType); |
||||
0 ignored issues
–
show
It seems like
$fieldType can also be of type null ; however, parameter $type of ControleOnline\Entity\ExtraFields::setType() does only seem to accept string , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
78 | $extraFields->setRequired($required); |
||||
79 | $this->manager->persist($extraFields); |
||||
80 | $this->manager->flush(); |
||||
81 | } |
||||
82 | |||||
83 | return $extraFields; |
||||
84 | } |
||||
85 | |||||
86 | |||||
87 | private function getUserIp() |
||||
88 | { |
||||
89 | return $this->request->getClientIp(); |
||||
90 | } |
||||
91 | |||||
92 | public function discoveryDevice(&$entity) |
||||
93 | { |
||||
94 | if ($entity instanceof Device || $entity instanceof DeviceConfig || !$this->request->headers) |
||||
95 | return; |
||||
96 | |||||
97 | $deviceId = $this->request->headers->get('DEVICE') ?: $this->getUserIp(); |
||||
98 | if (method_exists($entity, 'setDevice')) { |
||||
99 | if ($entity->getDevice()) return; |
||||
100 | $device = $this->deviceService->discoveryDevice($deviceId); |
||||
101 | $entity->setDevice($device); |
||||
102 | } |
||||
103 | } |
||||
104 | |||||
105 | public function discoveryUser(&$entity) |
||||
106 | { |
||||
107 | $token = $this->security->getToken(); |
||||
108 | $user = $token ? $token->getUser() : $this->skyNetService->getBotUser(); |
||||
109 | |||||
110 | if (method_exists($entity, 'setUser') && !$entity->getUser()) |
||||
111 | $entity->setUser($user); |
||||
112 | } |
||||
113 | |||||
114 | public function persist(&$entity) |
||||
115 | { |
||||
116 | if (self::$persisted == true) |
||||
0 ignored issues
–
show
|
|||||
117 | return; |
||||
118 | self::$persisted = true; |
||||
119 | |||||
120 | //$this->manager->persist($entity); |
||||
121 | //$this->manager->flush(); |
||||
122 | $this->persistData($entity); |
||||
123 | } |
||||
124 | |||||
125 | private function getEntityName(object | string $entity): \ReflectionClass |
||||
126 | { |
||||
127 | return (new \ReflectionClass($entity)); |
||||
128 | } |
||||
129 | |||||
130 | private function persistData(&$entity = null) |
||||
131 | { |
||||
132 | |||||
133 | if ($entity) { |
||||
134 | $entity_id = $entity->getId(); |
||||
135 | $entity_name = $this->getEntityName($entity)->getShortName(); |
||||
136 | |||||
137 | //$this->manager->persist($entity); |
||||
138 | } else { |
||||
139 | $json = json_decode($this->request->getContent(), true); |
||||
140 | $extra_data = isset($json['extra-data']) ? $json['extra-data'] : null; |
||||
141 | if (!$extra_data) |
||||
142 | return; |
||||
143 | $entity_id = $extra_data['entity_id']; |
||||
144 | $entity_name = $extra_data['entity_name']; |
||||
145 | } |
||||
146 | |||||
147 | |||||
148 | if (!$entity_id || !$entity_name) |
||||
149 | return; |
||||
150 | |||||
151 | if (!isset($extra_data) || !isset($extra_data['data'])) |
||||
152 | return; |
||||
153 | |||||
154 | foreach ($extra_data['data'] as $key => $data) { |
||||
155 | $extra_fields = $this->manager->getRepository(ExtraFields::class)->find($key); |
||||
156 | |||||
157 | $extraData = $this->manager->getRepository(ExtraData::class)->findOneBy([ |
||||
158 | 'entity_id' => $entity_id, |
||||
159 | 'entity_name' => $entity_name, |
||||
160 | 'extra_fields' => $extra_fields |
||||
161 | ]); |
||||
162 | |||||
163 | if (!$extraData) |
||||
164 | $extraData = new ExtraData(); |
||||
165 | |||||
166 | $extraData->setExtraFields($extra_fields); |
||||
167 | $extraData->setEntityName($entity_name); |
||||
168 | $extraData->setEntityId($entity_id); |
||||
169 | $extraData->setValue($data); |
||||
170 | $this->manager->persist($extraData); |
||||
171 | } |
||||
172 | |||||
173 | |||||
174 | $this->manager->flush(); |
||||
175 | } |
||||
176 | |||||
177 | public function noChange() |
||||
178 | { |
||||
179 | $this->persistData(); |
||||
180 | } |
||||
181 | } |
||||
182 |
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:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths