Passed
Push — master ( c83bf1...0c3c7b )
by Julito
09:39
created

Version20191101132000   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 43
dl 0
loc 74
rs 10
c 0
b 0
f 0
wmc 13

2 Methods

Rating   Name   Duplication   Size   Complexity  
F up() 0 67 12
A down() 0 2 1
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 Doctrine\DBAL\Schema\Schema;
9
10
/**
11
 * Course.
12
 */
13
class Version20191101132000 extends AbstractMigrationChamilo
14
{
15
    public function up(Schema $schema): void
16
    {
17
        // Update iso
18
        $sql = 'UPDATE course SET course_language = (SELECT isocode FROM language WHERE english_name = course_language);';
19
        $this->addSql($sql);
20
21
        $table = $schema->getTable('course');
22
        if (false === $table->hasColumn('resource_node_id')) {
23
            $this->addSql('ALTER TABLE course ADD COLUMN resource_node_id INT DEFAULT NULL;');
24
            $this->addSql(
25
                'ALTER TABLE course ADD CONSTRAINT FK_169E6FB91BAD783F FOREIGN KEY (resource_node_id) REFERENCES resource_node (id) ON DELETE CASCADE;'
26
            );
27
            $this->addSql('CREATE UNIQUE INDEX UNIQ_169E6FB91BAD783F ON course (resource_node_id);');
28
        }
29
30
        if (false === $schema->hasTable('course_rel_category')) {
31
            $this->addSql('CREATE TABLE course_rel_category (course_id INT NOT NULL, course_category_id INT NOT NULL, INDEX IDX_8EB34CC5591CC992 (course_id), INDEX IDX_8EB34CC56628AD36 (course_category_id), PRIMARY KEY(course_id, course_category_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB ROW_FORMAT = DYNAMIC');
32
            $this->addSql('ALTER TABLE course_rel_category ADD CONSTRAINT FK_8EB34CC5591CC992 FOREIGN KEY (course_id) REFERENCES course (id) ON DELETE CASCADE');
33
            $this->addSql('ALTER TABLE course_rel_category ADD CONSTRAINT FK_8EB34CC56628AD36 FOREIGN KEY (course_category_id) REFERENCES course_category (id) ON DELETE CASCADE');
34
35
            $courseTable = $schema->getTable('course');
36
            if ($courseTable->hasForeignKey('FK_169E6FB912469DE2')) {
37
                $this->addSql('ALTER TABLE course DROP FOREIGN KEY FK_169E6FB912469DE2');
38
            }
39
            if ($courseTable->hasForeignKey('IDX_169E6FB912469DE2')) {
40
                $this->addSql('DROP INDEX IDX_169E6FB912469DE2 ON course');
41
            }
42
            if ($courseTable->hasColumn('category_id')) {
43
                $this->addSql('ALTER TABLE course DROP category_id');
44
            }
45
        }
46
47
        $connection = $this->getEntityManager()->getConnection();
48
        $sql = 'SELECT * FROM course_category';
49
        $result = $connection->executeQuery($sql);
50
        $all = $result->fetchAllAssociative();
51
52
        $categories = array_column($all, 'parent_id', 'id');
53
        $categoryCodeList = array_column($all, 'id', 'code');
54
55
        foreach ($categories as $categoryId => $parentId) {
56
            if (empty($parentId)) {
57
                continue;
58
            }
59
            $newParentId = $categoryCodeList[$parentId];
60
            if (!empty($newParentId)) {
61
                $this->addSql("UPDATE course_category SET parent_id = $newParentId WHERE id = $categoryId");
62
            }
63
        }
64
65
        $this->addSql('ALTER TABLE course_category CHANGE parent_id parent_id INT DEFAULT NULL;');
66
67
        $table = $schema->getTable('course_category');
68
        if (false === $table->hasForeignKey('FK_AFF87497727ACA70')) {
69
            $this->addSql(
70
                'ALTER TABLE course_category ADD CONSTRAINT FK_AFF87497727ACA70 FOREIGN KEY (parent_id) REFERENCES course_category (id);'
71
            );
72
        }
73
        if (!$table->hasColumn('image')) {
74
            $this->addSql('ALTER TABLE course_category ADD image VARCHAR(255) DEFAULT NULL');
75
        }
76
        if (!$table->hasColumn('description')) {
77
            $this->addSql('ALTER TABLE course_category ADD description LONGTEXT DEFAULT NULL');
78
        }
79
80
        $this->addSql(
81
            'ALTER TABLE course_category CHANGE auth_course_child auth_course_child VARCHAR(40) DEFAULT NULL'
82
        );
83
    }
84
85
    public function down(Schema $schema): void
86
    {
87
    }
88
}
89