mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 16:32:18 +02:00
Merge branch 'MDL-37939-m' of https://github.com/andrewnicols/moodle
Conflicts: lib/db/upgrade.php version.php
This commit is contained in:
commit
82a6332837
@ -297,22 +297,71 @@ class courselib_testcase extends advanced_testcase {
|
||||
}
|
||||
|
||||
public function test_move_module_in_course() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
// Setup fixture
|
||||
$course = $this->getDataGenerator()->create_course(array('numsections'=>5));
|
||||
$course = $this->getDataGenerator()->create_course(array('numsections'=>5), array('createsections' => true));
|
||||
$forum = $this->getDataGenerator()->create_module('forum', array('course'=>$course->id));
|
||||
|
||||
$cms = get_fast_modinfo($course)->get_cms();
|
||||
$cm = reset($cms);
|
||||
|
||||
course_create_sections_if_missing($course, 3);
|
||||
$section3 = get_fast_modinfo($course)->get_section_info(3);
|
||||
$newsection = get_fast_modinfo($course)->get_section_info(3);
|
||||
$oldsectionid = $cm->section;
|
||||
|
||||
moveto_module($cm, $section3);
|
||||
// Perform the move
|
||||
moveto_module($cm, $newsection);
|
||||
|
||||
// reset of get_fast_modinfo is usually called the code calling moveto_module so call it here
|
||||
get_fast_modinfo(0, 0, true);
|
||||
$cms = get_fast_modinfo($course)->get_cms();
|
||||
$cm = reset($cms);
|
||||
|
||||
// Check that the cached modinfo contains the correct section info
|
||||
$modinfo = get_fast_modinfo($course);
|
||||
$this->assertTrue(empty($modinfo->sections[0]));
|
||||
$this->assertFalse(empty($modinfo->sections[3]));
|
||||
|
||||
// Check that the old section's sequence no longer contains this ID
|
||||
$oldsection = $DB->get_record('course_sections', array('id' => $oldsectionid));
|
||||
$oldsequences = explode(',', $newsection->sequence);
|
||||
$this->assertFalse(in_array($cm->id, $oldsequences));
|
||||
|
||||
// Check that the new section's sequence now contains this ID
|
||||
$newsection = $DB->get_record('course_sections', array('id' => $newsection->id));
|
||||
$newsequences = explode(',', $newsection->sequence);
|
||||
$this->assertTrue(in_array($cm->id, $newsequences));
|
||||
|
||||
// Check that the section number has been changed in the cm
|
||||
$this->assertEquals($newsection->id, $cm->section);
|
||||
|
||||
|
||||
// Perform a second move as some issues were only seen on the second move
|
||||
$newsection = get_fast_modinfo($course)->get_section_info(2);
|
||||
$oldsectionid = $cm->section;
|
||||
$result = moveto_module($cm, $newsection);
|
||||
$this->assertTrue($result);
|
||||
|
||||
// reset of get_fast_modinfo is usually called the code calling moveto_module so call it here
|
||||
get_fast_modinfo(0, 0, true);
|
||||
$cms = get_fast_modinfo($course)->get_cms();
|
||||
$cm = reset($cms);
|
||||
|
||||
// Check that the cached modinfo contains the correct section info
|
||||
$modinfo = get_fast_modinfo($course);
|
||||
$this->assertTrue(empty($modinfo->sections[0]));
|
||||
$this->assertFalse(empty($modinfo->sections[2]));
|
||||
|
||||
// Check that the old section's sequence no longer contains this ID
|
||||
$oldsection = $DB->get_record('course_sections', array('id' => $oldsectionid));
|
||||
$oldsequences = explode(',', $newsection->sequence);
|
||||
$this->assertFalse(in_array($cm->id, $oldsequences));
|
||||
|
||||
// Check that the new section's sequence now contains this ID
|
||||
$newsection = $DB->get_record('course_sections', array('id' => $newsection->id));
|
||||
$newsequences = explode(',', $newsection->sequence);
|
||||
$this->assertTrue(in_array($cm->id, $newsequences));
|
||||
}
|
||||
|
||||
public function test_module_visibility() {
|
||||
|
@ -1602,5 +1602,54 @@ function xmldb_main_upgrade($oldversion) {
|
||||
upgrade_main_savepoint(true, 2013021801.00);
|
||||
}
|
||||
|
||||
if ($oldversion < 2013021801.01) {
|
||||
// Retrieve the list of course_sections as a recordset to save memory
|
||||
$coursesections = $DB->get_recordset('course_sections', null, 'course, id', 'id, course, sequence');
|
||||
foreach ($coursesections as $coursesection) {
|
||||
// Retrieve all of the actual modules in this course and section combination to reduce DB calls
|
||||
$actualsectionmodules = $DB->get_records('course_modules',
|
||||
array('course' => $coursesection->course, 'section' => $coursesection->id), '', 'id, section');
|
||||
|
||||
// Break out the current sequence so that we can compare it
|
||||
$currentsequence = explode(',', $coursesection->sequence);
|
||||
$newsequence = array();
|
||||
|
||||
// Check each of the modules in the current sequence
|
||||
foreach ($currentsequence as $module) {
|
||||
if (isset($actualsectionmodules[$module])) {
|
||||
$newsequence[] = $module;
|
||||
// We unset the actualsectionmodules so that we don't get duplicates and that we can add orphaned
|
||||
// modules later
|
||||
unset($actualsectionmodules[$module]);
|
||||
}
|
||||
}
|
||||
|
||||
// Append any modules which have somehow been orphaned
|
||||
foreach ($actualsectionmodules as $module) {
|
||||
$newsequence[] = $module->id;
|
||||
}
|
||||
|
||||
// Piece it all back together
|
||||
$sequence = implode(',', $newsequence);
|
||||
|
||||
// Only update if there have been changes
|
||||
if ($sequence !== $coursesection->sequence) {
|
||||
$coursesection->sequence = $sequence;
|
||||
$DB->update_record('course_sections', $coursesection);
|
||||
|
||||
// And clear the sectioncache and modinfo cache - they'll be regenerated on next use
|
||||
$course = new stdClass();
|
||||
$course->id = $coursesection->course;
|
||||
$course->sectioncache = null;
|
||||
$course->modinfo = null;
|
||||
$DB->update_record('course', $course);
|
||||
}
|
||||
}
|
||||
$coursesections->close();
|
||||
|
||||
// Main savepoint reached.
|
||||
upgrade_main_savepoint(true, 2013021801.01);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -30,7 +30,7 @@
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
|
||||
$version = 2013021801.00; // YYYYMMDD = weekly release date of this DEV branch
|
||||
$version = 2013021801.01; // YYYYMMDD = weekly release date of this DEV branch
|
||||
// RR = release increments - 00 in DEV branches
|
||||
// .XX = incremental changes
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user