Proyectos de Subversion Moodle

Rev

Rev 1 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 1 Rev 1441
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');