Passed
Push — master ( b9a35c...ab20b0 )
by Julito
15:41
created

Version20201216120654   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 35
c 1
b 0
f 0
dl 0
loc 57
rs 10
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getDescription() 0 3 1
A up() 0 50 5
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\CourseRepository;
10
use Chamilo\CoreBundle\Repository\Node\UserRepository;
11
use Chamilo\CoreBundle\Repository\SessionRepository;
12
use Chamilo\CourseBundle\Entity\CGlossary;
13
use Chamilo\CourseBundle\Repository\CGlossaryRepository;
14
use Chamilo\CourseBundle\Repository\CGroupRepository;
15
use Doctrine\DBAL\Connection;
16
use Doctrine\DBAL\Schema\Schema;
17
18
final class Version20201216120654 extends AbstractMigrationChamilo
19
{
20
    public function getDescription(): string
21
    {
22
        return 'Migrate c_glossary';
23
    }
24
25
    public function up(Schema $schema): void
26
    {
27
        $container = $this->getContainer();
28
        $doctrine = $container->get('doctrine');
29
        $em = $doctrine->getManager();
30
        /** @var Connection $connection */
31
        $connection = $em->getConnection();
32
33
        $glossaryRepo = $container->get(CGlossaryRepository::class);
34
        $courseRepo = $container->get(CourseRepository::class);
35
        $sessionRepo = $container->get(SessionRepository::class);
36
        $groupRepo = $container->get(CGroupRepository::class);
37
        $userRepo = $container->get(UserRepository::class);
38
39
        $admin = $this->getAdmin();
40
41
        $q = $em->createQuery('SELECT c FROM Chamilo\CoreBundle\Entity\Course c');
42
        /** @var Course $course */
43
        foreach ($q->toIterable() as $course) {
44
            $courseId = $course->getId();
45
            $course = $courseRepo->find($courseId);
46
47
            // Glossary.
48
            $sql = "SELECT * FROM c_glossary WHERE c_id = $courseId
49
                    ORDER BY iid";
50
            $result = $connection->executeQuery($sql);
51
            $items = $result->fetchAllAssociative();
52
            foreach ($items as $itemData) {
53
                $id = $itemData['iid'];
54
                /** @var CGlossary $resource */
55
                $resource = $glossaryRepo->find($id);
56
                if ($resource->hasResourceNode()) {
57
                    continue;
58
                }
59
60
                $result = $this->fixItemProperty(
61
                    'glossary',
62
                    $glossaryRepo,
63
                    $course,
64
                    $admin,
65
                    $resource,
66
                    $course
67
                );
68
69
                if (false === $result) {
70
                    continue;
71
                }
72
73
                $em->persist($resource);
74
                $em->flush();
75
            }
76
        }
77
    }
78
}
79