]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-13375 fix for duplicate itemnumbers in outcome items; merged from MOODLE_19_STABLE
authorskodak <skodak>
Wed, 13 Feb 2008 09:48:46 +0000 (09:48 +0000)
committerskodak <skodak>
Wed, 13 Feb 2008 09:48:46 +0000 (09:48 +0000)
course/modedit.php
lib/gradelib.php

index 552242a483c1039060b8d0ea6aa5a626e66415ef..0c5d5f2b8342ec62fcef075ff99dd1019f475858 100644 (file)
         if ($outcomes = grade_outcome::fetch_all_available($COURSE->id)) {
             $grade_items = array();
 
+            // Outcome grade_item.itemnumber start at 1000, there is nothing above outcomes
+            $max_itemnumber = 999;
+            if ($items) {
+                foreach($items as $item) {
+                    if ($item->itemnumber > $max_itemnumber) {
+                        $max_itemnumber = $item->itemnumber;
+                    }
+                }
+            }
+
             foreach($outcomes as $outcome) {
                 $elname = 'outcome_'.$outcome->id;
 
                 if (array_key_exists($elname, $fromform) and $fromform->$elname) {
-                    // we have a request for new outcome grade item
-                    // Outcome grade_item.itemnumber start at 1000
-                    $max_itemnumber = 999;
-                    $exists = false;
+                    // so we have a request for new outcome grade item?
                     if ($items) {
                         foreach($items as $item) {
                             if ($item->outcomeid == $outcome->id) {
-                                $exists = true;
-                                break;
-                            }
-                            if (empty($item->outcomeid)) {
-                                continue;
-                            }
-                            if ($item->itemnumber > $max_itemnumber) {
-                                $max_itemnumber = $item->itemnumber;
+                                //outcome aready exists
+                                continue 2;
                             }
                         }
                     }
-                    if ($exists) {
-                        continue;
-                    }
+
+                    $max_itemnumber++;
 
                     $outcome_item = new grade_item();
                     $outcome_item->courseid     = $COURSE->id;
                     $outcome_item->itemtype     = 'mod';
                     $outcome_item->itemmodule   = $fromform->modulename;
                     $outcome_item->iteminstance = $fromform->instance;
-                    $outcome_item->itemnumber   = $max_itemnumber + 1;
+                    $outcome_item->itemnumber   = $max_itemnumber;
                     $outcome_item->itemname     = $outcome->fullname;
                     $outcome_item->outcomeid    = $outcome->id;
                     $outcome_item->gradetype    = GRADE_TYPE_SCALE;
index 53a3a31f0e7fc0721371f699187562c76826599c..677a7b4e6a797c0b067dcceb948865666f2883f7 100644 (file)
@@ -439,6 +439,18 @@ function grade_get_grades($courseid, $itemtype, $itemmodule, $iteminstance, $use
                         $outcome->grades[$userid] = $grade;
                     }
                 }
+
+                if (isset($return->outcomes[$grade_item->itemnumber])) {
+                    // itemnumber duplicates - lets fix them!
+                    $newnumber = $grade_item->itemnumber + 1;
+                    while(grade_item::fetch(array('itemtype'=>$itemtype, 'itemmodule'=>$itemmodule, 'iteminstance'=>$iteminstance, 'courseid'=>$courseid, 'itemnumber'=>$newnumber))) {
+                        $newnumber++;
+                    }
+                    $outcome->itemnumber    = $newnumber;
+                    $grade_item->itemnumber = $newnumber;
+                    $grade_item->update('system');
+                }
+
                 $return->outcomes[$grade_item->itemnumber] = $outcome;
 
             }