| Línea 21... | 
            Línea 21... | 
          
          
            | 21 | 
             * @copyright  2011 Petr Skoda {@link http://skodak.org}
  | 
            21 | 
             * @copyright  2011 Petr Skoda {@link http://skodak.org}
  | 
          
          
            | 22 | 
             * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  | 
            22 | 
             * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  | 
          
          
            | 23 | 
             */
  | 
            23 | 
             */
  | 
          
          
            | Línea 24... | 
            Línea 24... | 
          
          
            | 24 | 
             
  | 
            24 | 
             
  | 
          
          
            | 25 | 
            function xmldb_enrol_database_upgrade($oldversion) {
  | 
            - | 
               | 
          
          
            | 26 | 
                // Automatically generated Moodle v4.1.0 release upgrade line.
  | 
            25 | 
            function xmldb_enrol_database_upgrade($oldversion) {
  | 
          
          
            | 27 | 
                // Put any upgrade step following this.
  | 
            - | 
               | 
          
          
            | 28 | 
             
  | 
            26 | 
                global $DB;
  | 
          
          
            | 29 | 
                // Automatically generated Moodle v4.2.0 release upgrade line.
  | 
            27 | 
                // Automatically generated Moodle v4.2.0 release upgrade line.
  | 
          
          
            | Línea 30... | 
            Línea 28... | 
          
          
            | 30 | 
                // Put any upgrade step following this.
  | 
            28 | 
                // Put any upgrade step following this.
  | 
          
          
            | 31 | 
             
  | 
            29 | 
             
  | 
          
          
            | Línea 32... | 
            Línea 30... | 
          
          
            | 32 | 
                // Automatically generated Moodle v4.3.0 release upgrade line.
  | 
            30 | 
                // Automatically generated Moodle v4.3.0 release upgrade line.
  | 
          
          
            | 33 | 
                // Put any upgrade step following this.
  | 
            31 | 
                // Put any upgrade step following this.
  | 
          
          
            | Línea -... | 
            Línea 32... | 
          
          
            | - | 
               | 
            32 | 
             
  | 
          
          
            | - | 
               | 
            33 | 
                // Automatically generated Moodle v4.4.0 release upgrade line.
  | 
          
          
            | - | 
               | 
            34 | 
                // Put any upgrade step following this.
  | 
          
          
            | - | 
               | 
            35 | 
             
  | 
          
          
            | - | 
               | 
            36 | 
                // Automatically generated Moodle v4.5.0 release upgrade line.
  | 
          
          
            | - | 
               | 
            37 | 
                // Put any upgrade step following this.
  | 
          
          
            | - | 
               | 
            38 | 
             
  | 
          
          
            | - | 
               | 
            39 | 
                // Automatically generated Moodle v5.0.0 release upgrade line.
  | 
          
          
            | - | 
               | 
            40 | 
                // Put any upgrade step following this.
  | 
          
          
            | - | 
               | 
            41 | 
             
  | 
          
          
            | - | 
               | 
            42 | 
                if ($oldversion < 2025041402) {
  | 
          
          
            | - | 
               | 
            43 | 
                    // Remove duplicated enrolment records, keeping only the earliest records.
  | 
          
          
            | - | 
               | 
            44 | 
                    $transaction = $DB->start_delegated_transaction();
  | 
          
          
            | - | 
               | 
            45 | 
                    $courses = $DB->get_records_sql(
  | 
          
          
            | - | 
               | 
            46 | 
                        "
  | 
          
          
            | - | 
               | 
            47 | 
                         SELECT courseid
  | 
          
          
            | - | 
               | 
            48 | 
                           FROM {enrol}
  | 
          
          
            | - | 
               | 
            49 | 
                          WHERE enrol = 'database'
  | 
          
          
            | - | 
               | 
            50 | 
                       GROUP BY courseid
  | 
          
          
            | - | 
               | 
            51 | 
                         HAVING COUNT(*) > 1"
  | 
          
          
            | - | 
               | 
            52 | 
                    );
  | 
          
          
            | - | 
               | 
            53 | 
                    foreach ($courses as $course) {
  | 
          
          
            | - | 
               | 
            54 | 
                        $instances = $DB->get_records('enrol', ['enrol' => 'database', 'courseid' => $course->courseid], 'id ASC');
  | 
          
          
            | - | 
               | 
            55 | 
                        $idtokeep = array_key_first($instances);
  | 
          
          
            | - | 
               | 
            56 | 
                        $idstodelete = array_slice(array_keys($instances), 1);
  | 
          
          
            | - | 
               | 
            57 | 
                        [$insql, $inparams] = $DB->get_in_or_equal($idstodelete, SQL_PARAMS_NAMED);
  | 
          
          
            | - | 
               | 
            58 | 
             
  | 
          
          
            | - | 
               | 
            59 | 
                        // Migrate enrolments where possible.
  | 
          
          
            | - | 
               | 
            60 | 
                        // First, get the user enrolments that can be migrated.
  | 
          
          
            | - | 
               | 
            61 | 
                        $migrateusers = $DB->get_records_sql(
  | 
          
          
            | - | 
               | 
            62 | 
                            "SELECT ue.id
  | 
          
          
            | - | 
               | 
            63 | 
                               FROM {user_enrolments} ue
  | 
          
          
            | - | 
               | 
            64 | 
                              WHERE ue.enrolid $insql
  | 
          
          
            | - | 
               | 
            65 | 
                                    AND NOT EXISTS (
  | 
          
          
            | - | 
               | 
            66 | 
                                        SELECT 1
  | 
          
          
            | - | 
               | 
            67 | 
                                          FROM {user_enrolments} ue2
  | 
          
          
            | - | 
               | 
            68 | 
                                         WHERE ue2.userid  = ue.userid
  | 
          
          
            | - | 
               | 
            69 | 
                                               AND ue2.enrolid = :idtokeep)",
  | 
          
          
            | - | 
               | 
            70 | 
                                array_merge($inparams, ['idtokeep' => $idtokeep]),
  | 
          
          
            | - | 
               | 
            71 | 
                        );
  | 
          
          
            | - | 
               | 
            72 | 
             
  | 
          
          
            | - | 
               | 
            73 | 
                        // Then update them if any exist.
  | 
          
          
            | - | 
               | 
            74 | 
                        if (!empty($migrateusers)) {
  | 
          
          
            | - | 
               | 
            75 | 
                            $migrateids = array_keys($migrateusers);
  | 
          
          
            | - | 
               | 
            76 | 
                            [$migratein, $migrateparams] = $DB->get_in_or_equal($migrateids, SQL_PARAMS_NAMED);
  | 
          
          
            | - | 
               | 
            77 | 
                            $DB->execute(
  | 
          
          
            | - | 
               | 
            78 | 
                                "UPDATE {user_enrolments} SET enrolid = :idtokeep WHERE id $migratein",
  | 
          
          
            | - | 
               | 
            79 | 
                                array_merge($migrateparams, ['idtokeep' => $idtokeep]),
  | 
          
          
            | - | 
               | 
            80 | 
                            );
  | 
          
          
            | - | 
               | 
            81 | 
                        }
  | 
          
          
            | - | 
               | 
            82 | 
             
  | 
          
          
            | - | 
               | 
            83 | 
                        $DB->delete_records_select('user_enrolments', "enrolid $insql", $inparams);
  | 
          
          
            | - | 
               | 
            84 | 
             
  | 
          
          
            | - | 
               | 
            85 | 
                        // Migrate role assignments.
  | 
          
          
            | - | 
               | 
            86 | 
                        $DB->execute(
  | 
          
          
            | - | 
               | 
            87 | 
                            "
  | 
          
          
            | - | 
               | 
            88 | 
                            UPDATE {role_assignments}
  | 
          
          
            | - | 
               | 
            89 | 
                               SET itemid = :idtokeep
  | 
          
          
            | - | 
               | 
            90 | 
                             WHERE component = :component
  | 
          
          
            | - | 
               | 
            91 | 
                               AND itemid $insql",
  | 
          
          
            | - | 
               | 
            92 | 
                            array_merge($inparams, ['component' => 'enrol_database', 'idtokeep' => $idtokeep])
  | 
          
          
            | - | 
               | 
            93 | 
                        );
  | 
          
          
            | - | 
               | 
            94 | 
                        $DB->delete_records_select('role_assignments', "itemid $insql", $inparams);
  | 
          
          
            | - | 
               | 
            95 | 
             
  | 
          
          
            | - | 
               | 
            96 | 
                        $DB->delete_records_list('enrol', 'id', $idstodelete);
  | 
          
          
            | - | 
               | 
            97 | 
                    }
  | 
          
          
            | 34 | 
             
  | 
            98 | 
                    $transaction->allow_commit();
  | 
          
          
            | 35 | 
                // Automatically generated Moodle v4.4.0 release upgrade line.
  | 
            99 | 
                    upgrade_plugin_savepoint(true, 2025041402, 'enrol', 'database');
  |