From d19f47709ffbdc73fc15011d321ab1d249e47ad5 Mon Sep 17 00:00:00 2001 From: skodak Date: Wed, 13 Feb 2008 09:48:46 +0000 Subject: [PATCH] MDL-13375 fix for duplicate itemnumbers in outcome items; merged from MOODLE_19_STABLE --- course/modedit.php | 32 ++++++++++++++++---------------- lib/gradelib.php | 12 ++++++++++++ 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/course/modedit.php b/course/modedit.php index 552242a483..0c5d5f2b83 100644 --- a/course/modedit.php +++ b/course/modedit.php @@ -356,38 +356,38 @@ 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; diff --git a/lib/gradelib.php b/lib/gradelib.php index 53a3a31f0e..677a7b4e6a 100644 --- a/lib/gradelib.php +++ b/lib/gradelib.php @@ -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; } -- 2.39.5