Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.

Differences Between: [Versions 400 and 401] [Versions 401 and 402] [Versions 401 and 403]

   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  use mod_bigbluebuttonbn\plugin;
  28  use mod_bigbluebuttonbn\local\config;
  29  use mod_bigbluebuttonbn\task\upgrade_recordings_task;
  30  
  31  /**
  32   * Performs data migrations and updates on upgrade.
  33   *
  34   * @param int $oldversion
  35   * @return bool
  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          $table5 = new xmldb_table('bigbluebuttonbn');
  43          $field4 = new xmldb_field('description');
  44          if ($dbman->field_exists($table5, $field4)) {
  45              $dbman->drop_field($table5, $field4, true, true);
  46          }
  47          // Change welcome, allow null.
  48          $fielddefinition = ['type' => XMLDB_TYPE_TEXT, 'precision' => null, 'unsigned' => null,
  49              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => null, 'previous' => 'type'];
  50          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'welcome',
  51              $fielddefinition);
  52          // Change userid definition in bigbluebuttonbn_log.
  53          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '10', 'unsigned' => null,
  54              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => null,
  55              'previous' => 'bigbluebuttonbnid'];
  56          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn_log', 'userid',
  57              $fielddefinition);
  58          // No settings to migrate.
  59          // Update db version tag.
  60          upgrade_mod_savepoint(true, 2015080605, 'bigbluebuttonbn');
  61      }
  62      if ($oldversion < 2016011305) {
  63          // Define field type to be droped from bigbluebuttonbn.
  64          $table4 = new xmldb_table('bigbluebuttonbn');
  65          $field3 = new xmldb_field('type');
  66          if ($dbman->field_exists($table4, $field3)) {
  67              $dbman->drop_field($table4, $field3, true, true);
  68          }
  69          // Rename table bigbluebuttonbn_log to bigbluebuttonbn_logs.
  70          $table = new xmldb_table('bigbluebuttonbn_log');
  71          if ($dbman->table_exists($table)) {
  72              $dbman->rename_table($table, 'bigbluebuttonbn_logs', true, true);
  73          }
  74          // Rename field event to log in table bigbluebuttonbn_logs.
  75          $table1 = new xmldb_table('bigbluebuttonbn_logs');
  76          $field = new xmldb_field('event');
  77          if ($dbman->field_exists($table1, $field)) {
  78              $dbman->rename_field($table1, $field, 'log', true, true);
  79          }
  80          // No settings to migrate.
  81          // Update db version tag.
  82          upgrade_mod_savepoint(true, 2016011305, 'bigbluebuttonbn');
  83      }
  84      if ($oldversion < 2017101000) {
  85          // Drop field newwindow.
  86          $table3 = new xmldb_table('bigbluebuttonbn');
  87          $field2 = new xmldb_field('newwindow');
  88          if ($dbman->field_exists($table3, $field2)) {
  89              $dbman->drop_field($table3, $field2, true, true);
  90          }
  91          // Add field type.
  92          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '2', 'unsigned' => null,
  93              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'id'];
  94          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'type',
  95              $fielddefinition);
  96          // Add field recordings_html.
  97          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
  98              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null];
  99          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordings_html',
 100              $fielddefinition);
 101          // Add field recordings_deleted.
 102          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 103              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 1, 'previous' => null];
 104          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordings_deleted',
 105              $fielddefinition);
 106          // Add field recordings_imported.
 107          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 108              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null];
 109          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordings_imported',
 110              $fielddefinition);
 111          // Drop field newwindow.
 112          $table2 = new xmldb_table('bigbluebuttonbn');
 113          $field1 = new xmldb_field('tagging');
 114          if ($dbman->field_exists($table2, $field1)) {
 115              $dbman->drop_field($table2, $field1, true, true);
 116          }
 117          // Migrate settings.
 118          unset_config('bigbluebuttonbn_recordingtagging_default', '');
 119          unset_config('bigbluebuttonbn_recordingtagging_editable', '');
 120          $cfgvalue = get_config('', 'bigbluebuttonbn_importrecordings_from_deleted_activities_enabled');
 121          set_config('bigbluebuttonbn_importrecordings_from_deleted_enabled', $cfgvalue, '');
 122          unset_config('bigbluebuttonbn_importrecordings_from_deleted_activities_enabled', '');
 123          $cfgvalue = get_config('', 'bigbluebuttonbn_moderator_default');
 124          set_config('bigbluebuttonbn_participant_moderator_default', $cfgvalue, '');
 125          unset_config('bigbluebuttonbn_moderator_default', '');
 126          // Update db version tag.
 127          upgrade_mod_savepoint(true, 2017101000, 'bigbluebuttonbn');
 128      }
 129      if ($oldversion < 2017101009) {
 130          // Add field recordings_preview.
 131          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 132              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null];
 133          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordings_preview',
 134              $fielddefinition);
 135          // Update db version tag.
 136          upgrade_mod_savepoint(true, 2017101009, 'bigbluebuttonbn');
 137      }
 138      if ($oldversion < 2017101010) {
 139          // Fix for CONTRIB-7221.
 140          if ($oldversion == 2017101003) {
 141              // A bug intorduced in 2017101003 causes new instances to be created without BBB passwords.
 142              // A workaround was put in place in version 2017101004 that was relabeled to 2017101005.
 143              // However, as the code was relocated to upgrade.php in version 2017101010, a new issue came up.
 144              // There is now a timeout error when the plugin is upgraded in large Moodle sites.
 145              // The script should only be considered when migrating from this version.
 146              $sql = "SELECT * FROM {bigbluebuttonbn} ";
 147              $sql .= "WHERE moderatorpass = ? OR viewerpass = ?";
 148              $instances = $DB->get_records_sql($sql, ['', '']);
 149              foreach ($instances as $instance) {
 150                  $instance->moderatorpass = plugin::random_password(12);
 151                  $instance->viewerpass = plugin::random_password(12, $instance->moderatorpass);
 152                  // Store passwords in the database.
 153                  $DB->update_record('bigbluebuttonbn', $instance);
 154              }
 155          }
 156          // Update db version tag.
 157          upgrade_mod_savepoint(true, 2017101010, 'bigbluebuttonbn');
 158      }
 159      if ($oldversion < 2017101012) {
 160          // Update field type (Fix for CONTRIB-7302).
 161          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '2', 'unsigned' => null,
 162              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'id'];
 163          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'type',
 164              $fielddefinition);
 165          // Update field meetingid (Fix for CONTRIB-7302).
 166          $fielddefinition = ['type' => XMLDB_TYPE_CHAR, 'precision' => '255', 'unsigned' => null,
 167              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => null, 'previous' => 'introformat'];
 168          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'meetingid',
 169              $fielddefinition);
 170          // Update field recordings_imported (Fix for CONTRIB-7302).
 171          $fielddefinition = ['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', 'recordings_imported',
 174              $fielddefinition);
 175          // Add field recordings_preview.(Fix for CONTRIB-7302).
 176          $fielddefinition = ['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', 'recordings_preview',
 179              $fielddefinition);
 180          // Update db version tag.
 181          upgrade_mod_savepoint(true, 2017101012, 'bigbluebuttonbn');
 182      }
 183      if ($oldversion < 2017101015) {
 184          // Add field for client technology choice.
 185          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 186              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null];
 187          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'clienttype',
 188              $fielddefinition);
 189          // Update db version tag.
 190          upgrade_mod_savepoint(true, 2017101015, 'bigbluebuttonbn');
 191      }
 192      if ($oldversion < 2019042000) {
 193          // Add field for Mute on start feature.
 194          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 195              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null];
 196          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'muteonstart',
 197              $fielddefinition);
 198          // Add field for record all from start.
 199          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 200              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null];
 201          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordallfromstart',
 202              $fielddefinition);
 203          // Add field for record hide button.
 204          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 205              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null];
 206          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'recordhidebutton',
 207              $fielddefinition);
 208          // Update db version tag.
 209          upgrade_mod_savepoint(true, 2019042000, 'bigbluebuttonbn');
 210      }
 211      if ($oldversion < 2019101001) {
 212          // Add field for Completion with attendance.
 213          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
 214              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null];
 215          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionattendance',
 216              $fielddefinition);
 217          // Add field for Completion with engagement through chats.
 218          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
 219              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null];
 220          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementchats',
 221              $fielddefinition);
 222          // Add field for Completion with engagement through talks.
 223          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
 224              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null];
 225          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementtalks',
 226              $fielddefinition);
 227          // Add field for Completion with engagement through raisehand.
 228          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
 229              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null];
 230          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementraisehand',
 231              $fielddefinition);
 232          // Add field for Completion with engagement through pollvotes.
 233          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
 234              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null];
 235          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementpollvotes',
 236              $fielddefinition);
 237          // Add field for Completion with engagement through emojis.
 238          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '9', 'unsigned' => null,
 239              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => null];
 240          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'completionengagementemojis',
 241              $fielddefinition);
 242          // Add index to bigbluebuttonbn_logs (Fix for CONTRIB-8157).
 243          xmldb_bigbluebuttonbn_index_table($dbman, 'bigbluebuttonbn_logs', 'courseid',
 244              ['courseid']);
 245          xmldb_bigbluebuttonbn_index_table($dbman, 'bigbluebuttonbn_logs', 'log',
 246              ['log']);
 247          xmldb_bigbluebuttonbn_index_table($dbman, 'bigbluebuttonbn_logs', 'logrow',
 248              ['courseid', 'bigbluebuttonbnid', 'userid', 'log']);
 249          // Update db version tag.
 250          upgrade_mod_savepoint(true, 2019101001, 'bigbluebuttonbn');
 251      }
 252  
 253      if ($oldversion < 2019101002) {
 254  
 255          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 256              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'muteonstart'];
 257          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'disablecam',
 258              $fielddefinition);
 259  
 260          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 261              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'disablecam'];
 262          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'disablemic',
 263              $fielddefinition);
 264  
 265          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 266              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'disablemic'];
 267          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'disableprivatechat',
 268              $fielddefinition);
 269  
 270          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 271              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'disableprivatechat'];
 272          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'disablepublicchat',
 273              $fielddefinition);
 274  
 275          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 276              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'disablepublicchat'];
 277          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'disablenote',
 278              $fielddefinition);
 279  
 280          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 281              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'disablenote'];
 282          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'hideuserlist',
 283              $fielddefinition);
 284  
 285          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 286              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'hideuserlist'];
 287          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'lockedlayout',
 288              $fielddefinition);
 289  
 290          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 291              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'lockedlayout'];
 292          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'lockonjoin',
 293              $fielddefinition);
 294  
 295          $fielddefinition = ['type' => XMLDB_TYPE_INTEGER, 'precision' => '1', 'unsigned' => null,
 296              'notnull' => XMLDB_NOTNULL, 'sequence' => null, 'default' => 0, 'previous' => 'lockonjoin'];
 297          xmldb_bigbluebuttonbn_add_change_field($dbman, 'bigbluebuttonbn', 'lockonjoinconfigurable',
 298              $fielddefinition);
 299  
 300          // Bigbluebuttonbn savepoint reached.
 301          upgrade_mod_savepoint(true, 2019101002, 'bigbluebuttonbn');
 302      }
 303  
 304      if ($oldversion < 2019101004) {
 305          // Add index to bigbluebuttonbn_logs (Leftover for CONTRIB-8157).
 306          xmldb_bigbluebuttonbn_index_table($dbman, 'bigbluebuttonbn_logs', 'userlog',
 307              ['userid', 'log']);
 308          // Bigbluebuttonbn savepoint reached.
 309          upgrade_mod_savepoint(true, 2019101004, 'bigbluebuttonbn');
 310      }
 311  
 312      if ($oldversion < 2021072905) {
 313          // Add table bigbluebuttonbn_recordings (CONTRIB-7994).
 314          // Define table bigbluebuttonbn_recordings to be created.
 315          $table = new xmldb_table('bigbluebuttonbn_recordings');
 316  
 317          // Adding fields to table bigbluebuttonbn_recordings.
 318          $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
 319          $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
 320          $table->add_field('bigbluebuttonbnid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
 321          $table->add_field('groupid', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
 322          $table->add_field('recordingid', XMLDB_TYPE_CHAR, '64', null, XMLDB_NOTNULL, null, null);
 323          $table->add_field('headless', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0');
 324          $table->add_field('imported', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0');
 325          $table->add_field('state', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0');
 326          $table->add_field('recording', XMLDB_TYPE_TEXT, null, null, null, null, null);
 327          $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
 328          $table->add_field('usermodified', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
 329          $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
 330  
 331          // Adding keys to table bigbluebuttonbn_recordings.
 332          $table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
 333          $table->add_key('fk_bigbluebuttonbnid', XMLDB_KEY_FOREIGN, ['bigbluebuttonbnid'], 'bigbluebuttonbn', ['id']);
 334          $table->add_key('usermodified', XMLDB_KEY_FOREIGN, ['usermodified'], 'user', ['id']);
 335  
 336          // Adding indexes to table bigbluebuttonbn_recordings.
 337          $table->add_index('courseid', XMLDB_INDEX_NOTUNIQUE, ['courseid']);
 338          $table->add_index('recordingid', XMLDB_INDEX_NOTUNIQUE, ['recordingid']);
 339  
 340          // Conditionally launch create table for bigbluebuttonbn_recordings.
 341          if (!$dbman->table_exists($table)) {
 342              $dbman->create_table($table);
 343          }
 344          // Bigbluebuttonbn savepoint reached.
 345          upgrade_mod_savepoint(true, 2021072905, 'bigbluebuttonbn');
 346      }
 347      if ($oldversion < 2021072906) {
 348  
 349          // Rename field recording on table bigbluebuttonbn_recordings to remotedata, add new remotedatatstamp and status.
 350          $table = new xmldb_table('bigbluebuttonbn_recordings');
 351  
 352          $field = new xmldb_field('recording', XMLDB_TYPE_TEXT, null, null, null, null, null, 'state');
 353          // Launch rename field recording to remotedata.
 354          if ($dbman->field_exists($table, $field)) {
 355              $dbman->rename_field($table, $field, 'remotedata');
 356          }
 357          $field = new xmldb_field('remotedatatstamp', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
 358          // Conditionally launch add field remotedatatstamp.
 359          if (!$dbman->field_exists($table, $field)) {
 360              $dbman->add_field($table, $field);
 361          }
 362  
 363          // State is already used on remote bigbluebutton entity and has not the same semantic.
 364          $field = new xmldb_field('state', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'imported');
 365          // Launch rename field state to status.
 366          if ($dbman->field_exists($table, $field)) {
 367              $dbman->rename_field($table, $field, 'status');
 368          }
 369          // Bigbluebuttonbn savepoint reached.
 370          upgrade_mod_savepoint(true, 2021072906, 'bigbluebuttonbn');
 371      }
 372  
 373      if ($oldversion < 2021072907) {
 374          // Define field id to be dropped from bigbluebuttonbn_recordings.
 375          $table = new xmldb_table('bigbluebuttonbn_recordings');
 376          $remotedatatstamp = new xmldb_field('remotedatatstamp');
 377          $remotedata = new xmldb_field('remotedata', XMLDB_TYPE_TEXT, null, null, null, null, null, 'status');
 378          // Conditionally launch drop field remotedatatstamp.
 379          if ($dbman->field_exists($table, $remotedatatstamp)) {
 380              $dbman->drop_field($table, $remotedatatstamp);
 381          }
 382          // Launch rename field importeddata.
 383          if ($dbman->field_exists($table, $remotedata)) {
 384              $dbman->rename_field($table, $remotedata, 'importeddata');
 385          }
 386          // Bigbluebuttonbn savepoint reached.
 387          upgrade_mod_savepoint(true, 2021072907, 'bigbluebuttonbn');
 388      }
 389  
 390      if ($oldversion < 2021083100) {
 391          // Update the legacy notifications to use the legacy class which will be removed as per the deprecation policy.
 392          $DB->set_field('task_adhoc', 'classname', '\mod_bigbluebuttonbn\task\send_legacy_notification', [
 393              'component' => 'mod_bigbluebuttonbn',
 394              'classname' => '\mod_bigbluebuttonbn\task\send_notification',
 395          ]);
 396  
 397          // Bigbluebuttonbn savepoint reached.
 398          upgrade_mod_savepoint(true, 2021083100, 'bigbluebuttonbn');
 399      }
 400  
 401      if ($oldversion < 2021091408) {
 402          // Change BigBliueButton Server credentials to new defaults if test-install is being used.
 403          if (config::get('server_url') == 'http://test-install.blindsidenetworks.com/bigbluebutton/') {
 404              set_config('bigbluebuttonbn_server_url', config::DEFAULT_SERVER_URL);
 405              set_config('bigbluebuttonbn_shared_secret', config::DEFAULT_SHARED_SECRET);
 406          }
 407          // Bigbluebuttonbn savepoint reached.
 408          upgrade_mod_savepoint(true, 2021091408, 'bigbluebuttonbn');
 409      }
 410  
 411      if ($oldversion < 2022021601) {
 412          // Create adhoc task for upgrading of existing bigbluebuttonbn_logs related to recordings.
 413          upgrade_recordings_task::schedule_upgrade_per_meeting();
 414          upgrade_recordings_task::schedule_upgrade_per_meeting(true);
 415          // Bigbluebuttonbn savepoint reached.
 416          upgrade_mod_savepoint(true, 2022021601, 'bigbluebuttonbn');
 417      }
 418  
 419      // Automatically generated Moodle v4.0.0 release upgrade line.
 420      // Put any upgrade step following this.
 421  
 422      if ($oldversion < 2022050600) {
 423  
 424          set_config('bigbluebuttonbn_default_dpa_accepted', false);
 425  
 426          // If the default server configuration is used.
 427          if (config::get('server_url') === config::DEFAULT_SERVER_URL) {
 428              // Disable the BigBlueButton activity module.
 429              $DB->set_field('modules', 'visible', 0, ['name' => 'bigbluebuttonbn']);
 430  
 431              // Use an adhoc task to send a notification to inform the admin that the BigBlueButton activity module
 432              // has been disabled and they are required to confirm their acceptance of the data processing agreement
 433              // prior to re-enabling it.
 434              $notificationtask = new mod_bigbluebuttonbn\task\send_bigbluebutton_module_disabled_notification();
 435              core\task\manager::queue_adhoc_task($notificationtask);
 436          }
 437  
 438          // Bigbluebuttonbn savepoint reached.
 439          upgrade_mod_savepoint(true, 2022050600, 'bigbluebuttonbn');
 440      }
 441      if ($oldversion < 2022080400) {
 442  
 443          // Define field lockonjoin to be dropped from bigbluebuttonbn.
 444          $table = new xmldb_table('bigbluebuttonbn');
 445          $field = new xmldb_field('lockonjoin');
 446          // Conditionally launch drop field lockonjoin.
 447          if ($dbman->field_exists($table, $field)) {
 448              $dbman->drop_field($table, $field);
 449          }
 450          $field = new xmldb_field('lockonjoinconfigurable');
 451          // Conditionally launch drop field lockonjoinconfigurable.
 452          if ($dbman->field_exists($table, $field)) {
 453              $dbman->drop_field($table, $field);
 454          }
 455          // Bigbluebuttonbn savepoint reached.
 456          upgrade_mod_savepoint(true, 2022080400, 'bigbluebuttonbn');
 457      }
 458      if ($oldversion < 2022101900) {
 459          $table = new xmldb_table('bigbluebuttonbn');
 460  
 461          $field = new xmldb_field('guestallowed', XMLDB_TYPE_INTEGER, '2', null, null, null, '0', 'completionengagementemojis');
 462          // Conditionally launch add field guestallowed.
 463          if (!$dbman->field_exists($table, $field)) {
 464              $dbman->add_field($table, $field);
 465          }
 466  
 467          $field = new xmldb_field('mustapproveuser', XMLDB_TYPE_INTEGER, '2', null, null, null, '1', 'guestallowed');
 468          // Conditionally launch add field mustapproveuser.
 469          if (!$dbman->field_exists($table, $field)) {
 470              $dbman->add_field($table, $field);
 471          }
 472  
 473          $field = new xmldb_field('guestlinkuid', XMLDB_TYPE_CHAR, '1024', null, null, null, null, 'mustapproveuser');
 474          // Conditionally launch add field guestlinkuid.
 475          if (!$dbman->field_exists($table, $field)) {
 476              $dbman->add_field($table, $field);
 477          }
 478  
 479          $field = new xmldb_field('guestpassword', XMLDB_TYPE_CHAR, '255', null, null, null, null, 'guestlinkuid');
 480          // Conditionally launch add field guestpassword.
 481          if (!$dbman->field_exists($table, $field)) {
 482              $dbman->add_field($table, $field);
 483          }
 484          upgrade_mod_savepoint(true, 2022101900, 'bigbluebuttonbn');
 485      }
 486      // Automatically generated Moodle v4.1.0 release upgrade line.
 487      // Put any upgrade step following this.
 488  
 489      return true;
 490  }
 491  
 492  /**
 493   * Generic helper function for adding or changing a field in a table.
 494   *
 495   * @param database_manager $dbman
 496   * @param string $tablename
 497   * @param string $fieldname
 498   * @param array $fielddefinition
 499   * @deprecated  please do not use this anymore (historical migrations)
 500   */
 501  function xmldb_bigbluebuttonbn_add_change_field(database_manager $dbman, string $tablename, string $fieldname,
 502      array $fielddefinition) {
 503      $table = new xmldb_table($tablename);
 504      $field = new xmldb_field($fieldname);
 505      $field->set_attributes($fielddefinition['type'], $fielddefinition['precision'], $fielddefinition['unsigned'],
 506          $fielddefinition['notnull'], $fielddefinition['sequence'], $fielddefinition['default'],
 507          $fielddefinition['previous']);
 508      if (!$dbman->field_exists($table, $field)) {
 509          $dbman->add_field($table, $field, true, true);
 510          return;
 511      }
 512      // Drop key before if needed.
 513      $fieldkey = new xmldb_key($fieldname, XMLDB_KEY_FOREIGN, [$fieldname], 'user', ['id']);
 514      if ($dbman->find_key_name($table, $fieldkey)) {
 515          $dbman->drop_key($table, $fieldkey);
 516      }
 517      $dbman->change_field_type($table, $field, true, true);
 518      $dbman->change_field_precision($table, $field, true, true);
 519      $dbman->change_field_notnull($table, $field, true, true);
 520      $dbman->change_field_default($table, $field, true, true);
 521  }
 522  
 523  /**
 524   * Generic helper function for adding index to a table.
 525   *
 526   * @param database_manager $dbman
 527   * @param string $tablename
 528   * @param string $indexname
 529   * @param array $indexfields
 530   * @param string|false|null $indextype
 531   * @deprecated please do not use this anymore (historical migrations)
 532   */
 533  function xmldb_bigbluebuttonbn_index_table(database_manager $dbman, string $tablename, string $indexname, array $indexfields,
 534      $indextype = XMLDB_INDEX_NOTUNIQUE) {
 535      $table = new xmldb_table($tablename);
 536      if (!$dbman->table_exists($table)) {
 537          return;
 538      }
 539      $index = new xmldb_index($indexname, $indextype, $indexfields);
 540      if ($dbman->index_exists($table, $index)) {
 541          $dbman->drop_index($table, $index);
 542      }
 543      $dbman->add_index($table, $index, true, true);
 544  }