Passed
Push — master ( 0b0f56...afb2ec )
by Julito
16:30 queued 04:59
created

Version20181025064351::down()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 0
nop 1
dl 0
loc 2
rs 10
c 0
b 0
f 0
nc 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
class Version20181025064351 extends AbstractMigrationChamilo
11
{
12
    public function getDescription(): string
13
    {
14
        return 'Migrate gradebook_category';
15
    }
16
17
    public function up(Schema $schema): void
18
    {
19
        $table = $schema->getTable('gradebook_result_log');
20
        if ($table->hasColumn('id_result')) {
21
            $this->addSql('DELETE FROM gradebook_result_log WHERE id_result IS NULL');
22
            $this->addSql('ALTER TABLE gradebook_result_log CHANGE id_result result_id INT NOT NULL');
23
        }
24
25
        $this->addSql('ALTER TABLE gradebook_category CHANGE user_id user_id INT DEFAULT NULL');
26
        $this->addSql(
27
            'DELETE FROM gradebook_category WHERE user_id IS NOT NULL AND user_id NOT IN (SELECT id FROM user)'
28
        );
29
30
        $table = $schema->getTable('gradebook_category');
31
        if (false === $table->hasColumn('c_id')) {
32
            $this->addSql('ALTER TABLE gradebook_category ADD c_id INT DEFAULT NULL');
33
            $this->addSql('UPDATE gradebook_category SET c_id = (SELECT id FROM course WHERE code = course_code)');
34
            $this->addSql('ALTER TABLE gradebook_category DROP course_code');
35
            $this->addSql(
36
                'ALTER TABLE gradebook_category ADD CONSTRAINT FK_96A4C70591D79BD3 FOREIGN KEY (c_id) REFERENCES course (id);'
37
            );
38
            $this->addSql('CREATE INDEX IDX_96A4C70591D79BD3 ON gradebook_category (c_id);');
39
        }
40
        if (false === $table->hasColumn('depends')) {
41
            $this->addSql('ALTER TABLE gradebook_category ADD depends LONGTEXT DEFAULT NULL');
42
        }
43
        if (false === $table->hasColumn('minimum_to_validate')) {
44
            $this->addSql('ALTER TABLE gradebook_category ADD minimum_to_validate INT DEFAULT NULL');
45
        }
46
        if (false === $table->hasColumn('gradebooks_to_validate_in_dependence')) {
47
            $this->addSql('ALTER TABLE gradebook_category ADD gradebooks_to_validate_in_dependence INT DEFAULT NULL');
48
        }
49
50
        if (false === $table->hasIndex('idx_gb_cat_parent')) {
51
            $this->addSql('CREATE INDEX idx_gb_cat_parent ON gradebook_category (parent_id)');
52
        }
53
54
        if (false === $table->hasForeignKey('FK_96A4C705A76ED395')) {
55
            $this->addSql(
56
                'ALTER TABLE gradebook_category ADD CONSTRAINT FK_96A4C705A76ED395 FOREIGN KEY (user_id) REFERENCES user (id)'
57
            );
58
        }
59
        if (false === $table->hasIndex('IDX_96A4C705A76ED395')) {
60
            $this->addSql('CREATE INDEX IDX_96A4C705A76ED395 ON gradebook_category (user_id)');
61
        }
62
63
        // Evaluation.
64
        $table = $schema->getTable('gradebook_evaluation');
65
        if (false === $table->hasColumn('c_id')) {
66
            $this->addSql('ALTER TABLE gradebook_evaluation ADD c_id INT DEFAULT NULL');
67
            $this->addSql('UPDATE gradebook_evaluation SET c_id = (SELECT id FROM course WHERE code = course_code)');
68
            $this->addSql('ALTER TABLE gradebook_evaluation DROP course_code');
69
            $this->addSql(
70
                'ALTER TABLE gradebook_evaluation ADD CONSTRAINT FK_DDDED80491D79BD3 FOREIGN KEY (c_id) REFERENCES course (id);'
71
            );
72
            $this->addSql('CREATE INDEX IDX_DDDED80491D79BD3 ON gradebook_evaluation (c_id)');
73
            //$this->addSql('ALTER TABLE gradebook_evaluation RENAME INDEX fk_ddded80491d79bd3 TO IDX_DDDED80491D79BD3;');
74
        }
75
        if (false === $table->hasIndex('idx_ge_cat')) {
76
            $this->addSql('CREATE INDEX idx_ge_cat ON gradebook_evaluation (category_id)');
77
        }
78
79
        if (false === $table->hasColumn('best_score')) {
80
            $this->addSql('ALTER TABLE gradebook_evaluation ADD best_score DOUBLE PRECISION DEFAULT NULL');
81
        }
82
        if (false === $table->hasColumn('average_score')) {
83
            $this->addSql('ALTER TABLE gradebook_evaluation ADD average_score DOUBLE PRECISION DEFAULT NULL');
84
        }
85
        if (false === $table->hasColumn('score_weight')) {
86
            $this->addSql('ALTER TABLE gradebook_evaluation ADD score_weight DOUBLE PRECISION DEFAULT NULL');
87
        }
88
        if (false === $table->hasColumn('user_score_list')) {
89
            $this->addSql(
90
                'ALTER TABLE gradebook_evaluation ADD user_score_list LONGTEXT DEFAULT NULL COMMENT \'(DC2Type:array)\''
91
            );
92
        }
93
        $this->addSql('ALTER TABLE gradebook_evaluation CHANGE user_id user_id INT DEFAULT NULL');
94
95
        if (false === $table->hasForeignKey('FK_DDDED804A76ED395')) {
96
            $this->addSql(
97
                'ALTER TABLE gradebook_evaluation ADD CONSTRAINT FK_DDDED804A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE'
98
            );
99
        }
100
101
        if (false === $table->hasIndex('IDX_DDDED804A76ED395')) {
102
            $this->addSql('CREATE INDEX IDX_DDDED804A76ED395 ON gradebook_evaluation (user_id)');
103
        }
104
105
        $table = $schema->getTable('gradebook_link');
106
        if (false === $table->hasColumn('c_id')) {
107
            $this->addSql('ALTER TABLE gradebook_link ADD c_id INT DEFAULT NULL');
108
            $this->addSql('UPDATE gradebook_link SET c_id = (SELECT id FROM course WHERE code = course_code)');
109
            $this->addSql('ALTER TABLE gradebook_link DROP course_code');
110
            $this->addSql(
111
                'ALTER TABLE gradebook_link ADD CONSTRAINT FK_4F0F595F91D79BD3 FOREIGN KEY (c_id) REFERENCES course (id);'
112
            );
113
            $this->addSql('CREATE INDEX IDX_4F0F595F91D79BD3 ON gradebook_link (c_id);');
114
        }
115
        if (false === $table->hasIndex('idx_gl_cat')) {
116
            $this->addSql('CREATE INDEX idx_gl_cat ON gradebook_link (category_id)');
117
        }
118
119
        $table = $schema->getTable('gradebook_result');
120
        if (false === $table->hasIndex('idx_gb_uid_eid')) {
121
            $this->addSql('CREATE INDEX idx_gb_uid_eid ON gradebook_result (user_id, evaluation_id)');
122
        }
123
124
        $table = $schema->getTable('gradebook_certificate');
125
        if (false === $table->hasColumn('downloaded_at')) {
126
            $this->addSql('ALTER TABLE gradebook_certificate ADD downloaded_at DATETIME DEFAULT NULL;');
127
            $this->addSql(
128
                'UPDATE gradebook_certificate gc SET downloaded_at = (
129
                        SELECT value from extra_field e
130
                        INNER JOIN extra_field_values v on v.field_id = e.id
131
                        WHERE variable = "downloaded_at" and extra_field_type = 11 and item_id = gc.id
132
                    )'
133
            );
134
        }
135
136
        $this->addSql('ALTER TABLE gradebook_certificate CHANGE user_id user_id INT DEFAULT NULL');
137
138
        if (false === $table->hasForeignKey('FK_650669DA76ED395')) {
139
            $this->addSql(
140
                'ALTER TABLE gradebook_certificate ADD CONSTRAINT FK_650669DA76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE'
141
            );
142
        }
143
144
        $table = $schema->hasTable('gradebook_result_attempt');
145
        if (false === $table) {
146
            $this->addSql(
147
                'CREATE TABLE gradebook_result_attempt (id INT AUTO_INCREMENT NOT NULL, comment LONGTEXT DEFAULT NULL, score DOUBLE PRECISION DEFAULT NULL, result_id INT NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB ROW_FORMAT = DYNAMIC;'
148
            );
149
        }
150
151
        $this->addSql(
152
            'ALTER TABLE gradebook_link ADD best_score DOUBLE PRECISION DEFAULT NULL, ADD average_score DOUBLE PRECISION DEFAULT NULL, ADD score_weight DOUBLE PRECISION DEFAULT NULL, ADD user_score_list LONGTEXT DEFAULT NULL COMMENT \'(DC2Type:array)\', CHANGE user_id user_id INT DEFAULT NULL'
153
        );
154
        $this->addSql(
155
            'ALTER TABLE gradebook_link ADD CONSTRAINT FK_4F0F595FA76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE'
156
        );
157
        $this->addSql('CREATE INDEX IDX_4F0F595FA76ED395 ON gradebook_link (user_id)');
158
        $this->addSql('ALTER TABLE gradebook_linkeval_log CHANGE user_id_log user_id_log INT DEFAULT NULL');
159
        $this->addSql(
160
            'ALTER TABLE gradebook_linkeval_log ADD CONSTRAINT FK_1F554C7474C99BA2 FOREIGN KEY (user_id_log) REFERENCES user (id) ON DELETE CASCADE'
161
        );
162
        $this->addSql('CREATE INDEX IDX_1F554C7474C99BA2 ON gradebook_linkeval_log (user_id_log)');
163
        $this->addSql('ALTER TABLE gradebook_result CHANGE user_id user_id INT DEFAULT NULL');
164
        $this->addSql(
165
            'ALTER TABLE gradebook_result ADD CONSTRAINT FK_B88AEB67A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE'
166
        );
167
        $this->addSql('CREATE INDEX IDX_B88AEB67A76ED395 ON gradebook_result (user_id)');
168
        $this->addSql('ALTER TABLE gradebook_result_log CHANGE user_id user_id INT DEFAULT NULL');
169
        $this->addSql(
170
            'ALTER TABLE gradebook_result_log ADD CONSTRAINT FK_C5C4CABBA76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE'
171
        );
172
        $this->addSql('CREATE INDEX IDX_C5C4CABBA76ED395 ON gradebook_result_log (user_id)');
173
        $this->addSql('ALTER TABLE gradebook_score_log CHANGE user_id user_id INT DEFAULT NULL');
174
        $this->addSql(
175
            'ALTER TABLE gradebook_score_log ADD CONSTRAINT FK_640C6449A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE'
176
        );
177
178
        $table = $schema->hasTable('gradebook_comment');
179
        if (false === $table) {
180
            $this->addSql('CREATE TABLE gradebook_comment (id BIGINT AUTO_INCREMENT NOT NULL, user_id INT DEFAULT NULL, gradebook_id INT DEFAULT NULL, comment LONGTEXT NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX IDX_C3B70763A76ED395 (user_id), INDEX IDX_C3B70763AD3ED51C (gradebook_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB ROW_FORMAT = DYNAMIC;');
181
            $this->addSql('ALTER TABLE gradebook_comment ADD CONSTRAINT FK_C3B70763A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE;');
182
            $this->addSql('ALTER TABLE gradebook_comment ADD CONSTRAINT FK_C3B70763AD3ED51C FOREIGN KEY (gradebook_id) REFERENCES gradebook_category (id) ON DELETE CASCADE;');
183
        }
184
    }
185
186
    public function down(Schema $schema): void
187
    {
188
    }
189
}
190