From 8fedf20b638245ae4a26b4679d338fb1bbb1d6ae Mon Sep 17 00:00:00 2001 From: Damyon Wiese Date: Tue, 16 Jul 2013 10:00:44 +0800 Subject: [PATCH] MDL-35851 lesson: removed expensive upgrade step. Just deal with the bad data when displaying the lesson instead. Conflicts: mod/lesson/db/upgrade.php --- mod/lesson/db/upgrade.php | 55 ++------------------------------------- mod/lesson/locallib.php | 12 +++++++-- mod/lesson/version.php | 2 +- 3 files changed, 13 insertions(+), 56 deletions(-) diff --git a/mod/lesson/db/upgrade.php b/mod/lesson/db/upgrade.php index 89bb1f67ba9..f32cc8b57b7 100644 --- a/mod/lesson/db/upgrade.php +++ b/mod/lesson/db/upgrade.php @@ -72,59 +72,8 @@ function xmldb_lesson_upgrade($oldversion) { // Moodle v2.5.0 release upgrade line. // Put any upgrade step following this. - if ($oldversion < 2013050101) { - // Fixed page order for missing page in lesson - upgrade_set_timeout(600); // increase excution time for large sites - $lessons = $DB->get_records('lesson'); - - foreach ($lessons as $lesson) { - $pages = $DB->get_records('lesson_pages', array('lessonid' => $lesson->id)); - - $iscorrupt = false; - - // Validate lesson prev and next pages. - foreach ($pages as $id => $page) { - // Setting up prev and next id to 0 is only valid if lesson only has 1 page. - // Other than that, it indicates lesson page links are corrupted. - if ($page->prevpageid == 0 && $page->nextpageid == 0 && count($pages) != 1) { - $iscorrupt = true; - break; - // Make sure page links to an existing page within the lesson. - } else if (($page->prevpageid != 0 && !isset($pages[$page->prevpageid])) || - ($page->nextpageid != 0 && !isset($pages[$page->nextpageid]))) { - $iscorrupt = true; - break; - // Check the pages linked correctly - } else if((($page->prevpageid == 0 || $page->nextpageid != 0 ) && $pages[$page->nextpageid]->prevpageid != $page->id) || - (($page->prevpageid != 0 || $page->nextpageid == 0) && $pages[$page->prevpageid]->nextpageid != $page->id)) { - $iscorrupt = true; - break; - } - } - - // Process the update for the corrupted lesson pages. - $count = 0; - $lastpageid = 0; - if ($iscorrupt) { - foreach($pages as $page) { - $count++; - if ($lastpageid == 0) { // First page - $DB->set_field('lesson_pages', 'prevpageid', 0, array('id' => $page->id)); - $DB->set_field('lesson_pages', 'nextpageid', 0, array('id' => $page->id)); - } elseif (count($pages) == $count) { - $DB->set_field('lesson_pages', 'prevpageid', $lastpageid, array('id' => $page->id)); - $DB->set_field('lesson_pages', 'nextpageid', 0, array('id' => $page->id)); - $DB->set_field('lesson_pages', 'nextpageid', $page->id, array('id' => $lastpageid)); - } else { - $DB->set_field('lesson_pages', 'prevpageid', $lastpageid, array('id' => $page->id)); - $DB->set_field('lesson_pages', 'nextpageid', $page->id, array('id' => $lastpageid)); - } - $lastpageid = $page->id; - } - } - } - upgrade_mod_savepoint(true, 2013050101, 'lesson'); - } return true; } + + diff --git a/mod/lesson/locallib.php b/mod/lesson/locallib.php index 314e4c78a0e..f8a4152c4d6 100644 --- a/mod/lesson/locallib.php +++ b/mod/lesson/locallib.php @@ -2700,10 +2700,12 @@ class lesson_page_type_manager { $orderedpages = array(); $lastpageid = 0; - - while (true) { + $morepages = true; + while ($morepages) { + $morepages = false; foreach ($pages as $page) { if ((int)$page->prevpageid === (int)$lastpageid) { + $morepages = true; $orderedpages[$page->id] = $page; unset($pages[$page->id]); $lastpageid = $page->id; @@ -2716,6 +2718,12 @@ class lesson_page_type_manager { } } + // Add remaining pages. + foreach ($pages as $page) { + $orderedpages[$page->id] = $page; + $lastpageid = $page->id; + } + return $orderedpages; } diff --git a/mod/lesson/version.php b/mod/lesson/version.php index 3b5a391945a..44c88d43231 100644 --- a/mod/lesson/version.php +++ b/mod/lesson/version.php @@ -25,7 +25,7 @@ defined('MOODLE_INTERNAL') || die(); -$module->version = 2013050101; // The current module version (Date: YYYYMMDDXX) +$module->version = 2013050100; // The current module version (Date: YYYYMMDDXX) $module->requires = 2013050100; // Requires this Moodle version $module->component = 'mod_lesson'; // Full name of the plugin (used for diagnostics) $module->cron = 0;