GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — dev ( 3f8250...6c80d1 )
by Андрей
15:00
created

EntryToObjectsService::setModuleOptions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
/**
3
 * @link    https://github.com/old-town/workflow-zf2-toolkit
4
 * @author  Malofeykin Andrey  <[email protected]>
5
 */
6
namespace OldTown\Workflow\ZF2\Toolkit\EntryToObjects;
7
8
use OldTown\Workflow\ZF2\Toolkit\EntityRepository\DoctrineWorkflowStory\ExtEntryRepository;
9
use Zend\Serializer\AdapterPluginManager as SerializerManager;
10
use OldTown\Workflow\ZF2\Service\Annotation as WFS;
11
use Zend\Serializer\Adapter\AdapterInterface as Serializer;
12
use OldTown\Workflow\ZF2\Toolkit\Entity\DoctrineWorkflowStory\ExtEntry;
13
use OldTown\Workflow\ZF2\Toolkit\Entity\DoctrineWorkflowStory\ObjectInfo;
14
use OldTown\Workflow\ZF2\Toolkit\Options\ModuleOptions;
15
use ReflectionClass;
16
use OldTown\Workflow\ZF2\ServiceEngine\WorkflowServiceInterface;
17
use OldTown\Workflow\ZF2\Toolkit\DoctrineWorkflowStory\DoctrineWorkflowStory;
18
19
/**
20
 * Class EntryToObjectsService
21
 *
22
 * @package OldTown\Workflow\ZF2\Toolkit\EntryToObjects
23
 */
