Passed
Push — master ( 8b082a...44b863 )
by
unknown
19:43 queued 10:10
created

Version20251015073500::down()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 9
rs 10
c 1
b 0
f 1
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
declare(strict_types=1);
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 Version20251015073500 extends AbstractMigrationChamilo
13
{
14
    public function getDescription(): string
15
    {
16
        return 'Clean role table: ensure ANONYMOUS exists, drop SUPER_ADMIN, and keep only canonical roles.';
17
    }
18
19
    public function up(Schema $schema): void
20
    {
21
        $canonical = [
22
            'ANONYMOUS',
23
            'INVITEE',
24
            'STUDENT',
25
            'TEACHER',
26
            'ADMIN',
27
            'GLOBAL_ADMIN',
28
            'HR',
29
            'QUESTION_MANAGER',
30
            'SESSION_MANAGER',
31
            'STUDENT_BOSS',
32
        ];
33
        $inList = "'" . implode("','", array_map('addslashes', $canonical)) . "'";
34
35
        $this->addSql("
36
            INSERT INTO role (code, constant_value, title, description, system_role, created_at)
37
            SELECT 'ANONYMOUS', 0, 'Anonymous', 'Unauthenticated users', 1, NOW()
38
            FROM DUAL
39
            WHERE NOT EXISTS (SELECT 1 FROM role WHERE code = 'ANONYMOUS')
40
        ");
41
        $this->write('Ensured ANONYMOUS role exists.');
42
43
        $this->addSql("
44
            DELETE prr FROM permission_rel_role prr
45
            INNER JOIN role r ON r.id = prr.role_id
46
            WHERE r.code = 'SUPER_ADMIN'
47
        ");
48
        $this->addSql("DELETE FROM role WHERE code = 'SUPER_ADMIN'");
49
        $this->write('Removed SUPER_ADMIN and related PRR rows.');
50
51
        $this->addSql("
52
            DELETE prr FROM permission_rel_role prr
53
            INNER JOIN role r ON r.id = prr.role_id
54
            WHERE r.code NOT IN ($inList)
55
        ");
56
        $this->addSql("DELETE FROM role WHERE code NOT IN ($inList)");
57
        $this->write('Removed non-canonical roles and related PRR rows.');
58
59
        $defaults = [
60
            'INVITEE'          => [1,  'Invitee',               'Invited users',                               1],
61
            'STUDENT'          => [2,  'Student',               'Students of courses or sessions',             1],
62
            'TEACHER'          => [3,  'Teacher',               'Teachers of courses or sessions',             1],
63
            'ADMIN'            => [4,  'Administrator',         'Platform administrators',                     1],
64
            'GLOBAL_ADMIN'     => [6,  'Global Administrator',  'Global admin users',                          1],
65
            'HR'               => [7,  'HR Manager',            'Human resources managers',                    0],
66
            'QUESTION_MANAGER' => [8,  'Question Bank Manager', 'Manages the question bank across courses',    0],
67
            'SESSION_MANAGER'  => [9,  'Session Manager',       'Manages sessions and session content',        0],
68
            'STUDENT_BOSS'     => [10, 'Student Boss',          'Manages groups of students',                  0],
69
        ];
70
71
        foreach ($defaults as $code => [$const, $title, $desc, $sys]) {
72
            $this->addSql("
73
                INSERT INTO role (code, constant_value, title, description, system_role, created_at)
74
                SELECT '$code', $const, '".addslashes($title)."', '".addslashes($desc)."', $sys, NOW()
75
                FROM DUAL
76
                WHERE NOT EXISTS (SELECT 1 FROM role WHERE code = '$code')
77
            ");
78
        }
79
        $this->write('Ensured all canonical roles exist.');
80
    }
81
82
    public function down(Schema $schema): void
83
    {
84
        $this->addSql("
85
            INSERT INTO role (code, constant_value, title, description, system_role, created_at)
86
            SELECT 'SUPER_ADMIN', 5, 'Super Administrator', 'Super admin users', 1, NOW()
87
            FROM DUAL
88
            WHERE NOT EXISTS (SELECT 1 FROM role WHERE code = 'SUPER_ADMIN')
89
        ");
90
        $this->addSql("DELETE FROM role WHERE code = 'ANONYMOUS'");
91
    }
92
}
93