Issues (112)

Security Analysis    not enabled

This project does not seem to handle request data directly as such no vulnerable execution paths were found.

  Cross-Site Scripting
Cross-Site Scripting enables an attacker to inject code into the response of a web-request that is viewed by other users. It can for example be used to bypass access controls, or even to take over other users' accounts.
  File Exposure
File Exposure allows an attacker to gain access to local files that he should not be able to access. These files can for example include database credentials, or other configuration files.
  File Manipulation
File Manipulation enables an attacker to write custom data to files. This potentially leads to injection of arbitrary code on the server.
  Object Injection
Object Injection enables an attacker to inject an object into PHP code, and can lead to arbitrary code execution, file exposure, or file manipulation attacks.
  Code Injection
Code Injection enables an attacker to execute arbitrary code on the server.
  Response Splitting
Response Splitting can be used to send arbitrary responses.
  File Inclusion
File Inclusion enables an attacker to inject custom files into PHP's file loading mechanism, either explicitly passed to include, or for example via PHP's auto-loading mechanism.
  Command Injection
Command Injection enables an attacker to inject a shell command that is execute with the privileges of the web-server. This can be used to expose sensitive data, or gain access of your server.
  SQL Injection
SQL Injection enables an attacker to execute arbitrary SQL code on your database server gaining access to user data, or manipulating user data.
  XPath Injection
XPath Injection enables an attacker to modify the parts of XML document that are read. If that XML document is for example used for authentication, this can lead to further vulnerabilities similar to SQL Injection.
  LDAP Injection
LDAP Injection enables an attacker to inject LDAP statements potentially granting permission to run unauthorized queries, or modify content inside the LDAP tree.
  Header Injection
  Other Vulnerability
This category comprises other attack vectors such as manipulating the PHP runtime, loading custom extensions, freezing the runtime, or similar.
  Regex Injection
Regex Injection enables an attacker to execute arbitrary code in your PHP process.
  XML Injection
XML Injection enables an attacker to read files on your local filesystem including configuration files, or can be abused to freeze your web-server process.
  Variable Injection
Variable Injection enables an attacker to overwrite program variables with custom data, and can lead to further vulnerabilities.
Unfortunately, the security analysis is currently not available for your project. If you are a non-commercial open-source project, please contact support to gain access.

db/upgrade.php (4 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

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
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
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 < 2019101001) {
189
        // Add field for Completion with attendance.
190
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
191
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
192
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionattendance',
193
            $fielddefinition);
194
        // Add field for Completion with engagement through chats.
195
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
196
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
197
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementchats',
198
            $fielddefinition);
199
        // Add field for Completion with engagement through talks.
200
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
201
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
202
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementtalks',
203
            $fielddefinition);
204
        // Add field for Completion with engagement through raisehand.
205
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
206
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
207
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementraisehand',
208
            $fielddefinition);
209
        // Add field for Completion with engagement through pollvotes.
210
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
211
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
212
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementpollvotes',
213
            $fielddefinition);
214
        // Add field for Completion with engagement through emojis.
215
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
216
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null);
217
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementemojis',
218
            $fielddefinition);
219
        // Add index to bigbluebuttonbn_logs (Fix for CONTRIB-8157).
220
        xmldb_bigbluebuttonbn_index_table($dbman, 'bigbluebuttonbn_logs', 'courseid',
221
            ['courseid']);
222
        xmldb_bigbluebuttonbn_index_table($dbman, 'bigbluebuttonbn_logs', 'log',
223
            ['log']);
224
        xmldb_bigbluebuttonbn_index_table($dbman, 'bigbluebuttonbn_logs', 'logrow',
225
            ['courseid', 'bigbluebuttonbnid', 'userid', 'log']);
226
        // Update db version tag.
227
        upgrade_mod_savepoint(true, 2019101001, 'bigbluebuttonbn');
228
    }
229
230
    if ($oldversion < 2019101002) {
231
232
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
233
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'muteonstart');
234
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'disablecam',
235
            $fielddefinition);
236
237
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
238
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'disablecam');
239
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'disablemic',
240
            $fielddefinition);
241
242
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
243
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'disablemic');
244
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'disableprivatechat',
245
            $fielddefinition);
246
247
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
248
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'disableprivatechat');
249
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'disablepublicchat',
250
            $fielddefinition);
251
252
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
253
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'disablepublicchat');
254
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'disablenote',
255
            $fielddefinition);
256
257
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
258
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'disablenote');
259
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'hideuserlist',
260
            $fielddefinition);
261
262
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
263
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'hideuserlist');
264
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'lockedlayout',
265
            $fielddefinition);
266
267
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
268
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'lockedlayout');
269
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'lockonjoin',
270
            $fielddefinition);
