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`");
}
}
|