Passed
Push — master ( b58c60...cd85be )
by Julito
08:44
created

Version20201215153517   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 96
Duplicated Lines 0 %

Importance

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

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getDescription() 0 3 1
B up() 0 89 8
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
namespace Chamilo\CoreBundle\Migrations\Schema\V200;
6
7
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo;
8
use Chamilo\CoreBundle\Repository\Node\CourseRepository;
9
use Chamilo\CoreBundle\Repository\Node\UserRepository;
10
use Chamilo\CoreBundle\Repository\SessionRepository;
11
use Chamilo\CourseBundle\Entity\CAnnouncementAttachment;
12
use Chamilo\CourseBundle\Entity\CQuiz;
13
use Chamilo\CourseBundle\Repository\CAnnouncementAttachmentRepository;
14
use Chamilo\CourseBundle\Repository\CAnnouncementRepository;
15
use Chamilo\CourseBundle\Repository\CGroupRepository;
16
use Chamilo\Kernel;
17
use Doctrine\DBAL\Connection;
18
use Doctrine\DBAL\Schema\Schema;
19
20
final class Version20201215153517 extends AbstractMigrationChamilo
21
{
22
    public function getDescription(): string
23
    {
24
        return 'Migrate announcements';
25
    }
26
27
    public function up(Schema $schema): void
28
    {
29
        $container = $this->getContainer();
30
        $doctrine = $container->get('doctrine');
31
        $em = $doctrine->getManager();
32
        /** @var Connection $connection */
33
        $connection = $em->getConnection();
34
35
        $announcementRepo = $container->get(CAnnouncementRepository::class);
36
        $announcementAttachmentRepo = $container->get(CAnnouncementAttachmentRepository::class);
37
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
        /** @var Kernel $kernel */
44
        $kernel = $container->get('kernel');
45
        $rootPath = $kernel->getProjectDir();
46
47
        $admin = $this->getAdmin();
48
49
        $q = $em->createQuery('SELECT c FROM Chamilo\CoreBundle\Entity\Course c');
50
        foreach ($q->toIterable() as $course) {
51
            $courseId = $course->getId();
52
            $course = $courseRepo->find($courseId);
53
54
            $sql = "SELECT * FROM c_announcement WHERE c_id = $courseId
55
                    ORDER BY iid";
56
            $result = $connection->executeQuery($sql);
57
            $items = $result->fetchAllAssociative();
58
            foreach ($items as $itemData) {
59
                $id = $itemData['iid'];
60
                /** @var CQuiz $resource */
61
                $resource = $announcementRepo->find($id);
62
                if ($resource->hasResourceNode()) {
63
                    continue;
64
                }
65
66
                $result = $this->fixItemProperty(
67
                    'announcement',
68
                    $announcementRepo,
69
                    $course,
70
                    $admin,
71
                    $resource,
72
                    $course
73
                );
74
75
                if (false === $result) {
76
                    continue;
77
                }
78
79
                $em->persist($resource);
80
                $em->flush();
81
            }
82
83
            $sql = "SELECT * FROM c_announcement_attachment WHERE c_id = $courseId
84
                    ORDER BY iid";
85
            $result = $connection->executeQuery($sql);
86
            $items = $result->fetchAllAssociative();
87
            foreach ($items as $itemData) {
88
                $id = $itemData['iid'];
89
                $path = $itemData['path'];
90
                $fileName = $itemData['filename'];
91
                /** @var CAnnouncementAttachment $resource */
92
                $resource = $announcementAttachmentRepo->find($id);
93
                if ($resource->hasResourceNode()) {
94
                    continue;
95
                }
96
                $result = $this->fixItemProperty(
97
                    'announcement_attachment',
98
                    $announcementAttachmentRepo,
99
                    $course,
100
                    $admin,
101
                    $resource,
102
                    $course
103
                );
104
105
                if (false === $result) {
106
                    continue;
107
                }
108
109
                $em->persist($resource);
110
                $em->flush();
111
112
                $filePath = $rootPath.'/app/courses/'.$course->getDirectory().'/upload/announcements/'.$path;
113
                $this->addLegacyFileToResource($filePath, $announcementAttachmentRepo, $resource, $id, $fileName);
114
                $em->persist($resource);
115
                $em->flush();
116
            }
117
        }
118
    }
119
}
120