1
|
|
|
<?php |
2
|
|
|
// This file is part of Moodle - http://moodle.org/ |
3
|
|
|
// |
4
|
|
|
// Moodle is free software: you can redistribute it and/or modify |
5
|
|
|
// it under the terms of the GNU General Public License as published by |
6
|
|
|
// the Free Software Foundation, either version 3 of the License, or |
7
|
|
|
// (at your option) any later version. |
8
|
|
|
// |
9
|
|
|
// Moodle is distributed in the hope that it will be useful, |
10
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
11
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12
|
|
|
// GNU General Public License for more details. |
13
|
|
|
// |
14
|
|
|
// You should have received a copy of the GNU General Public License |
15
|
|
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>. |
16
|
|
|
|
17
|
|
|
/** |
18
|
|
|
* Upgrade logic. |
19
|
|
|
* |
20
|
|
|
* @package mod_bigbluebuttonbn |
21
|
|
|
* @copyright 2010-2017 Blindside Networks Inc |
22
|
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v2 or later |
23
|
|
|
* @author Jesus Federico (jesus [at] blindsidenetworks [dt] com) |
24
|
|
|
* @author Fred Dixon (ffdixon [at] blindsidenetworks [dt] com) |
25
|
|
|
*/ |
26
|
|
|
|
27
|
|
|
defined('MOODLE_INTERNAL') || die(); |
28
|
|
|
|
29
|
|
|
require_once(dirname(dirname(__FILE__)).'/locallib.php'); |
30
|
|
|
|
31
|
|
|
/** |
32
|
|
|
* Performs data migrations and updates on upgrade. |
33
|
|
|
* |
34
|
|
|
* @param integer $oldversion |
35
|
|
|
* @return boolean |
36
|
|
|
*/ |
37
|
|
|
function xmldb_bigbluebuttonbn_upgrade($oldversion = 0) { |
38
|
|
|
global $DB; |
39
|
|
|
$dbman = $DB->get_manager(); |
40
|
|
|
if ($oldversion < 2015080605) { |
41
|
|
|
// Drop field description. |
42
|
|
|
xmldb_bigbluebuttonbn_drop_field($dbman, 'bigbluebuttonbn', 'description'); |
43
|
|
|
// Change welcome, allow null. |
44
|
|
|
$fielddefinition = array('type' => XMLDB_TYPE_TEXT, 'precision' => null, 'unsigned' => null, |
45
|
|
|
'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => null, 'previous' => 'type'); |
46
|
|
|
xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'welcome', |
47
|
|
|
$fielddefinition); |
48
|
|
|
// Change userid definition in bigbluebuttonbn_log. |
49
|
|
|
$fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '10', 'unsigned' => null, |
50
|
|
|
'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => null, |
51
|
|
|
'previous' => 'bigbluebuttonbnid'); |
52
|
|
|
xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn_log', 'userid', |
53
|
|
|
$fielddefinition); |
54
|
|
|
// No settings to migrate. |
55
|
|
|
// Update db version tag. |
56
|
|
|
upgrade_mod_savepoint(true, 2015080605, 'bigbluebuttonbn'); |
57
|
|
|
} |
58
|
|
|
if ($oldversion < 2016011305) { |
59
|
|
|
// Define field type to be droped from bigbluebuttonbn. |
60
|
|
|
xmldb_bigbluebuttonbn_drop_field($dbman, 'bigbluebuttonbn', 'type'); |
61
|
|
|
// Rename table bigbluebuttonbn_log to bigbluebuttonbn_logs. |
62
|
|
|
xmldb_bigbluebuttonbn_rename_table($dbman, 'bigbluebuttonbn_log', 'bigbluebuttonbn_logs'); |
63
|
|
|
// Rename field event to log in table bigbluebuttonbn_logs. |
64
|
|
|
xmldb_bigbluebuttonbn_rename_field($dbman, 'bigbluebuttonbn_logs', 'event', 'log'); |
65
|
|
|
// No settings to migrate. |
66
|
|
|
// Update db version tag. |
67
|
|
|
upgrade_mod_savepoint(true, 2016011305, 'bigbluebuttonbn'); |
68
|
|
|
} |
69
|
|
|
if ($oldversion < 2017101000) { |
70
|
|
|
// Drop field newwindow. |
71
|
|
|
xmldb_bigbluebuttonbn_drop_field($dbman, 'bigbluebuttonbn', 'newwindow'); |
72
|
|
|
// Add field type. |
73
|
|
|
$fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '2', 'unsigned' => null, |
74
|
|
|
'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'id'); |
75
|
|
|
xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'type', |
76
|
|
|
$fielddefinition); |
77
|
|
|
// Add field recordings_html. |
78
|
|
|
$fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null, |
79
|
|
|
'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null); |
80
|
|
|
xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordings_html', |
81
|
|
|
$fielddefinition); |
82
|
|
|
// Add field recordings_deleted. |
83
|
|
|
$fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null, |
84
|
|
|
'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 1, 'previous' => null); |
85
|
|
|
xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordings_deleted', |
86
|
|
|
$fielddefinition); |
87
|
|
|
// Add field recordings_imported. |
88
|
|
|
$fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null, |
89
|
|
|
'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null); |
90
|
|
|
xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordings_imported', |
91
|
|
|
$fielddefinition); |
92
|
|
|
// Drop field newwindow. |
93
|
|
|
xmldb_bigbluebuttonbn_drop_field($dbman, 'bigbluebuttonbn', 'tagging'); |
94
|
|
|
// Migrate settings. |
95
|
|
|
unset_config('bigbluebuttonbn_recordingtagging_default', ''); |
96
|
|
|
unset_config('bigbluebuttonbn_recordingtagging_editable', ''); |
97
|
|
|
$cfgvalue = get_config('', 'bigbluebuttonbn_importrecordings_from_deleted_activities_enabled'); |
98
|
|
|
set_config('bigbluebuttonbn_importrecordings_from_deleted_enabled', $cfgvalue, ''); |
99
|
|
|
unset_config('bigbluebuttonbn_importrecordings_from_deleted_activities_enabled', ''); |
100
|
|
|
$cfgvalue = get_config('', 'bigbluebuttonbn_moderator_default'); |
101
|
|
|
set_config('bigbluebuttonbn_participant_moderator_default', $cfgvalue, ''); |
102
|
|
|
unset_config('bigbluebuttonbn_moderator_default', ''); |
103
|
|
|
// Update db version tag. |
104
|
|
|
upgrade_mod_savepoint(true, 2017101000, 'bigbluebuttonbn'); |
105
|
|
|
} |
106
|
|
View Code Duplication |
if ($oldversion < 2017101009) { |
|
|
|
|
107
|
|
|
// Add field recordings_preview. |
108
|
|
|
$fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null, |
109
|
|
|
'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null); |
110
|
|
|
xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordings_preview', |
111
|
|
|
$fielddefinition); |
112
|
|
|
// Update db version tag. |
113
|
|
|
upgrade_mod_savepoint(true, 2017101009, 'bigbluebuttonbn'); |
114
|
|
|
} |
115
|
|
|
if ($oldversion < 2017101010) { |
116
|
|
|
// Fix for CONTRIB-7221. |
117
|
|
|
if ($oldversion == 2017101003) { |
118
|
|
|
// A bug intorduced in 2017101003 causes new instances to be created without BBB passwords. |
119
|
|
|
// A workaround was put in place in version 2017101004 that was relabeled to 2017101005. |
120
|
|
|
// However, as the code was relocated to upgrade.php in version 2017101010, a new issue came up. |
121
|
|
|
// There is now a timeout error when the plugin is upgraded in large Moodle sites. |
122
|
|
|
// The script should only be considered when migrating from this version. |
123
|
|
|
$sql = "SELECT * FROM {bigbluebuttonbn} "; |
124
|
|
|
$sql .= "WHERE moderatorpass = ? OR viewerpass = ?"; |
125
|
|
|
$instances = $DB->get_records_sql($sql, array('', '')); |
126
|
|
|
foreach ($instances as $instance) { |
127
|
|
|
$instance->moderatorpass = bigbluebuttonbn_random_password(12); |
128
|
|
|
$instance->viewerpass = bigbluebuttonbn_random_password(12, $instance->moderatorpass); |
129
|
|
|
// Store passwords in the database. |
130
|
|
|
$DB->update_record('bigbluebuttonbn', $instance); |
131
|
|
|
} |
132
|
|
|
} |
133
|
|
|
// Update db version tag. |
134
|
|
|
upgrade_mod_savepoint(true, 2017101010, 'bigbluebuttonbn'); |
135
|
|
|
} |
136
|
|
|
if ($oldversion < 2017101012) { |
137
|
|
|
// Update field type (Fix for CONTRIB-7302). |
138
|
|
|
$fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '2', 'unsigned' => null, |
139
|
|
|
'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'id'); |
140
|
|
|
xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'type', |
141
|
|
|
$fielddefinition); |
142
|
|
|
// Update field meetingid (Fix for CONTRIB-7302). |
143
|
|
|
$fielddefinition = array('type' => XMLDB_TYPE_CHAR, 'precision' => '255', 'unsigned' => null, |
144
|
|
|
'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => null, 'previous' => 'introformat'); |
145
|
|
|
xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'meetingid', |
146
|
|
|
$fielddefinition); |
147
|
|
|
// Update field recordings_imported (Fix for CONTRIB-7302). |
148
|
|
|
$fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null, |
149
|
|
|
'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null); |
150
|
|
|
xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordings_imported', |
151
|
|
|
$fielddefinition); |
152
|
|
|
// Add field recordings_preview.(Fix for CONTRIB-7302). |
153
|
|
|
$fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null, |
154
|
|
|
'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null); |
155
|
|
|
xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordings_preview', |
156
|
|
|
$fielddefinition); |
157
|
|
|
// Update db version tag. |
158
|
|
|
upgrade_mod_savepoint(true, 2017101012, 'bigbluebuttonbn'); |
159
|
|
|
} |
160
|
|
View Code Duplication |
if ($oldversion < 2017101015) { |
|
|
|
|
161
|
|
|
// Add field for client technology choice. |
162
|
|
|
$fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null, |
163
|
|
|
'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null); |
164
|
|
|
xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'clienttype', |
165
|
|
|
$fielddefinition); |
166
|
|
|
// Update db version tag. |
167
|
|
|
upgrade_mod_savepoint(true, 2017101015, 'bigbluebuttonbn'); |
168
|
|
|
} |
169
|
|
|
return true; |
170
|
|
|
} |
171
|
|
|
|
172
|
|
|
/** |
173
|
|
|
* Generic helper function for adding or changing a field in a table. |
174
|
|
|
* |
175
|
|
|
* @param object $dbman |
176
|
|
|
* @param string $tablename |
177
|
|
|
* @param string $fieldname |
178
|
|
|
* @param array $fielddefinition |
179
|
|
|
*/ |
180
|
|
|
function xmldb_bigbluebuttonbn_add_change_field($dbman, $tablename, $fieldname, $fielddefinition) { |
181
|
|
|
$table = new xmldb_table($tablename); |
182
|
|
|
$field = new xmldb_field($fieldname); |
183
|
|
|
$field->set_attributes($fielddefinition['type'], $fielddefinition['precision'], $fielddefinition['unsigned'], |
184
|
|
|
$fielddefinition['notnull'], $fielddefinition['sequence'], $fielddefinition['default'], |
185
|
|
|
$fielddefinition['previous']); |
186
|
|
|
if ($dbman->field_exists($table, $field)) { |
187
|
|
|
$dbman->change_field_type($table, $field, true, true); |
188
|
|
|
$dbman->change_field_precision($table, $field, true, true); |
189
|
|
|
$dbman->change_field_notnull($table, $field, true, true); |
190
|
|
|
$dbman->change_field_default($table, $field, true, true); |
191
|
|
|
return; |
192
|
|
|
} |
193
|
|
|
$dbman->add_field($table, $field, true, true); |
194
|
|
|
} |
195
|
|
|
|
196
|
|
|
/** |
197
|
|
|
* Generic helper function for dropping a field from a table. |
198
|
|
|
* |
199
|
|
|
* @param object $dbman |
200
|
|
|
* @param string $tablename |
201
|
|
|
* @param string $fieldname |
202
|
|
|
*/ |
203
|
|
View Code Duplication |
function xmldb_bigbluebuttonbn_drop_field($dbman, $tablename, $fieldname) { |
|
|
|
|
204
|
|
|
$table = new xmldb_table($tablename); |
205
|
|
|
$field = new xmldb_field($fieldname); |
206
|
|
|
if ($dbman->field_exists($table, $field)) { |
207
|
|
|
$dbman->drop_field($table, $field, true, true); |
208
|
|
|
} |
209
|
|
|
} |
210
|
|
|
|
211
|
|
|
/** |
212
|
|
|
* Generic helper function for renaming a field in a table. |
213
|
|
|
* |
214
|
|
|
* @param object $dbman |
215
|
|
|
* @param string $tablename |
216
|
|
|
* @param string $fieldnameold |
217
|
|
|
* @param string $fieldnamenew |
218
|
|
|
*/ |
219
|
|
View Code Duplication |
function xmldb_bigbluebuttonbn_rename_field($dbman, $tablename, $fieldnameold, $fieldnamenew) { |
|
|
|
|
220
|
|
|
$table = new xmldb_table($tablename); |
221
|
|
|
$field = new xmldb_field($fieldnameold); |
222
|
|
|
if ($dbman->field_exists($table, $field)) { |
223
|
|
|
$dbman->rename_field($table, $field, $fieldnamenew, true, true); |
224
|
|
|
} |
225
|
|
|
} |
226
|
|
|
|
227
|
|
|
/** |
228
|
|
|
* Generic helper function for renaming a table. |
229
|
|
|
* |
230
|
|
|
* @param object $dbman |
231
|
|
|
* @param string $tablenameold |
232
|
|
|
* @param string $tablenamenew |
233
|
|
|
*/ |
234
|
|
|
function xmldb_bigbluebuttonbn_rename_table($dbman, $tablenameold, $tablenamenew) { |
235
|
|
|
$table = new xmldb_table($tablenameold); |
236
|
|
|
if ($dbman->table_exists($table)) { |
237
|
|
|
$dbman->rename_table($table, $tablenamenew, true, true); |
238
|
|
|
} |
239
|
|
|
} |
240
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.