Skip to content

Commit

Permalink
MDL-26312 Workshop: data integrity check to detect eventual course_mo…
Browse files Browse the repository at this point in the history
…dules corruption

Because of a bug in Workshop upgrade code, multiple workshop course_modules can
potentially point to a single workshop instance. The chance is pretty low as in most cases,
the upgrade failed. But under certain circumstances, workshop could be upgraded with
this data integrity issue. We want to detect it now and let the admin know.
  • Loading branch information
mudrd8mz committed Feb 14, 2011
1 parent d0fb170 commit f593111
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 2 deletions.
42 changes: 42 additions & 0 deletions mod/workshop/db/upgrade.php
Expand Up @@ -264,5 +264,47 @@ function xmldb_workshop_upgrade($oldversion) {
upgrade_mod_savepoint(true, 2010111200, 'workshop'); upgrade_mod_savepoint(true, 2010111200, 'workshop');
} }


/**
* Check the course_module integrity - see MDL-26312 for details
*
* Because of a bug in Workshop upgrade code, multiple workshop course_modules can
* potentially point to a single workshop instance. The chance is pretty low as in most cases,
* the upgrade failed. But under certain circumstances, workshop could be upgraded with
* this data integrity issue. We want to detect it now and let the admin know.
*/
if ($oldversion < 2011021100) {
$sql = "SELECT cm.id, cm.course, cm.instance
FROM {course_modules} cm
WHERE cm.module IN (SELECT id
FROM {modules}
WHERE name = ?)";
$rs = $DB->get_recordset_sql($sql, array('workshop'));
$map = array(); // returned stdClasses by instance id
foreach ($rs as $cm) {
$map[$cm->instance][$cm->id] = $cm;
}
$rs->close();

$problems = array();
foreach ($map as $instanceid => $cms) {
if (count($cms) > 1) {
$problems[] = 'workshop instance ' . $instanceid . ' referenced by course_modules ' . implode(', ', array_keys($cms));
}
}
if ($problems) {
echo $OUTPUT->notification('¡Ay, caramba! Data integrity corruption has been detected in your workshop ' . PHP_EOL .
'module database tables. This might be caused by a bug in workshop upgrade code. ' . PHP_EOL .
'Please report this issue immediately in workshop module support forum at ' . PHP_EOL .
'http://moodle.org so that we can help to fix this problem. Please copy and keep ' . PHP_EOL .
'following information for future reference:');
foreach ($problems as $problem) {
echo $OUTPUT->notification($problem);
upgrade_log(UPGRADE_LOG_NOTICE, 'mod_workshop', 'course_modules integrity problem', $problem);
}
}

upgrade_mod_savepoint(true, 2011021100, 'workshop');
}

return true; return true;
} }
4 changes: 2 additions & 2 deletions mod/workshop/version.php
Expand Up @@ -29,6 +29,6 @@


defined('MOODLE_INTERNAL') || die(); defined('MOODLE_INTERNAL') || die();


$module->version = 2010111200; $module->version = 2011021100;
$module->requires = 2010111002; // Requires this Moodle version $module->requires = 2011020900; // Requires this Moodle version
//$module->cron = 60; //$module->cron = 60;

0 comments on commit f593111

Please sign in to comment.