MDL-13375 fix for duplicate itemnumbers in outcome items; merged from MOODLE_19_STABLE

This commit is contained in:
skodak
2008-02-13 09:48:46 +00:00
parent d886a7ea77
commit d19f47709f
2 changed files with 28 additions and 16 deletions
+16 -16
View File
@@ -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;
+12
View 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;
}