Passed
Push — master ( 5e2840...d88203 )
by Julito
07:41
created

Version20201212114910   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 42
c 1
b 0
f 0
dl 0
loc 71
rs 10
wmc 9

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getDescription() 0 3 1
B up() 0 64 8
1
<?php
2
3
namespace Chamilo\CoreBundle\Migrations\Schema\V200;
4
5
use Chamilo\CoreBundle\Entity\AccessUrl;
6
use Chamilo\CoreBundle\Entity\User;
7
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo;
8
use Chamilo\CoreBundle\Repository\AccessUrlRepository;
9
use Chamilo\CoreBundle\Repository\UserRepository;
10
use Chamilo\CoreBundle\ToolChain;
11
use Doctrine\DBAL\Connection;
12
use Doctrine\DBAL\Schema\Schema;
13
14
final class Version20201212114910 extends AbstractMigrationChamilo
15
{
16
    public function getDescription(): string
17
    {
18
        return 'Create tools. Migrate portals and users';
19
    }
20
21
    public function up(Schema $schema): void
22
    {
23
        $container = $this->getContainer();
24
        $doctrine = $container->get('doctrine');
25
        $em = $doctrine->getManager();
26
        /** @var Connection $connection */
27
        $connection = $em->getConnection();
28
29
        // Install tools.
30
        $toolChain = $container->get(ToolChain::class);
31
        $toolChain->createTools($em);
32
33
        //$urlRepo = $container->get(AccessUrlRepository::class);
34
        $urlRepo = $em->getRepository(AccessUrl::class);
35
        $userRepo = $container->get(UserRepository::class);
36
37
        $userList = [];
38
        $admin = $this->getAdmin();
39
        $adminId = $admin->getId();
40
        $userList[$adminId] = $admin;
41
42
        if (false === $admin->hasResourceNode()) {
43
            $resourceNode = $userRepo->addUserToResourceNode($adminId, $adminId);
44
            $em->persist($resourceNode);
45
        }
46
47
        $urls = $urlRepo->findAll();
48
        /** @var AccessUrl $url */
49
        foreach ($urls as $url) {
50
            if (false === $url->hasResourceNode()) {
51
                $urlRepo->addResourceNode($url, $admin);
52
                $em->persist($url);
53
            }
54
        }
55
56
        $em->flush();
57
58
        $sql = 'SELECT * FROM user';
59
        $result = $connection->executeQuery($sql);
60
        $users = $result->fetchAllAssociative();
61
62
        foreach ($users as $user) {
63
            /** @var User $userEntity */
64
            $userEntity = $userRepo->find($user['id']);
65
            if ($userEntity->hasResourceNode()) {
66
                continue;
67
            }
68
            $creatorId = $user['creator_id'];
69
            $creator = null;
70
            if (isset($userList[$adminId])) {
71
                $creator = $userList[$adminId];
72
            } else {
73
                $creator = $userRepo->find($creatorId);
74
                $userList[$adminId] = $creator;
75
            }
76
            if (null === $creator) {
77
                $creator = $admin;
78
            }
79
80
            $resourceNode = $userRepo->addUserToResourceNode($adminId, $creator->getId());
81
            $em->persist($resourceNode);
82
        }
83
84
        $em->flush();
85
    }
86
}
87