Skip to content

Commit

Permalink
MDL-12154 used proper cast to float before !== comparison
Browse files Browse the repository at this point in the history
  • Loading branch information
skodak committed Nov 13, 2007
1 parent 232f2c1 commit 4ac209d
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 19 deletions.
10 changes: 6 additions & 4 deletions lib/grade/grade_category.php
Expand Up @@ -159,7 +159,7 @@ function build_path($grade_category) {
} else {
$obj = grade_object::get_instance('grade_category');
$parent = $obj->lib_wrapper->get_record('grade_categories', 'id', $grade_category->parent);
var_dump($parent);
var_dump($parent);
return grade_category::build_path($parent).$grade_category->id.'/';
}
}
Expand Down Expand Up @@ -474,7 +474,9 @@ function aggregate_grades($userid, $items, $grade_values, $oldgrade, $excluded)
}

if ($oldgrade) {
if (!is_null($oldgrade->finalgrade)) {
if (is_null($oldgrade->finalgrade)) {
$oldfinalgrade = null;
} else {
// we need proper floats here for !== comparison later
$oldfinalgrade = (float)$oldgrade->finalgrade;
}
Expand Down Expand Up @@ -913,7 +915,7 @@ function get_grade_item() {
} else {
$params = array('courseid'=>$this->courseid, 'itemtype'=>'category', 'iteminstance'=>$this->id);
}

$grade_item = grade_object::get_instance('grade_item');

if (!$grade_items = $grade_item->fetch_all($params)) {
Expand Down Expand Up @@ -1088,7 +1090,7 @@ function fetch_course_category($courseid) {

return $course_category;
}

/**
* Is grading object editable?
* @return boolean
Expand Down
28 changes: 13 additions & 15 deletions lib/grade/grade_item.php
Expand Up @@ -24,6 +24,7 @@
///////////////////////////////////////////////////////////////////////////

require_once('grade_object.php');

/**
* Class representing a grade item. It is responsible for handling its DB representation,
* modifying and returning its metadata.
Expand Down Expand Up @@ -335,7 +336,7 @@ function delete($source=null) {
if (!$this->is_course_item()) {
$this->force_regrading();
}

$grade_grade = grade_object::get_instance('grade_grade');
if ($grades = $grade_grade->fetch_all(array('itemid'=>$this->id))) {
foreach ($grades as $grade) {
Expand Down Expand Up @@ -1638,17 +1639,20 @@ function use_formula($userid, $params, $useditems, $oldgrade) {

// insert final grade - will be needed later anyway
if ($oldgrade) {
if (is_null($oldgrade->finalgrade)) {
$oldfinalgrade = null;
} else {
// we need proper floats here for !== comparison later
$oldfinalgrade = (float)$oldgrade->finalgrade;
}
$grade = $this->get_instance('grade_grade', $oldgrade, false); // fetching from db is not needed
$grade->grade_item =& $this;

} else {
$grade = $this->get_instance('grade_grade', array('itemid'=>$this->id, 'userid'=>$userid), false);
$grade->insert('system');
$grade->grade_item =& $this;

$oldgrade = new object();
$oldgrade->finalgrade = $grade->finalgrade;
$oldgrade->rawgrade = $grade->rawgrade;
$grade->insert('system');
$oldfinalgrade = null;
}

// no need to recalculate locked or overridden grades
Expand All @@ -1660,10 +1664,6 @@ function use_formula($userid, $params, $useditems, $oldgrade) {
$this->formula->set_params($params);
$result = $this->formula->evaluate();

// no raw grade for calculated grades - only final
$grade->rawgrade = null;


if ($result === false) {
$grade->finalgrade = null;

Expand All @@ -1673,14 +1673,12 @@ function use_formula($userid, $params, $useditems, $oldgrade) {
if ($this->gradetype == GRADE_TYPE_SCALE) {
$result = round($result+0.00001); // round scales upwards
}
$grade->finalgrade = $result;
$grade->finalgrade = (float)$result;
}

// update in db if changed
if ( $grade->finalgrade !== $oldgrade->finalgrade
or $grade->rawgrade !== $oldgrade->rawgrade) {

$grade->update('system');
if ($grade->finalgrade !== $oldfinalgrade) {
$grade->update('compute');
}

if ($result !== false) {
Expand Down

0 comments on commit 4ac209d

Please sign in to comment.