MDL-33367 course: move_section reuse move_section_to function
authorRajesh Taneja <rajesh@moodle.com>
Mon, 28 May 2012 02:11:25 +0000 (10:11 +0800)
committerRajesh Taneja <rajesh@moodle.com>
Tue, 5 Jun 2012 01:34:14 +0000 (09:34 +0800)
Conflicts:

course/lib.php

course/lib.php
course/tests/courselib_test.php
course/yui/dragdrop/dragdrop.js

index a5566d6..8a1475c 100644 (file)
@@ -2963,41 +2963,12 @@ function move_section($course, $section, $move) {
         return false;
     }
 
-    if (!$sectionrecord = $DB->get_record("course_sections", array("course"=>$course->id, "section"=>$section))) {
-        return false;
-    }
-
-    if (!$sectiondestrecord = $DB->get_record("course_sections", array("course"=>$course->id, "section"=>$sectiondest))) {
-        return false;
-    }
-
-    // Three-step change ensures that the section always remains unique (there is
-    // a unique index now)
-    $DB->set_field("course_sections", "section", -$sectiondest, array("id"=>$sectionrecord->id));
-    $DB->set_field("course_sections", "section", $section, array("id"=>$sectiondestrecord->id));
-    $DB->set_field("course_sections", "section", $sectiondest, array("id"=>$sectionrecord->id));
-
-    // Update highlighting if the move affects highlighted section
-    if ($course->marker == $section) {
-        course_set_marker($course->id, $sectiondest);
-    } elseif ($course->marker == $sectiondest) {
-        course_set_marker($course->id, $section);
+    $retval = move_section_to($course, $section, $sectiondest);
+    // If section moved, then rebuild course cache.
+    if ($retval) {
+        rebuild_course_cache($course->id, true);
     }
-
-
-    // Fix order if needed. The database prevents duplicate sections, but it is
-    // possible there could be a gap in the numbering.
-    $sections = $DB->get_records('course_sections', array('course'=>$course->id), 'section ASC');
-    $n = 0;
-    foreach ($sections as $section) {
-        if ($section->section != $n) {
-            $DB->set_field('course_sections', 'section', $n, array('id'=>$section->id));
-        }
-        $n++;
-    }
-    // After moving section, rebuild course cache.
-    rebuild_course_cache($course->id, true);
-    return true;
+    return $retval;
 }
 
 /**
@@ -3107,6 +3078,10 @@ function reorder_sections($sections, $origin_position, $target_position) {
             unset($sections[$id]);
         }
         if ($position == $target_position) {
+            if ($target_position < $origin_position) {
+                $append_array[$id] = $position;
+                unset($sections[$id]);
+            }
             $found = true;
         }
     }
index f7f4f80..2274e6d 100644 (file)
@@ -52,6 +52,16 @@ class courselib_testcase extends advanced_testcase {
         $this->assertEquals($oldsections[5], $neworder[5]);
         $this->assertEquals($oldsections[6], $neworder[6]);
 
+        $neworder = reorder_sections($sections, 4, 2);
+        $neworder = array_keys($neworder);
+        $this->assertEquals($oldsections[0], $neworder[0]);
+        $this->assertEquals($oldsections[1], $neworder[1]);
+        $this->assertEquals($oldsections[2], $neworder[3]);
+        $this->assertEquals($oldsections[3], $neworder[4]);
+        $this->assertEquals($oldsections[4], $neworder[2]);
+        $this->assertEquals($oldsections[5], $neworder[5]);
+        $this->assertEquals($oldsections[6], $neworder[6]);
+
         $neworder = reorder_sections(1, 2, 4);
         $this->assertFalse($neworder);
     }
index 080cace..2b492ad 100644 (file)
@@ -135,12 +135,10 @@ YUI.add('moodle-course-dragdrop', function(Y) {
             var dragnodeid = Number(this.get_section_id(dragnode));
             var dropnodeid = Number(this.get_section_id(dropnode));
 
-            var targetoffset = 0;
             var loopstart = dragnodeid;
             var loopend = dropnodeid;
 
             if (this.goingup) {
-                targetoffset = 1;
                 loopstart = dropnodeid;
                 loopend = dragnodeid;
             }
@@ -166,7 +164,7 @@ YUI.add('moodle-course-dragdrop', function(Y) {
             params['class'] = 'section';
             params.field = 'move';
             params.id = dragnodeid;
-            params.value = dropnodeid - targetoffset;
+            params.value = dropnodeid;
 
             // Do AJAX request
             var uri = M.cfg.wwwroot + this.get('ajaxurl');