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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
<?php
class Step00247Forum extends Migration
{
function description()
{
return 'Add forum as core-plugin';
}
function up()
{
// check if the plugin has been installed previously and is in a know db-state
$forumpp_version = DBManager::get()->query("SELECT version FROM schema_version
WHERE domain = 'ForumPP'")->fetchColumn();
if ($forumpp_version !== false && $forumpp_version != 6) { // version 6 is the DB-Version of the latest ForumPP-Plugin
throw new Exception(_('Sie verwenden das ForumPP-Plugin in einer alten Version. '
. 'Bitte aktualisieren Sie es zuerst auf die neueste Version, sonst kann '
. 'Die Stud.IP-Migration nicht ausgeführt werden'));
} else if ($forumpp_version == 6) { // prepare the tables for the rest of the migration
// rename the forum-tables
DBManager::get()->exec("RENAME TABLE
forumpp_abo_users TO forum_abo_users,
forumpp_categories TO forum_categories,
forumpp_categories_entries TO forum_categories_entries,
forumpp_entries TO forum_entries,
forumpp_favorites TO forum_favorites,
forumpp_likes TO forum_likes,
forumpp_visits TO forum_visits");
} else { // create the necessary tables for the forum from scratch
DBManager::get()->exec("
CREATE TABLE IF NOT EXISTS `forum_categories` (
`category_id` varchar(32) NOT NULL,
`seminar_id` varchar(32) NOT NULL,
`entry_name` varchar(255) NOT NULL,
`pos` INT NOT NULL DEFAULT '0',
PRIMARY KEY ( `category_id` )
) ENGINE=MyISAM
");
DBManager::get()->exec("
CREATE TABLE IF NOT EXISTS `forum_categories_entries` (
`category_id` varchar(32) NOT NULL,
`topic_id` varchar(32) NOT NULL,
`pos` INT NOT NULL DEFAULT '0',
PRIMARY KEY ( `category_id` , `topic_id` )
) ENGINE=MyISAM
");
DBManager::get()->exec("
CREATE TABLE IF NOT EXISTS `forum_entries` (
`topic_id` varchar(32) NOT NULL,
`seminar_id` varchar(32) NOT NULL,
`user_id` varchar(32) NOT NULL,
`name` varchar(255) NOT NULL,
`content` text NOT NULL,
`area` TINYINT NOT NULL DEFAULT '0',
`mkdate` int(20) NOT NULL,
`chdate` int(20) NOT NULL,
`author` varchar(255) NOT NULL,
`author_host` varchar(255) NOT NULL,
`lft` int(11) NOT NULL,
`rgt` int(11) NOT NULL,
`depth` int(11) NOT NULL,
`anonymous` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`topic_id`)
) ENGINE=MyISAM
");
DBManager::get()->exec("
CREATE TABLE IF NOT EXISTS `forum_likes` (
`topic_id` varchar(32) NOT NULL,
`user_id` varchar(32) NOT NULL,
PRIMARY KEY (`topic_id`,`user_id`)
) ENGINE=MyISAM
");
DBManager::get()->exec("
CREATE TABLE IF NOT EXISTS `forum_visits` (
user_id varchar(32) NOT NULL,
seminar_id varchar(32) NOT NULL,
visitdate int(11) NOT NULL,
last_visitdate int(11) NOT NULL,
PRIMARY KEY ( `user_id` , `seminar_id` )
) ENGINE=MyISAM
");
DBManager::get()->exec("
CREATE TABLE IF NOT EXISTS `forum_favorites` (
user_id varchar(32) NOT NULL,
topic_id varchar(32) NOT NULL,
PRIMARY KEY ( `user_id` , `topic_id` )
) ENGINE=MyISAM
");
DBManager::get()->exec("
CREATE TABLE IF NOT EXISTS `forum_abo_users` (
`topic_id` varchar(32) NOT NULL,
`user_id` varchar(32) NOT NULL,
PRIMARY KEY (`topic_id`,`user_id`)
) ENGINE=MyISAM
");
}
// add new table for the issue-connection
DBManager::get()->exec("CREATE TABLE IF NOT EXISTS `forum_entries_issues` (
`topic_id` varchar(32) NOT NULL,
`issue_id` varchar(32) NOT NULL,
PRIMARY KEY (`topic_id`,`issue_id`)
) ENGINE=MyISAM");
// add some highly needed indices
DBManager::get()->exec("ALTER TABLE `forum_entries` ADD INDEX ( `seminar_id` , `lft` )");
DBManager::get()->exec("ALTER TABLE `forum_entries` ADD INDEX ( `seminar_id` , `rgt` )");
DBManager::get()->exec("ALTER TABLE `forum_entries` ADD INDEX ( `user_id` )");
DBManager::get()->exec("ALTER TABLE `forum_categories` ADD INDEX ( `seminar_id` )");
// get highest position
$navpos = DBManager::get()->query("SELECT navigationpos FROM plugins
ORDER BY navigationpos DESC")->fetchColumn() + 1;
// insert plugin into db
$stmt = DBManager::get()->prepare("INSERT INTO plugins
(pluginclassname, pluginpath, pluginname, plugintype, enabled, navigationpos)
VALUES ('CoreForum', 'core/Forum', 'Forum', 'ForumModule,StandardPlugin,StudipModule', 'yes', ?)");
$stmt->execute([$navpos]);
// get id of newly created plugin (we purposely do not use PDO::lastInserId())
$plugin_id = DBManager::get()->query("SELECT pluginid FROM plugins
WHERE pluginpath = 'core/Forum'")->fetchColumn();
// set all default roles for the plugin (including nobody)
$stmt = DBManager::get()->prepare("INSERT INTO roles_plugins
(roleid, pluginid) VALUES (?, ?)");
foreach (range(1,7) as $role_id) {
$stmt->execute([$role_id, $plugin_id]);
}
// remove old ForumPP-plugin
$old_forum = DBManager::get()->query("SELECT * FROM plugins
WHERE pluginclassname = 'ForumPP'")->fetch(PDO::FETCH_ASSOC);
if ($old_forum) {
DBManager::get()->exec("DELETE FROM plugins
WHERE pluginclassname = 'ForumPP'");
DBManager::get()->exec("DELETE FROM plugins_activated
WHERE pluginid = " . $old_forum['pluginid']);
DBManager::get()->exec("DELETE FROM plugins_default_activations
WHERE pluginid = " . $old_forum['pluginid']);
DBManager::get()->exec("DELETE FROM roles_plugins
WHERE pluginid = " . $old_forum['pluginid']);
DBManager::get()->exec("DELETE FROM schema_version
WHERE domain = 'ForumPP'");
}
// remove user-settings for the old forum
DBManager::get()->exec("DELETE FROM user_config WHERE `field` = 'FORUM_SETTINGS'");
}
function down()
{
}
}
|