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

Version20201215142610::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\Entity\ResourceLink;
9
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo;
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\CDocument;
14
use Chamilo\CourseBundle\Entity\CQuiz;
15
use Chamilo\CourseBundle\Entity\CQuizAnswer;
16
use Chamilo\CourseBundle\Entity\CQuizCategory;
17
use Chamilo\CourseBundle\Entity\CQuizQuestion;
18
use Chamilo\CourseBundle\Entity\CQuizQuestionCategory;
19
use Chamilo\CourseBundle\Repository\CDocumentRepository;
20
use Chamilo\CourseBundle\Repository\CGroupRepository;
21
use Chamilo\CourseBundle\Repository\CQuizCategoryRepository;
22
use Chamilo\CourseBundle\Repository\CQuizQuestionCategoryRepository;
23
use Chamilo\CourseBundle\Repository\CQuizQuestionRepository;
24
use Chamilo\CourseBundle\Repository\CQuizRepository;
25
use Doctrine\DBAL\Connection;
26
use Doctrine\DBAL\Schema\Schema;
27
28
final class Version20201215142610 extends AbstractMigrationChamilo
29
{
30
    public function getDescription(): string
31
    {
32
        return 'Migrate c_quiz';
33
    }
34
35
    public function up(Schema $schema): void
36
    {
37
        $container = $this->getContainer();
38
        $doctrine = $container->get('doctrine');
39
        $em = $doctrine->getManager();
40
        /** @var Connection $connection */
41
        $connection = $em->getConnection();
42
43
        $quizRepo = $container->get(CQuizRepository::class);
44
        $quizQuestionRepo = $container->get(CQuizQuestionRepository::class);
45
        $quizQuestionCategoryRepo = $container->get(CQuizQuestionCategoryRepository::class);
46
47
        $documentRepo = $container->get(CDocumentRepository::class);
48
        $courseRepo = $container->get(CourseRepository::class);
49
        $sessionRepo = $container->get(SessionRepository::class);
50
        $groupRepo = $container->get(CGroupRepository::class);
51
        $userRepo = $container->get(UserRepository::class);
52
53
        $admin = $this->getAdmin();
54
55
        $q = $em->createQuery('SELECT c FROM Chamilo\CoreBundle\Entity\Course c');
56
        /** @var Course $course */
57
        foreach ($q->toIterable() as $course) {
58
            $courseId = $course->getId();
59
            $course = $courseRepo->find($courseId);
60
            $courseRelUserList = $course->getTeachers();
61
            $courseAdmin = null;
62
            if (!empty($courseRelUserList)) {
63
                foreach ($courseRelUserList as $courseRelUser) {
64
                    $courseAdmin = $courseRelUser->getUser();
65
                    break;
66
                }
67
            }
68
69
            if (null === $courseAdmin) {
70
                $courseAdmin = $admin;
71
            }
72
73
            // Quiz
74
            $sql = "SELECT * FROM c_quiz WHERE c_id = $courseId
75
                    ORDER BY iid";
76
            $result = $connection->executeQuery($sql);
77
            $items = $result->fetchAllAssociative();
78
            foreach ($items as $itemData) {
79
                $id = $itemData['iid'];
80
                /** @var CQuiz $resource */
81
                $resource = $quizRepo->find($id);
82
                if ($resource->hasResourceNode()) {
83
                    continue;
84
                }
85
                $result = $this->fixItemProperty(
86
                    'quiz',
87
                    $quizRepo,
88
                    $course,
89
                    $courseAdmin,
90
                    $resource,
91
                    $course
92
                );
93
                if (false === $result) {
94
                    continue;
95
                }
96
97
                $em->persist($resource);
98
                $em->flush();
99
100
                /*$sql = "SELECT q.* FROM c_quiz_question q
101
                        INNER JOIN c_quiz_rel_question cq
102
                        ON (q.iid = cq.exercice_id and q.c_id = cq.c_id)
103
                        WHERE q.c_id = $courseId AND exercice_id = $id
104
                        ORDER BY iid";
105
                $result = $connection->executeQuery($sql);
106
                $questions = $result->fetchAllAssociative();
107
                foreach ($questions as $questionData) {
108
                    $questionData[''];
109
                }
110
                $sql = "SELECT * FROM c_quiz_question WHERE c_id = $courseId
111
                        ORDER BY iid";
112
                $result = $connection->executeQuery($sql);
113
                $items = $result->fetchAllAssociative();
114
                foreach ($items as $itemData) {
115
                }*/
116
            }
117
118
            // Question categories
119
            $sql = "SELECT * FROM c_quiz_question_category WHERE c_id = $courseId
120
                    ORDER BY iid";
121
            $result = $connection->executeQuery($sql);
122
            $items = $result->fetchAllAssociative();
123
            foreach ($items as $itemData) {
124
                $id = $itemData['iid'];
125
                /** @var CQuizQuestionCategory $resource */
126
                $resource = $quizQuestionCategoryRepo->find($id);
127
                if ($resource->hasResourceNode()) {
128
                    continue;
129
                }
130
                $result = $this->fixItemProperty(
131
                    'test_category',
132
                    $quizQuestionCategoryRepo,
133
                    $course,
134
                    $courseAdmin,
135
                    $resource,
136
                    $course
137
                );
138
                if (false === $result) {
139
                    continue;
140
                }
141
142
                $em->persist($resource);
143
                $em->flush();
144
            }
145
146
            $sql = "SELECT * FROM c_quiz_question WHERE c_id = $courseId
147
                    ORDER BY iid";
148
            $result = $connection->executeQuery($sql);
149
            $items = $result->fetchAllAssociative();
150
            foreach ($items as $itemData) {
151
                $id = $itemData['iid'];
152
                /** @var CQuizQuestion $resource */
153
                $resource = $quizQuestionRepo->find($id);
154
                if ($resource->hasResourceNode()) {
155
                    continue;
156
                }
157
158
                $resourceNode = $quizQuestionRepo->addResourceNode($resource, $courseAdmin, $course);
159
                $resource->addCourseLink($course, null, null, ResourceLink::VISIBILITY_PUBLISHED);
160
                $em->persist($resourceNode);
161
162
                $pictureId = $resource->getPicture();
163
                if (!empty($pictureId)) {
164
                    /** @var CDocument $document */
165
                    $document = $documentRepo->find($pictureId);
166
                    if ($document && $document->hasResourceNode() && $document->getResourceNode()->hasResourceFile()) {
167
                        $resourceFile = $document->getResourceNode()->getResourceFile();
168
                        $resourceNode->setResourceFile($resourceFile);
169
                    }
170
                }
171
172
                $em->persist($resource);
173
                $em->flush();
174
            }
175
        }
176
    }
177
}
178