diff --git a/mod/lesson/backup/moodle2/restore_lesson_stepslib.php b/mod/lesson/backup/moodle2/restore_lesson_stepslib.php index a06adb53a87..71868f9ecf2 100644 --- a/mod/lesson/backup/moodle2/restore_lesson_stepslib.php +++ b/mod/lesson/backup/moodle2/restore_lesson_stepslib.php @@ -221,6 +221,23 @@ class restore_lesson_activity_structure_step extends restore_activity_structure_ } $rs->close(); + // Replay the upgrade step 2014051202. + // Delete any orphaned lesson_branch record. + if ($DB->get_dbfamily() === 'mysql') { + $sql = "DELETE {lesson_branch} + FROM {lesson_branch} + LEFT JOIN {lesson_pages} + ON {lesson_branch}.pageid = {lesson_pages}.id + WHERE {lesson_pages}.id IS NULL"; + } else { + $sql = "DELETE FROM {lesson_branch} + WHERE NOT EXISTS ( + SELECT 'x' FROM {lesson_pages} + WHERE {lesson_branch}.pageid = {lesson_pages}.id)"; + } + + $DB->execute($sql); + // Re-map the dependency and activitylink information // If a depency or activitylink has no mapping in the backup data then it could either be a duplication of a // lesson, or a backup/restore of a single lesson. We have no way to determine which and whether this is the diff --git a/mod/lesson/db/upgrade.php b/mod/lesson/db/upgrade.php index 91280c92f37..9b84afba355 100644 --- a/mod/lesson/db/upgrade.php +++ b/mod/lesson/db/upgrade.php @@ -94,6 +94,27 @@ function xmldb_lesson_upgrade($oldversion) { upgrade_mod_savepoint(true, 2014051201, 'lesson'); } + if ($oldversion < 2014051202) { + // Delete any orphaned lesson_branch record. + if ($DB->get_dbfamily() === 'mysql') { + $sql = "DELETE {lesson_branch} + FROM {lesson_branch} + LEFT JOIN {lesson_pages} + ON {lesson_branch}.pageid = {lesson_pages}.id + WHERE {lesson_pages}.id IS NULL"; + } else { + $sql = "DELETE FROM {lesson_branch} + WHERE NOT EXISTS ( + SELECT 'x' FROM {lesson_pages} + WHERE {lesson_branch}.pageid = {lesson_pages}.id)"; + } + + $DB->execute($sql); + + // Lesson savepoint reached. + upgrade_mod_savepoint(true, 2014051202, 'lesson'); + } + return true; } diff --git a/mod/lesson/version.php b/mod/lesson/version.php index 7fcc6aa9e1f..4eb553c71e0 100644 --- a/mod/lesson/version.php +++ b/mod/lesson/version.php @@ -24,7 +24,7 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014051201; // The current module version (Date: YYYYMMDDXX) +$plugin->version = 2014051202; // The current module version (Date: YYYYMMDDXX) $plugin->requires = 2014050800; // Requires this Moodle version $plugin->component = 'mod_lesson'; // Full name of the plugin (used for diagnostics) $plugin->cron = 0;