Index: lib/grade/grade_item.php =================================================================== RCS file: /cvsroot/moodle/moodle/lib/grade/grade_item.php,v retrieving revision 1.192 diff -u -r1.192 grade_item.php --- lib/grade/grade_item.php 5 Jun 2010 19:53:29 -0000 1.192 +++ lib/grade/grade_item.php 9 Jul 2010 13:37:29 -0000 @@ -1760,11 +1760,15 @@ // add missing final grade values // not graded (null) is counted as 0 - the spreadsheet way + $allinputsnull = true; foreach($useditems as $gi) { - if (!array_key_exists('gi'.$gi, $params)) { + if (!array_key_exists('gi'.$gi, $params) || is_null($params['gi'.$gi])) { $params['gi'.$gi] = 0; } else { $params['gi'.$gi] = (float)$params['gi'.$gi]; + if ($gi != $this->id) { + $allinputsnull = false; + } } } @@ -1789,16 +1793,24 @@ return true; } - // do the calculation - $this->formula->set_params($params); - $result = $this->formula->evaluate(); - - if ($result === false) { + if ($allinputsnull) { $grade->finalgrade = null; + $result = true; } else { - // normalize - $grade->finalgrade = $this->bounded_grade($result); + + // do the calculation + $this->formula->set_params($params); + $result = $this->formula->evaluate(); + + if ($result === false) { + $grade->finalgrade = null; + + } else { + // normalize + $grade->finalgrade = $this->bounded_grade($result); + } + } // update in db if changed