aboutsummaryrefslogtreecommitdiff
path: root/db/migrations/1.195_tic_6655_admissionrule_compatibility.php
blob: f6136200b01de26cdb51bed5fe1add85c09edca8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
/**
 * Provides a GUI for defining admission rule compatibility
 * and stores entries in database.
 *
 * @author  Thomas Hackl <thomas.hackl@uni-passau.de>
 * @license GPL2 or any later version
 * @since   Stud.IP 3.5
 *
 * @see https://develop.studip.de/trac/ticket/6655
 */
class TIC6655AdmissionRuleCompatibility extends Migration
{
    public function description()
    {
        return 'Compatibility between admission rules is now stored in database and can be configured via GUI.';
    }

    public function up()
    {
        // Table for rule definitions.
        DBManager::get()->exec("CREATE TABLE IF NOT EXISTS `admissionrule_compat` (
                `rule_type` VARCHAR(32) NOT NULL,
                `compat_rule_type` VARCHAR(32) NOT NULL,
                `mkdate` int(11) NOT NULL DEFAULT 0,
                `chdate` int(11) NOT NULL DEFAULT 0,
                PRIMARY KEY (`rule_type`, `compat_rule_type`)
            ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC");

        // Initial DB entries, taken from former class variables ($allowed_combinations).
        $compat = [
            'ConditionalAdmission' => [
                'ConditionalAdmission',
                'CourseMemberAdmission',
                'LimitedAdmission',
                'ParticipantRestrictedAdmission',
                'PasswordAdmission',
                'PreferentialAdmission',
                'TimedAdmission'
            ],
            'CourseMemberAdmission' => [
                'ConditionalAdmission',
                'CourseMemberAdmission',
                'LimitedAdmission',
                'ParticipantRestrictedAdmission',
                'PasswordAdmission',
                'PreferentialAdmission',
                'TimedAdmission'
            ],
            'LimitedAdmission' => [
                'ConditionalAdmission',
                'CourseMemberAdmission',
                'ParticipantRestrictedAdmission',
                'PasswordAdmission',
                'PreferentialAdmission',
                'TimedAdmission'
            ],
            'ParticipantRestrictedAdmission' => [
                'ConditionalAdmission',
                'CourseMemberAdmission',
                'LimitedAdmission',
                'PreferentialAdmission',
                'TimedAdmission'
            ],
            'PasswordAdmission' => [
                'ConditionalAdmission',
                'CourseMemberAdmission',
                'PreferentialAdmission',
                'TimedAdmission',
            ],
            'PreferentialAdmission' => [
                'ConditionalAdmission',
                'CourseMemberAdmission',
                'LimitedAdmission',
                'ParticipantRestrictedAdmission',
                'PasswordAdmission',
                'TimedAdmission'
            ],
            'TimedAdmission' => [
                'ConditionalAdmission',
                'CourseMemberAdmission',
                'LimitedAdmission',
                'ParticipantRestrictedAdmission',
                'PasswordAdmission',
                'PreferentialAdmission'
            ]
        ];

        $stmt = DBManager::get()->prepare("INSERT IGNORE INTO `admissionrule_compat`
                        (`rule_type`, `compat_rule_type`, `mkdate`, `chdate`)
                 VALUES (:ruletype, :compat, UNIX_TIMESTAMP(), UNIX_TIMESTAMP())");

        foreach ($compat as $type => $compat_types) {
            foreach ($compat_types as $c) {
                $stmt->execute(['ruletype' => $type, 'compat' => $c]);
            }
        }
    }

    public function down()
    {
        // Remove rule data tables.
        DBManager::get()->exec("DROP TABLE IF EXISTS `admissionrule_compat`");
    }
}