Passed
Pull Request — master (#6692)
by
unknown
10:35
created

Version20250904150200::down()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 5
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/* For licensing terms, see /license.txt */
6
7
namespace Chamilo\CoreBundle\Migrations\Schema\V200;
8
9
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo;
10
use Doctrine\DBAL\Schema\Schema;
11
12
final class Version20250904150200 extends AbstractMigrationChamilo
13
{
14
    public function getDescription(): string
15
    {
16
        return 'Remove c_quiz.active; migrate visibility to resource_link.visibility (Draft/Published).';
17
    }
18
19
    public function up(Schema $schema): void
20
    {
21
        $this->addSql("
22
            UPDATE resource_link rl
23
            INNER JOIN c_quiz q ON q.resource_node_id = rl.resource_node_id
24
            INNER JOIN resource_node rn ON rn.id = rl.resource_node_id
25
            INNER JOIN resource_type rt ON rt.id = rn.resource_type_id AND rt.title = 'exercises'
26
            SET rl.visibility = CASE WHEN q.active = 1 THEN 2 ELSE 0 END
27
        ");
28
29
        $this->addSql('ALTER TABLE c_quiz DROP COLUMN active');
30
    }
31
32
    public function down(Schema $schema): void
33
    {
34
        $this->addSql('ALTER TABLE c_quiz ADD active INT NOT NULL DEFAULT 1');
35
36
        $this->addSql("
37
            UPDATE c_quiz q
38
            LEFT JOIN (
39
                SELECT rl.resource_node_id,
40
                       MAX(CASE WHEN rl.visibility = 2 THEN 1 ELSE 0 END) AS is_published
41
                FROM resource_link rl
42
                INNER JOIN resource_node rn ON rn.id = rl.resource_node_id
43
                INNER JOIN resource_type rt ON rt.id = rn.resource_type_id AND rt.title = 'exercises'
44
                GROUP BY rl.resource_node_id
45
            ) x ON x.resource_node_id = q.resource_node_id
46
            SET q.active = IFNULL(x.is_published, 0)
47
        ");
48
    }
49
}
50