Passed
Push — develop ( b3d985...20907a )
by Mario
04:01
created

StaffPersonaLoader::load()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 28
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 21
nc 2
nop 1
dl 0
loc 28
rs 9.584
c 0
b 0
f 0
1
<?php
2
3
namespace AppBundle\Tenant\Loader\Identity;
4
5
use AppBundle\Entity\Staff;
6
use AppBundle\Service\StaffPersonaService;
7
use Ds\Component\Tenant\Entity\Tenant;
8
use Ds\Component\Tenant\Loader\Loader;
9
use Symfony\Component\Yaml\Yaml;
10
11
/**
12
 * Class StaffPersonaLoader
13
 */
14
class StaffPersonaLoader implements Loader
15
{
16
    /**
17
     * @var \AppBundle\Service\StaffPersonaService
18
     */
19
    protected $staffPersonaService;
20
21
    /**
22
     * Constructor
23
     *
24
     * @param \AppBundle\Service\StaffPersonaService $staffPersonaService
25
     */
26
    public function __construct(StaffPersonaService $staffPersonaService)
27
    {
28
        $this->staffPersonaService = $staffPersonaService;
29
    }
30
31
    /**
32
     * {@inheritdoc}
33
     */
34
    public function load(Tenant $tenant)
35
    {
36
        $yml = file_get_contents('/srv/api-platform/src/AppBundle/Resources/tenant/identity/staff/personas.yml');
37
38
        // @todo Figure out how symfony does parameter binding and use the same technique
39
        $yml = strtr($yml, [
40
            '%identity.admin.uuid%' => $tenant->getData()['identity']['admin']['uuid'],
41
            '%business_unit.administration.uuid%' => $tenant->getData()['business_unit']['administration']['uuid'],
42
            '%tenant.uuid%' => $tenant->getUuid()
43
        ]);
44
45
        $personas = Yaml::parse($yml, YAML::PARSE_OBJECT_FOR_MAP);
46
        $manager = $this->staffPersonaService->getManager();
47
48
        foreach ($personas->objects as $object) {
49
            $object = (object) array_merge((array) $personas->prototype, (array) $object);
50
            $staff = $manager->getRepository(Staff::class)->findOneBy(['uuid' => $object->staff]);
51
            $persona = $this->staffPersonaService->createInstance();
52
            $persona
53
                ->setStaff($staff)
54
                ->setUuid($object->uuid)
55
                ->setOwner($object->owner)
56
                ->setOwnerUuid($object->owner_uuid)
57
                ->setTitle((array) $object->title)
58
                ->setData((array) $object->data)
59
                ->setTenant($object->tenant);
60
            $manager->persist($persona);
61
            $manager->flush();
62
        }
63
    }
64
}
65