Passed
Push — master ( cd85be...b9a35c )
by Julito
12:36
created

Version20201215141131::getDescription()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
namespace Chamilo\CoreBundle\Migrations\Schema\V200;
6
7
use Chamilo\CoreBundle\Entity\Course;
8
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo;
9
use Chamilo\CoreBundle\Repository\Node\AccessUrlRepository;
10
use Chamilo\CoreBundle\Repository\Node\CourseRepository;
11
use Chamilo\CoreBundle\Repository\Node\UserRepository;
12
use Chamilo\CoreBundle\Repository\SessionRepository;
13
use Chamilo\CourseBundle\Entity\CLink;
14
use Chamilo\CourseBundle\Entity\CLinkCategory;
15
use Chamilo\CourseBundle\Repository\CGroupRepository;
16
use Chamilo\CourseBundle\Repository\CLinkCategoryRepository;
17
use Chamilo\CourseBundle\Repository\CLinkRepository;
18
use Doctrine\DBAL\Connection;
19
use Doctrine\DBAL\Schema\Schema;
20
21
final class Version20201215141131 extends AbstractMigrationChamilo
22
{
23
    public function getDescription(): string
24
    {
25
        return 'Migrate c_link_category, c_link';
26
    }
27
28
    public function up(Schema $schema): void
29
    {
30
        $container = $this->getContainer();
31
        $doctrine = $container->get('doctrine');
32
        $em = $doctrine->getManager();
33
        /** @var Connection $connection */
34
        $connection = $em->getConnection();
35
36
        $linkRepo = $container->get(CLinkRepository::class);
37
        $linkCategoryRepo = $container->get(CLinkCategoryRepository::class);
38
        $courseRepo = $container->get(CourseRepository::class);
39
        $sessionRepo = $container->get(SessionRepository::class);
40
        $groupRepo = $container->get(CGroupRepository::class);
41
        $userRepo = $container->get(UserRepository::class);
42
43
        $admin = $this->getAdmin();
44
45
        $q = $em->createQuery('SELECT c FROM Chamilo\CoreBundle\Entity\Course c');
46
        /** @var Course $course */
47
        foreach ($q->toIterable() as $course) {
48
            $counter = 1;
49
            $courseId = $course->getId();
50
            $course = $courseRepo->find($courseId);
51
52
            $sql = "SELECT * FROM c_link_category WHERE c_id = $courseId
53
                    ORDER BY iid";
54
            $result = $connection->executeQuery($sql);
55
            $items = $result->fetchAllAssociative();
56
            foreach ($items as $itemData) {
57
                $id = $itemData['iid'];
58
                /** @var CLinkCategory $event */
59
                $resource = $linkCategoryRepo->find($id);
60
                if ($resource->hasResourceNode()) {
61
                    continue;
62
                }
63
                $result = $this->fixItemProperty(
64
                    'link_category',
65
                    $linkCategoryRepo,
66
                    $course,
67
                    $admin,
68
                    $resource,
69
                    $course
70
                );
71
72
                if (false === $result) {
73
                    continue;
74
                }
75
                $em->persist($resource);
76
                $em->flush();
77
            }
78
79
            $sql = "SELECT * FROM c_link WHERE c_id = $courseId
80
                    ORDER BY iid";
81
            $result = $connection->executeQuery($sql);
82
            $items = $result->fetchAllAssociative();
83
            foreach ($items as $itemData) {
84
                $id = $itemData['iid'];
85
                $categoryId = $itemData['category_id'];
86
                /** @var CLink $event */
87
                $resource = $linkRepo->find($id);
88
                if ($resource->hasResourceNode()) {
89
                    continue;
90
                }
91
                $parent = $course;
92
93
                if (!empty($categoryId)) {
94
                    $category = $linkCategoryRepo->find($categoryId);
95
                    if (null !== $category) {
96
                        $parent = $category;
97
                    }
98
                }
99
100
                $result = $this->fixItemProperty(
101
                    'link',
102
                    $linkRepo,
103
                    $course,
104
                    $admin,
105
                    $resource,
106
                    $parent
107
                );
108
109
                if (false === $result) {
110
                    continue;
111
                }
112
                $em->persist($resource);
113
                $em->flush();
114
            }
115
        }
116
    }
117
}
118