24
class EntryToObjectsService
25
{
26
    /**
27
     * Псевдоним для объектов по умолчанию
28
     *
29
     * @var string
30
     */
31
    const DEFAULT_OBJECT = 'defaultObject';
32
33
    /**
34
     * Менеджер для получения адапторов отвечающих за сериализацию данных
35
     *
36
     * @var SerializerManager
37
     */
38
    protected $serializerManager;
39
40
    /**
41
     * Сериалайзер по умолчанию
42
     *
43
     * @var string
44
     */
45
    protected $serializerName = 'json';
46
47
    /**
48
     * Настройки модуля
49
     *
50
     * @var ModuleOptions
51
     */
52
    protected $moduleOptions;
53
54
    /**
55
     * Сервис для работы с workflow
56
     *
57
     * @var WorkflowServiceInterface
58
     */
59
    protected $workflowService;
60
61
    /**
62
     * Сериалайзер
63
     *
64
     * @var Serializer
65
     */
66
    protected $serializer;
67
68
    /**
69
     * DoctrineWorkflowStoryService constructor.
70
     *
71
     * @param array $options
72
     */
73
    public function __construct(array $options = [])
74
    {
75
        $initOptions = [
76
            array_key_exists('serializerManager', $options) ? $options['serializerManager'] : null,
77
            array_key_exists('moduleOptions', $options) ? $options['moduleOptions'] : null,
78
            array_key_exists('workflowService', $options) ? $options['workflowService'] : null
79
        ];
80
        call_user_func_array([$this, 'init'], $initOptions);
81
    }
82
83
    /**
84
     * @param SerializerManager        $serializerManager
85
     * @param ModuleOptions            $moduleOptions
86
     * @param WorkflowServiceInterface $workflowService
87
     */
88
    protected function init(SerializerManager $serializerManager, ModuleOptions $moduleOptions, WorkflowServiceInterface $workflowService)
89
    {
90
        $this->setSerializerManager($serializerManager);
91
        $this->setModuleOptions($moduleOptions);
92
        $this->setWorkflowService($workflowService);
93
    }
94
95
    /**
96
     * @WFS\ArgumentsMap(argumentsMap={
97
     *      @WFS\Map(fromArgName="entryParam", to="entry"),
98
     *      @WFS\Map(fromArgName="objectParam", to="object"),
99
     *      @WFS\Map(fromArgName="objectAliasParam", to="objectAlias"),
100
     *      @WFS\Map(fromArgName="storeParam", to="store")
101
     *})
102
     *
103
     *
104
     * @param ExtEntry               $entry
105
     * @param mixed                  $object
106
     * @param string                 $objectAlias
107
     * @param DoctrineWorkflowStory $store
108
     *
109
     * @throws Exception\InvalidWorkflowStoreException
110
     * @throws \OldTown\Workflow\Spi\Doctrine\Exception\DoctrineRuntimeException
111
     * @throws Exception\RuntimeException
112
     * @throws \Zend\ServiceManager\Exception\ServiceNotFoundException
113
     * @throws \Zend\ServiceManager\Exception\ServiceNotCreatedException
114
     * @throws \Zend\ServiceManager\Exception\RuntimeException
115
     * @throws \Zend\Serializer\Exception\ExceptionInterface
116
     */
117
    public function bindObjectToWorkflowEntry(ExtEntry $entry, $object, $objectAlias = self::DEFAULT_OBJECT, DoctrineWorkflowStory $store)
118
    {
119
        $em = $store->getEntityManager();
120
121
        $objectClass = get_class($object);
122
        $metadata = $em->getClassMetadata($objectClass);
123
124
        $serializerName = $this->getSerializerName();
125
        /** @var Serializer $serializer */
126
        $serializer = $this->getSerializerManager()->get($serializerName);
127
128
        $id = $metadata->getIdentifierValues($object);
129
        $prepareId = [];
130
        foreach ($id as $idField => $idValue) {
131
            $prepareId[$idField] = (string)$idValue;
132
        }
133
        $serializedId = $serializer->serialize($prepareId);
134
135
        $objectInfoClass = $this->getModuleOptions()->getEntityClassName('DoctrineWorkflowStory\\ObjectInfo');
136
137
        $r = new ReflectionClass($objectInfoClass);
138
        /** @var  ObjectInfo $objectInfo */
139
        $objectInfo = $r->newInstance();
140
141
        $objectInfo->setClassName($objectClass);
142
        $objectInfo->setObjectId($serializedId);
143
        $objectInfo->setAlias($objectAlias);
144
        $objectInfo->addEntry($entry);
145
146
147
        $entry->addObjectInfo($objectInfo);
148
149
        $em->persist($objectInfo);
150
        $em->flush();
151
    }
152
153
    /**
154
     * Востановить объект привязанный к процессу
155
     *
156
     * @WFS\ArgumentsMap(argumentsMap={
157
     *      @WFS\Map(fromArgName="entryParam", to="entry"),
158
     *      @WFS\Map(fromArgName="objectAliasParam", to="objectAlias"),
159
     *      @WFS\Map(fromArgName="storeParam", to="store")
160
     * })
161
     *
162
     * @WFS\ResultVariable(name="resultVariableName")
163
     *
164
     *
165
     * @param ExtEntry              $entry
166
     * @param string                $objectAlias
167
     * @param DoctrineWorkflowStory $store
168
     *
169
     * @return mixed
170
     *
171
     * @throws \OldTown\Workflow\Spi\Doctrine\Exception\DoctrineRuntimeException
172
     * @throws \Zend\ServiceManager\Exception\ServiceNotFoundException
173
     * @throws \Zend\ServiceManager\Exception\ServiceNotCreatedException
174
     * @throws \Zend\ServiceManager\Exception\RuntimeException
175
     * @throws \Zend\Serializer\Exception\ExceptionInterface
176
     * @throws Exception\InvalidRestoreObjectException
177
     * @throws Exception\InvalidArgumentException
178
     */
179
    public function restoreObjectBindingToEntry(ExtEntry $entry, $objectAlias = self::DEFAULT_OBJECT, DoctrineWorkflowStory $store)
180
    {
181
        $objectsInfo = $entry->getObjectsInfo();
182
183
        foreach ($objectsInfo as $objectInfo) {
184
            if ($objectAlias === $objectInfo->getAlias()) {
185
                $className = $objectInfo->getClassName();
186
187
                $em = $store->getEntityManager();
188
189
                $serializer = $this->getSerializer();
190
191
                $serializedId = $objectInfo->getObjectId();
192
                $id = $serializer->unserialize($serializedId);
193
194
                $object = $em->getRepository($className)->find($id);
195
196
                if (!is_object($object)) {
197
                    $errMsg = sprintf('Invalid restore object. Alias: %s. Class: %s. Id: %s', $objectAlias, $className, $serializedId);
198
                    throw new Exception\InvalidRestoreObjectException($errMsg);
199
                }
200
201
                return $object;
202
            }
203
        }
204
205
        $errMsg = sprintf('Invalid object alias: %s', $objectAlias);
206
        throw new Exception\InvalidArgumentException($errMsg);
207
    }
208
209
210
    /**
211
     * Получене информации о процессе на основе данных о объекта привязанных к процессу
212
     *
213
     * @param string $managerName
214
     * @param string $workflowName
215
     * @param array  $objectsInfo
216
     *
217
     * @return ExtEntry|null
218
     *
219
     * @throws Exception\InvalidGetEntryByObjectsInfoException
220
     * @throws \Zend\Serializer\Exception\ExceptionInterface
221
     */
222
    public function getEntryByObjectsInfo($managerName, $workflowName, array $objectsInfo = [])
223
    {
224
        try {
225
            $workflowManager = $this->getWorkflowService()->getWorkflowManager($managerName);
226
227
228
            $store = $workflowManager->getConfiguration()->getWorkflowStore();
229
230
            if (!$store instanceof DoctrineWorkflowStory) {
231
                $errMsg = sprintf('Workflow store not implement %s', DoctrineWorkflowStory::class);
232
                throw new Exception\InvalidWorkflowStoreException($errMsg);
233
            }
234
            $em = $store->getEntityManager();
235
236
            $serializer = $this->getSerializer();
237
            $objectHash = [];
238
            foreach ($objectsInfo as $entityClassName => $entityId) {
239
                $identifierFieldName = $em->getClassMetadata($entityClassName)->getSingleIdentifierFieldName();
240
                $id = [
241
                    $identifierFieldName => (string)$entityId
242
                ];
243
244
                $serializedId = $serializer->serialize($id);
245
246
                $hash = $entityClassName . '_' . $serializedId;
247
                $base64Hash = base64_encode($hash);
248
249
                $objectHash[$base64Hash] = $base64Hash;
250
            }
251
252
            $extEntryClassName = $this->getModuleOptions()->getEntityClassName('DoctrineWorkflowStory\ExtEntry');
253
            /** @var ExtEntryRepository $extEntryRepository */
254
            $extEntryRepository = $em->getRepository($extEntryClassName);
0 ignored issues
show
Bug introduced by
It seems like $extEntryClassName defined by $this->getModuleOptions(...rkflowStory\\ExtEntry') on line 252 can also be of type array; however, Doctrine\Common\Persiste...anager::getRepository() does only seem to accept string, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
255
256
            $entry = $extEntryRepository->findEntryByObjectInfo($workflowName, $objectHash);
257
        } catch (\Exception $e) {
258
            throw new Exception\InvalidGetEntryByObjectsInfoException($e->getMessage(), $e->getCode(), $e);
259
        }
260
        return $entry;
261
    }
262
263
    /**
264
     * @return SerializerManager
265
     */
266
    public function getSerializerManager()
267
    {
268
        return $this->serializerManager;
269
    }
270
271
    /**
272
     * @param SerializerManager $serializerManager
273
     *
274
     * @return $this
275
     */
276
    public function setSerializerManager(SerializerManager $serializerManager)
277
    {
278
        $this->serializerManager = $serializerManager;
279
280
        return $this;
281
    }
282
283
    /**
284
     * @return string
285
     */
286
    public function getSerializerName()
287
    {
288
        return $this->serializerName;
289
    }
290
291
    /**
292
     * @param string $serializerName
293
     *
294
     * @return $this
295
     */
296
    public function setSerializerName($serializerName)
297
    {
298
        $this->serializerName = $serializerName;
299
300
        return $this;
301
    }
302
303
    /**
304
     * @return ModuleOptions
305
     */
306
    public function getModuleOptions()
307
    {
308
        return $this->moduleOptions;
309
    }
310
311
    /**
312
     * @param ModuleOptions $moduleOptions
313
     *
314
     * @return $this
315
     */
316
    public function setModuleOptions(ModuleOptions $moduleOptions)
317
    {
318
        $this->moduleOptions = $moduleOptions;
319
320
        return $this;
321
    }
322
323
    /**
324
     * Сервис для работы с workflow
325
     *
326
     * @return WorkflowServiceInterface
327
     */
328
    public function getWorkflowService()
329
    {
330
        return $this->workflowService;
331
    }
332
333
    /**
334
     * Устанавливает сервис для работы с workflow
335
     *
336
     * @param WorkflowServiceInterface $workflowService
337
     *
338
     * @return $this
339
     */
340
    public function setWorkflowService(WorkflowServiceInterface $workflowService)
341
    {
342
        $this->workflowService = $workflowService;
343
344
        return $this;
345
    }
346
347
348
    /**
349
     * @return Serializer
350
     *
351
     * @throws \Zend\ServiceManager\Exception\ServiceNotFoundException
352
     * @throws \Zend\ServiceManager\Exception\ServiceNotCreatedException
353
     * @throws \Zend\ServiceManager\Exception\RuntimeException
354
     */
355
    public function getSerializer()
356
    {
357
        if ($this->serializer) {
358
            return $this->serializer;
359
        }
360
361
        $serializerName = $this->getSerializerName();
362
        /** @var Serializer $serializer */
363
        $serializer = $this->getSerializerManager()->get($serializerName);
364
        $this->serializer = $serializer;
365
366
        return $this->serializer;
367
    }
368
}
369