diff --git a/mod/lesson/backup/moodle2/restore_lesson_stepslib.php b/mod/lesson/backup/moodle2/restore_lesson_stepslib.php index 34e8371370c..dd5eecafcd3 100644 --- a/mod/lesson/backup/moodle2/restore_lesson_stepslib.php +++ b/mod/lesson/backup/moodle2/restore_lesson_stepslib.php @@ -223,6 +223,23 @@ class restore_lesson_activity_structure_step extends restore_activity_structure_ } $rs->close(); + // Replay the upgrade step 2014111003. + // 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 7bf010361c1..9dbf7463524 100644 --- a/mod/lesson/db/upgrade.php +++ b/mod/lesson/db/upgrade.php @@ -115,5 +115,26 @@ function xmldb_lesson_upgrade($oldversion) { upgrade_mod_savepoint(true, 2014111001, 'lesson'); } + if ($oldversion < 2014111003) { + // 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, 2014111003, 'lesson'); + } + return true; } diff --git a/mod/lesson/version.php b/mod/lesson/version.php index 1d09326370a..1e085696e16 100644 --- a/mod/lesson/version.php +++ b/mod/lesson/version.php @@ -24,7 +24,7 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014111002; // The current module version (Date: YYYYMMDDXX) +$plugin->version = 2014111003; // The current module version (Date: YYYYMMDDXX) $plugin->requires = 2014110400; // Requires this Moodle version $plugin->component = 'mod_lesson'; // Full name of the plugin (used for diagnostics) $plugin->cron = 0;