Merge branch 'MDL-31052-js-rewrite' of git://github.com/danpoltawski/moodle
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Thu, 26 Apr 2012 01:32:08 +0000 (03:32 +0200)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Thu, 26 Apr 2012 01:32:08 +0000 (03:32 +0200)
1  2 
course/lib.php
course/view.php

diff --cc course/lib.php
@@@ -3045,22 -3058,30 +3063,39 @@@ function move_section_to($course, $sect
          return false;
      }
  
 -    $sections = reorder_sections($sections, $section, $destination);
 +    $movedsections = reorder_sections($sections, $section, $destination);
  
 -    // Update all sections
 -    foreach ($sections as $id => $position) {
 -        $DB->set_field('course_sections', 'section', $position, array('id' => $id));
 +    // Update all sections. Do this in 2 steps to avoid breaking database
 +    // uniqueness constraint
 +    $transaction = $DB->start_delegated_transaction();
 +    foreach ($movedsections as $id => $position) {
 +        if ($sections[$id] !== $position) {
 +            $DB->set_field('course_sections', 'section', -$position, array('id' => $id));
 +        }
 +    }
 +    foreach ($movedsections as $id => $position) {
 +        if ($sections[$id] !== $position) {
 +            $DB->set_field('course_sections', 'section', $position, array('id' => $id));
 +        }
      }
  
+     // Adjust destination to reflect the actual section
+     $moveup = false;
+     if ($section > $destination) {
+         $destination++;
+         $moveup = true;
+     }
+     // If we move the highlighted section itself, then just highlight the destination.
+     // Adjust the higlighted section location if we move something over it either direction.
+     if ($section == $course->marker) {
+         course_set_marker($course, $destination);
+     } elseif ($moveup && $section > $course->marker && $course->marker >= $destination) {
+         course_set_marker($course, $course->marker+1);
+     } elseif (!$moveup && $section < $course->marker && $course->marker <= $destination) {
+         course_set_marker($course, $course->marker-1);
+     }
      // if the focus is on the section that is being moved, then move the focus along
      if (course_get_display($course->id) == $section) {
          course_set_display($course->id, $destination);
diff --cc course/view.php
Simple merge