Passed
Pull Request — develop (#31)
by Mario
05:07
created

UserLoader::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace AppBundle\Tenant\Loader;
4
5
use AppBundle\Entity\User;
6
use AppBundle\EventListener\User\IdentityListener;
7
use AppBundle\Service\UserService;
8
use Ds\Component\Tenant\Entity\Tenant;
9
use Ds\Component\Tenant\Loader\Loader;
10
use Symfony\Component\Yaml\Yaml;
11
12
/**
13
 * Class UserLoader
14
 */
15
class UserLoader implements Loader
16
{
17
    /**
18
     * @var \AppBundle\Service\UserService
19
     */
20
    protected $userService;
21
22
    /**
23
     * Constructor
24
     *
25
     * @param \AppBundle\Service\UserService $userService
26
     */
27
    public function __construct(UserService $userService)
28
    {
29
        $this->userService = $userService;
30
    }
31
32
    /**
33
     * {@inheritdoc}
34
     */
35
    public function load(Tenant $tenant)
36
    {
37
        $metadata = $this->userService->getManager()->getClassMetadata(User::class);
38
39
        foreach ($metadata->entityListeners as $event => $listeners) {
40
            foreach ($listeners as $key => $listener) {
41
                if (IdentityListener::class === $listener['class']) {
42
                    unset($metadata->entityListeners[$event][$key]);
43
                }
44
            }
45
        }
46
47
        $yml = file_get_contents('/srv/api-platform/src/AppBundle/Resources/tenant/users.yml');
48
49
        // @todo Figure out how symfony does parameter binding and use the same technique
50
        $yml = strtr($yml, [
51
            '%user.system.uuid%' => $tenant->getData()['user']['system']['uuid'],
52
            '%user.system.password%' => $tenant->getData()['user']['system']['password'],
53
            '%user.admin.uuid%' => $tenant->getData()['user']['admin']['uuid'],
54
            '%user.admin.password%' => $tenant->getData()['user']['admin']['password'],
55
            '%business_unit.administration.uuid%' => $tenant->getData()['business_unit']['administration']['uuid'],
56
            '%tenant.uuid%' => $tenant->getUuid()
57
        ]);
58
59
        $users = Yaml::parse($yml, YAML::PARSE_OBJECT_FOR_MAP);
60
        $manager = $this->userService->getCustomManager();
61
62
        foreach ($users->objects as $object) {
63
            $object = (object) array_merge((array) $users->prototype, (array) $object);
64
            $user = $manager->createUser();
65
            $user
66
                ->setUsername($object->username)
67
                ->setEmail($object->email)
68
                ->setPlainPassword($object->password)
69
                ->setRoles($object->roles)
70
                ->setOwner($object->owner)
0 ignored issues
show
Bug introduced by
The method setOwner() does not exist on FOS\UserBundle\Model\UserInterface. It seems like you code against a sub-type of FOS\UserBundle\Model\UserInterface such as AppBundle\Entity\User. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

70
                ->/** @scrutinizer ignore-call */ setOwner($object->owner)
Loading history...
71
                ->setOwnerUuid($object->owner_uuid)
72
                ->setIdentity($object->identity)
73
                ->setIdentityUuid($object->identity_uuid)
74
                ->setEnabled($object->enabled)
75
                ->setTenant($object->tenant);
76
            $manager->updateUser($user);
77
        }
78
    }
79
}
80