Completed
Pull Request — master (#289)
by
unknown
02:13
created

upgrade.php ➔ xmldb_bigbluebuttonbn_drop_field()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7

Duplication

Lines 7
Ratio 100 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 3
dl 7
loc 7
rs 10
c 0
b 0
f 0
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 onwards, Blindside Networks Inc
22
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 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) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

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.

Loading history...
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) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

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.

Loading history...
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
    if ($oldversion < 2019042000) {
170
        // Add field for Mute on start feature.
171
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
172
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
173
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'muteonstart',
174
            $fielddefinition);
175
        // Add field for record all from start.
176
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
177
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
178
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordallfromstart',
179
            $fielddefinition);
180
        // Add field for record hide button.
181
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
182
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
183
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordhidebutton',
184
            $fielddefinition);
185
        // Update db version tag.
186
        upgrade_mod_savepoint(true, 2019042000, 'bigbluebuttonbn');
187
    }
188
    if ($oldversion < 2019042009) {
189
        // Add index to bigbluebuttonbn_logs (Fix for CONTRIB-8157).
190
        xmldb_bigbluebuttonbn_index_table($dbman, 'bigbluebuttonbn_logs', 'courseid',
191
            ['courseid']);
192
        xmldb_bigbluebuttonbn_index_table($dbman, 'bigbluebuttonbn_logs', 'log',
193
            ['log']);
194
        xmldb_bigbluebuttonbn_index_table($dbman, 'bigbluebuttonbn_logs', 'logrow',
195
            ['courseid', 'bigbluebuttonbnid', 'userid', 'log']);
196
        // Update db version tag.
197
        upgrade_mod_savepoint(true, 2019042009, 'bigbluebuttonbn');
198
    }
199
    if ($oldversion < 2019101001) {
200
        // Add field for Completion with attendance.
201
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
202
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
203
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionattendance',
204
            $fielddefinition);
205
        // Add field for Completion with engagement through chats.
206
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
207
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
208
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementchats',
209
            $fielddefinition);
210
        // Add field for Completion with engagement through talks.
211
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
212
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
213
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementtalks',
214
            $fielddefinition);
215
        // Add field for Completion with engagement through raisehand.
216
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
217
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
218
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementraisehand',
219
            $fielddefinition);
220
        // Add field for Completion with engagement through pollvotes.
221
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
222
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
223
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementpollvotes',
224
            $fielddefinition);
225
        // Add field for Completion with engagement through emojis.
226
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
227
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
228
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementemojis',
229
            $fielddefinition);
230
        // Update db version tag.
231
        upgrade_mod_savepoint(true, 2019101001, 'bigbluebuttonbn');
232
    }
233
    if ($oldversion < 2020072001) {
234
        // Add field for guestlinkenabled.
235
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
236
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
237
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'guestlinkenabled', $fielddefinition);
238
        // Add field for guestlinkid.
239
        $fielddefinition = array('type' => XMLDB_TYPE_CHAR, 'precision' => '255', 'unsigned' => null,
240
            'notnull' => null, 'sequence' => null, 'default' => null, 'previous' => null);
241
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'guestlinkid', $fielddefinition);
242
        // Add field for guestpass.
243
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '10', 'unsigned' => null,
244
            'notnull' => null, 'sequence' => null, 'default' => null, 'previous' => null);
245
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'guestpass', $fielddefinition);
246
        try {
247
            global $DB;
248
            $transaction = $DB->start_delegated_transaction();
249
            $instances = $DB->get_recordset_select('bigbluebuttonbn', null, null, 'id');
250
            foreach ($instances as $instance) {
251
                $DB->set_field('bigbluebuttonbn', 'guestlinkid', bigbluebuttonbn_random_password(12), ['id' => $instance->id]);
252
            }
253
            $transaction->allow_commit();
254
        } catch (Exception $e) {
255
            $transaction->rollback($e);
256
            throw($e);
257
        }
