mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 08:56:36 +02:00
MDL-9506 Removed the debugging message for the fetch() methods. Added droplow and keephigh rules to grade_category::aggregate_grades(). The only question now is what to do when the droplow or keephigh field is larger than the number of grades for a given user/item combination. At the moment it just gives that value 0.
This commit is contained in:
parent
d0e84e1be0
commit
ab53054fd1
11 changed files with 93 additions and 63 deletions
|
@ -102,7 +102,6 @@ class grade_calculation extends grade_object {
|
||||||
return $grade_calculation;
|
return $grade_calculation;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
debugging("No grade_calculation matching your criteria in the database.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,7 +183,6 @@ class grade_category extends grade_object {
|
||||||
return $grade_category;
|
return $grade_category;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
debugging("No grade_category matching your criteria in the database.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -410,12 +409,29 @@ class grade_category extends grade_object {
|
||||||
foreach ($set as $userid => $final_grade) {
|
foreach ($set as $userid => $final_grade) {
|
||||||
$this->load_grade_item();
|
$this->load_grade_item();
|
||||||
$value = standardise_score((float) $final_grade, 0, 1, $this->grade_item->grademin, $this->grade_item->grademax);
|
$value = standardise_score((float) $final_grade, 0, 1, $this->grade_item->grademin, $this->grade_item->grademax);
|
||||||
$pooled_grades[$userid][] = $value;
|
$pooled_grades[$userid][] = (string) $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($pooled_grades as $userid => $grades) {
|
foreach ($pooled_grades as $userid => $grades) {
|
||||||
$aggregated_value = null;
|
$aggregated_value = null;
|
||||||
|
// Sort grades from lowest to largest
|
||||||
|
sort($grades, SORT_NUMERIC);
|
||||||
|
|
||||||
|
// Apply droplow or keephigh rule
|
||||||
|
if (!empty($this->droplow)) {
|
||||||
|
$reversed_grades = array_reverse($grades);
|
||||||
|
for ($i = 0; $i < $this->droplow; $i++) {
|
||||||
|
array_pop($reversed_grades);
|
||||||
|
}
|
||||||
|
$grades = array_reverse($reversed_grades);
|
||||||
|
} elseif (!empty($this->keephigh)) {
|
||||||
|
for ($i = 0; $i < $this->keephigh; $i++) {
|
||||||
|
array_pop($grades);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($grades) > 1) {
|
||||||
|
|
||||||
switch ($this->aggregation) {
|
switch ($this->aggregation) {
|
||||||
case GRADE_AGGREGATE_MEAN : // Arithmetic average
|
case GRADE_AGGREGATE_MEAN : // Arithmetic average
|
||||||
|
@ -447,11 +463,11 @@ class grade_category extends grade_object {
|
||||||
$aggregated_value = $sum / $num;
|
$aggregated_value = $sum / $num;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} elseif (count($grades) == 1) {
|
||||||
// If the gradevalue is null, we have a problem
|
$aggregated_value = $grades[0];
|
||||||
if (empty($aggregated_value)) {
|
} else {
|
||||||
debugging("There was an error during the aggregation procedure, an empty value resulted.");
|
// TODO what happens if the droplow and keephigh rules have deleted all grades?
|
||||||
return false;
|
$aggregated_value = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
$grade_raw = new grade_grades_raw();
|
$grade_raw = new grade_grades_raw();
|
||||||
|
@ -633,29 +649,38 @@ class grade_category extends grade_object {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves from DB, instantiates and saves the associated grade_item object.
|
* Uses get_grade_item to load or create a grade_item, then saves it as $this->grade_item.
|
||||||
* If no grade_item exists yet, create one.
|
|
||||||
* @return object Grade_item
|
* @return object Grade_item
|
||||||
*/
|
*/
|
||||||
function load_grade_item() {
|
function load_grade_item() {
|
||||||
|
$this->grade_item = $this->get_grade_item();
|
||||||
|
return $this->grade_item;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves from DB and instantiates the associated grade_item object.
|
||||||
|
* If no grade_item exists yet, create one.
|
||||||
|
* @return object Grade_item
|
||||||
|
*/
|
||||||
|
function get_grade_item() {
|
||||||
$grade_items = get_records_select('grade_items', "iteminstance = $this->id AND itemtype = 'category'", null, '*', 0, 1);
|
$grade_items = get_records_select('grade_items', "iteminstance = $this->id AND itemtype = 'category'", null, '*', 0, 1);
|
||||||
|
|
||||||
if ($grade_items){
|
if ($grade_items){
|
||||||
$params = current($grade_items);
|
$params = current($grade_items);
|
||||||
$this->grade_item = new grade_item($params);
|
$grade_item = new grade_item($params);
|
||||||
} else {
|
} else {
|
||||||
$this->grade_item = new grade_item();
|
$grade_item = new grade_item();
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the associated grade_item isn't yet created, do it now. But first try loading it, in case it exists in DB.
|
// If the associated grade_item isn't yet created, do it now. But first try loading it, in case it exists in DB.
|
||||||
if (empty($this->grade_item->id)) {
|
if (empty($grade_item->id)) {
|
||||||
$this->grade_item->iteminstance = $this->id;
|
$grade_item->iteminstance = $this->id;
|
||||||
$this->grade_item->itemtype = 'category';
|
$grade_item->itemtype = 'category';
|
||||||
$this->grade_item->insert();
|
$grade_item->insert();
|
||||||
$this->grade_item->update_from_db();
|
$grade_item->update_from_db();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->grade_item;
|
return $grade_item;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -665,11 +690,24 @@ class grade_category extends grade_object {
|
||||||
*/
|
*/
|
||||||
function load_parent_category() {
|
function load_parent_category() {
|
||||||
if (empty($this->parent_category) && !empty($this->parent)) {
|
if (empty($this->parent_category) && !empty($this->parent)) {
|
||||||
$this->parent_category = new grade_category(array('id' => $this->parent));
|
$this->parent_category = $this->get_parent_category();
|
||||||
}
|
}
|
||||||
return $this->parent_category;
|
return $this->parent_category;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uses $this->parent to instantiate and return a grade_category object.
|
||||||
|
* @return object Parent_category
|
||||||
|
*/
|
||||||
|
function get_parent_category() {
|
||||||
|
if (!empty($this->parent)) {
|
||||||
|
$parent_category = new grade_category(array('id' => $this->parent));
|
||||||
|
return $parent_category;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets this category as the parent for the given children.
|
* Sets this category as the parent for the given children.
|
||||||
* A number of constraints are necessary:
|
* A number of constraints are necessary:
|
||||||
|
|
|
@ -147,7 +147,6 @@ class grade_grades_final extends grade_object {
|
||||||
return $object;
|
return $object;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
debugging("No grade_grades_final matching your criteria in the database.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,7 +173,6 @@ class grade_grades_raw extends grade_object {
|
||||||
return $object;
|
return $object;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
debugging("No grade_grades_raw matching your criteria in the database.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,6 @@ class grade_grades_text extends grade_object {
|
||||||
return $grade_text;
|
return $grade_text;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
debugging("No grade_grades_text matching your criteria in the database.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,7 +102,6 @@ class grade_history extends grade_object {
|
||||||
return $grade_history;
|
return $grade_history;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
debugging("No grade_history matching your criteria in the database.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -426,7 +426,6 @@ class grade_item extends grade_object {
|
||||||
return $grade_item;
|
return $grade_item;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
debugging("No grade_item matching these criteria in the database.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -513,7 +512,7 @@ class grade_item extends grade_object {
|
||||||
$this->grade_grades_raw[$userid] = $raw_grade;
|
$this->grade_grades_raw[$userid] = $raw_grade;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
debugging("The data given to grade_item::save_raw($data) was not valid, it must be an arra of raw grades.");
|
debugging("The data given to grade_item::save_raw($raw_grades) was not valid, it must be an array of raw grades.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,7 +137,7 @@ class grade_object {
|
||||||
*/
|
*/
|
||||||
function update_from_db() {
|
function update_from_db() {
|
||||||
if (empty($this->id)) {
|
if (empty($this->id)) {
|
||||||
debugging("The object could not be used in its state to retrieve a matching record from the DB, because it's id field is not set.");
|
debugging("The object could not be used in its state to retrieve a matching record from the DB, because its id field is not set.");
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
$class = get_class($this);
|
$class = get_class($this);
|
||||||
|
|
|
@ -117,7 +117,6 @@ class grade_outcome extends grade_object {
|
||||||
return $grade_outcome;
|
return $grade_outcome;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
debugging("No matching grade_outcome in DB with the given criteria.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,7 +96,6 @@ class grade_scale extends grade_object {
|
||||||
return $grade_scale;
|
return $grade_scale;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
debugging("No matching grade_scale in DB with the given criteria.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -385,7 +385,7 @@ class gradelib_test extends UnitTestCase {
|
||||||
$grade_category->courseid = $this->courseid;
|
$grade_category->courseid = $this->courseid;
|
||||||
$grade_category->aggregation = GRADE_AGGREGATE_MEAN;
|
$grade_category->aggregation = GRADE_AGGREGATE_MEAN;
|
||||||
$grade_category->keephigh = 100;
|
$grade_category->keephigh = 100;
|
||||||
$grade_category->droplow = 10;
|
$grade_category->droplow = 0;
|
||||||
$grade_category->hidden = 0;
|
$grade_category->hidden = 0;
|
||||||
$grade_category->timecreated = mktime();
|
$grade_category->timecreated = mktime();
|
||||||
$grade_category->timemodified = mktime();
|
$grade_category->timemodified = mktime();
|
||||||
|
@ -401,7 +401,7 @@ class gradelib_test extends UnitTestCase {
|
||||||
$grade_category->courseid = $this->courseid;
|
$grade_category->courseid = $this->courseid;
|
||||||
$grade_category->aggregation = GRADE_AGGREGATE_MEAN;
|
$grade_category->aggregation = GRADE_AGGREGATE_MEAN;
|
||||||
$grade_category->keephigh = 100;
|
$grade_category->keephigh = 100;
|
||||||
$grade_category->droplow = 10;
|
$grade_category->droplow = 0;
|
||||||
$grade_category->hidden = 0;
|
$grade_category->hidden = 0;
|
||||||
$grade_category->parent = $this->grade_categories[0]->id;
|
$grade_category->parent = $this->grade_categories[0]->id;
|
||||||
$grade_category->timecreated = mktime();
|
$grade_category->timecreated = mktime();
|
||||||
|
@ -418,7 +418,7 @@ class gradelib_test extends UnitTestCase {
|
||||||
$grade_category->courseid = $this->courseid;
|
$grade_category->courseid = $this->courseid;
|
||||||
$grade_category->aggregation = GRADE_AGGREGATE_MEAN;
|
$grade_category->aggregation = GRADE_AGGREGATE_MEAN;
|
||||||
$grade_category->keephigh = 100;
|
$grade_category->keephigh = 100;
|
||||||
$grade_category->droplow = 10;
|
$grade_category->droplow = 0;
|
||||||
$grade_category->hidden = 0;
|
$grade_category->hidden = 0;
|
||||||
$grade_category->parent = $this->grade_categories[0]->id;
|
$grade_category->parent = $this->grade_categories[0]->id;
|
||||||
$grade_category->timecreated = mktime();
|
$grade_category->timecreated = mktime();
|
||||||
|
@ -437,7 +437,7 @@ class gradelib_test extends UnitTestCase {
|
||||||
$grade_category->courseid = $this->courseid;
|
$grade_category->courseid = $this->courseid;
|
||||||
$grade_category->aggregation = GRADE_AGGREGATE_MEAN;
|
$grade_category->aggregation = GRADE_AGGREGATE_MEAN;
|
||||||
$grade_category->keephigh = 100;
|
$grade_category->keephigh = 100;
|
||||||
$grade_category->droplow = 10;
|
$grade_category->droplow = 0;
|
||||||
$grade_category->hidden = 0;
|
$grade_category->hidden = 0;
|
||||||
$grade_category->timecreated = mktime();
|
$grade_category->timecreated = mktime();
|
||||||
$grade_category->timemodified = mktime();
|
$grade_category->timemodified = mktime();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue