mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 00:12:56 +02:00
MDL-35851 lesson: removed expensive upgrade step.
Just deal with the bad data when displaying the lesson instead. Conflicts: mod/lesson/db/upgrade.php
This commit is contained in:
parent
eebc821c83
commit
d33d712541
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user