258
        upgrade_mod_savepoint(true, 2020072001, 'bigbluebuttonbn');
259
    }
260
    return true;
261
}
262
263
/**
264
 * Generic helper function for adding or changing a field in a table.
265
 *
266
 * @param   object    $dbman
267
 * @param   string    $tablename
268
 * @param   string    $fieldname
269
 * @param   array     $fielddefinition
270
 */
271
function xmldb_bigbluebuttonbn_add_change_field($dbman, $tablename, $fieldname, $fielddefinition) {
272
    $table = new xmldb_table($tablename);
273
    $field = new xmldb_field($fieldname);
274
    $field->set_attributes($fielddefinition['type'], $fielddefinition['precision'], $fielddefinition['unsigned'],
275
        $fielddefinition['notnull'], $fielddefinition['sequence'], $fielddefinition['default'],
276
        $fielddefinition['previous']);
277
    if ($dbman->field_exists($table, $field)) {
278
        $dbman->change_field_type($table, $field, true, true);
279
        $dbman->change_field_precision($table, $field, true, true);
280
        $dbman->change_field_notnull($table, $field, true, true);
281
        $dbman->change_field_default($table, $field, true, true);
282
        return;
283
    }
284
    $dbman->add_field($table, $field, true, true);
285
}
286
287
/**
288
 * Generic helper function for dropping a field from a table.
289
 *
290
 * @param   object    $dbman
291
 * @param   string    $tablename
292
 * @param   string    $fieldname
293
 */
294 View Code Duplication
function xmldb_bigbluebuttonbn_drop_field($dbman, $tablename, $fieldname) {
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

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.

Loading history...
295
    $table = new xmldb_table($tablename);
296
    $field = new xmldb_field($fieldname);
297
    if ($dbman->field_exists($table, $field)) {
298
        $dbman->drop_field($table, $field, true, true);
299
    }
300
}
301
302
/**
303
 * Generic helper function for renaming a field in a table.
304
 *
305
 * @param   object    $dbman
306
 * @param   string    $tablename
307
 * @param   string    $fieldnameold
308
 * @param   string    $fieldnamenew
309
 */
310 View Code Duplication
function xmldb_bigbluebuttonbn_rename_field($dbman, $tablename, $fieldnameold, $fieldnamenew) {
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

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.

Loading history...
311
    $table = new xmldb_table($tablename);
312
    $field = new xmldb_field($fieldnameold);
313
    if ($dbman->field_exists($table, $field)) {
314
        $dbman->rename_field($table, $field, $fieldnamenew, true, true);
315
    }
316
}
317
318
/**
319
 * Generic helper function for renaming a table.
320
 *
321
 * @param   object    $dbman
322
 * @param   string    $tablenameold
323
 * @param   string    $tablenamenew
324
 */
325
function xmldb_bigbluebuttonbn_rename_table($dbman, $tablenameold, $tablenamenew) {
326
    $table = new xmldb_table($tablenameold);
327
    if ($dbman->table_exists($table)) {
328
        $dbman->rename_table($table, $tablenamenew, true, true);
329
    }
330
}
331
332
/**
333
 * Generic helper function for adding index to a table.
334
 *
335
 * @param   object    $dbman
336
 * @param   string    $tablename
337
 * @param   string    $indexname
338
 * @param   array     $indexfields
339
 * @param   string    $indextype
340
 */
341
function xmldb_bigbluebuttonbn_index_table($dbman, $tablename, $indexname, $indexfields,
342
        $indextype = XMLDB_INDEX_NOTUNIQUE) {
343
    $table = new xmldb_table($tablename);
344
    if (!$dbman->table_exists($table)) {
345
        return;
346
    }
347
    $index = new xmldb_index($indexname, $indextype, $indexfields);
348
    if ($dbman->index_exists($table, $index)) {
349
        $dbman->drop_index($table, $index);
350
    }
351
    $dbman->add_index($table, $index, true, true);
352
}
353