271
272
        $fielddefinition = array('type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
273
            'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'lockonjoin');
274
        xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'lockonjoinconfigurable',
275
            $fielddefinition);
276
277
        // Bigbluebuttonbn savepoint reached.
278
        upgrade_mod_savepoint(true, 2019101002, 'bigbluebuttonbn');
279
    }
280
281
    if ($oldversion < 2019101004) {
282
        // Add index to bigbluebuttonbn_logs (Leftover for CONTRIB-8157).
283
        xmldb_bigbluebuttonbn_index_table($dbman, 'bigbluebuttonbn_logs', 'userlog',
284
            ['userid', 'log']);
285
        // Bigbluebuttonbn savepoint reached.
286
        upgrade_mod_savepoint(true, 2019101004, 'bigbluebuttonbn');
287
    }
288
289
    return true;
290
}
291
292
/**
293
 * Generic helper function for adding or changing a field in a table.
294
 *
295
 * @param   object    $dbman
296
 * @param   string    $tablename
297
 * @param   string    $fieldname
298
 * @param   array     $fielddefinition
299
 */
300
function xmldb_bigbluebuttonbn_add_change_field($dbman, $tablename, $fieldname, $fielddefinition) {
301
    $table = new xmldb_table($tablename);
302
    $field = new xmldb_field($fieldname);
303
    $field->set_attributes($fielddefinition['type'], $fielddefinition['precision'], $fielddefinition['unsigned'],
304
        $fielddefinition['notnull'], $fielddefinition['sequence'], $fielddefinition['default'],
305
        $fielddefinition['previous']);
306
    if ($dbman->field_exists($table, $field)) {
307
        $dbman->change_field_type($table, $field, true, true);
308
        $dbman->change_field_precision($table, $field, true, true);
309
        $dbman->change_field_notnull($table, $field, true, true);
310
        $dbman->change_field_default($table, $field, true, true);
311
        return;
312
    }
313
    $dbman->add_field($table, $field, true, true);
314
}
315
316
/**
317
 * Generic helper function for dropping a field from a table.
318
 *
319
 * @param   object    $dbman
320
 * @param   string    $tablename
321
 * @param   string    $fieldname
322
 */
323 View Code Duplication
function xmldb_bigbluebuttonbn_drop_field($dbman, $tablename, $fieldname) {
0 ignored issues
show
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...
324
    $table = new xmldb_table($tablename);
325
    $field = new xmldb_field($fieldname);
326
    if ($dbman->field_exists($table, $field)) {
327
        $dbman->drop_field($table, $field, true, true);
328
    }
329
}
330
331
/**
332
 * Generic helper function for renaming a field in a table.
333
 *
334
 * @param   object    $dbman
335
 * @param   string    $tablename
336
 * @param   string    $fieldnameold
337
 * @param   string    $fieldnamenew
338
 */
339 View Code Duplication
function xmldb_bigbluebuttonbn_rename_field($dbman, $tablename, $fieldnameold, $fieldnamenew) {
0 ignored issues
show
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...
340
    $table = new xmldb_table($tablename);
341
    $field = new xmldb_field($fieldnameold);
342
    if ($dbman->field_exists($table, $field)) {
343
        $dbman->rename_field($table, $field, $fieldnamenew, true, true);
344
    }
345
}
346
347
/**
348
 * Generic helper function for renaming a table.
349
 *
350
 * @param   object    $dbman
351
 * @param   string    $tablenameold
352
 * @param   string    $tablenamenew
353
 */
354
function xmldb_bigbluebuttonbn_rename_table($dbman, $tablenameold, $tablenamenew) {
355
    $table = new xmldb_table($tablenameold);
356
    if ($dbman->table_exists($table)) {
357
        $dbman->rename_table($table, $tablenamenew, true, true);
358
    }
359
}
360
361
/**
362
 * Generic helper function for adding index to a table.
363
 *
364
 * @param   object    $dbman
365
 * @param   string    $tablename
366
 * @param   string    $indexname
367
 * @param   array     $indexfields
368
 * @param   string    $indextype
369
 */
370
function xmldb_bigbluebuttonbn_index_table($dbman, $tablename, $indexname, $indexfields,
371
        $indextype = XMLDB_INDEX_NOTUNIQUE) {
372
    $table = new xmldb_table($tablename);
373
    if (!$dbman->table_exists($table)) {
374
        return;
375
    }
376
    $index = new xmldb_index($indexname, $indextype, $indexfields);
377
    if ($dbman->index_exists($table, $index)) {
378
        $dbman->drop_index($table, $index);
379
    }
380
    $dbman->add_index($table, $index, true, true);
381
}
382