diff --git a/course/lib.php b/course/lib.php index 19d00d7ded4..071f484e76a 100644 --- a/course/lib.php +++ b/course/lib.php @@ -1666,6 +1666,22 @@ function move_section($course, $section, $move) { if (isset($USER->display[$course->id]) and ($USER->display[$course->id] == $section)) { course_set_display($course->id, $sectiondest); } + + // Check for duplicates. + // There is a very rare case that some sections in the same course have the same section id. + if (($count_section = count_records('course_sections', 'course', $course->id) - 1) != $course->numsections) { + $sections = get_records_select('course_sections', "course = $course->id AND section > 0", 'section ASC'); + $n = 1; + foreach ($sections as $section) { + if (!set_field('course_sections', 'section', $n, 'id', $section->id)) { + return false; + } + $n++; + } + if (!set_field('course', 'numsections', $count_section, 'id', $course->id)) { + return false; + } + } return true; }