]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-9506 Removed the debugging message for the fetch() methods. Added droplow and...
authornicolasconnault <nicolasconnault>
Mon, 21 May 2007 05:54:12 +0000 (05:54 +0000)
committernicolasconnault <nicolasconnault>
Mon, 21 May 2007 05:54:12 +0000 (05:54 +0000)
lib/grade/grade_calculation.php
lib/grade/grade_category.php
lib/grade/grade_grades_final.php
lib/grade/grade_grades_raw.php
lib/grade/grade_grades_text.php
lib/grade/grade_history.php
lib/grade/grade_item.php
lib/grade/grade_object.php
lib/grade/grade_outcome.php
lib/grade/grade_scale.php
lib/simpletest/testgradelib.php

index d80d3f7b9b0f72a53149f2b67df8bedd887b8dcd..1508dc89a2188cc16960a95ef3f9de260c1082fd 100644 (file)
@@ -102,7 +102,6 @@ class grade_calculation extends grade_object {
                 return $grade_calculation;
             }
         } else {
-            debugging("No grade_calculation matching your criteria in the database.");
             return false;
         }
     }
index a0195837c6d1855f652cbbd99a3ad613b4fbd770..54bc1d6fa991d80d072ac4dae25f7c0c47948474 100644 (file)
@@ -183,7 +183,6 @@ class grade_category extends grade_object {
                 return $grade_category;
             }
         } else {
-            debugging("No grade_category matching your criteria in the database.");
             return false;
         }
     }
@@ -410,49 +409,66 @@ class grade_category extends grade_object {
             foreach ($set as $userid => $final_grade) {
                 $this->load_grade_item();
                 $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) {
             $aggregated_value = null;
-
-            switch ($this->aggregation) {
-                case GRADE_AGGREGATE_MEAN : // Arithmetic average
-                    $num = count($grades);
-                    $sum = array_sum($grades);
-                    $aggregated_value = $sum / $num;
-                    break;
-                case GRADE_AGGREGATE_MEDIAN : // Middle point value in the set: ignores frequencies
-                    sort($grades);
-                    $num = count($grades);
-                    $halfpoint = intval($num / 2);
-                    
-                    if($num % 2 == 0) { 
-                        $aggregated_value = ($grades[ceil($halfpoint)] + $grades[floor($halfpoint)]) / 2; 
-                    } else { 
-                        $aggregated_value = $grades[$halfpoint]; 
-                    }
-
-                    break;
-                case GRADE_AGGREGATE_MODE : // Value that occurs most frequently. Not always useful (all values are likely to be different)
-                    // TODO implement or reject
-                    break;
-                case GRADE_AGGREGATE_SUM : // I don't see much point to this one either
-                    $aggregated_value = array_sum($grades);
-                    break;
-                default:
-                    $num = count($grades);
-                    $sum = array_sum($grades);
-                    $aggregated_value = $sum / $num; 
-                    break;
+            // 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 the gradevalue is null, we have a problem
-            if (empty($aggregated_value)) {
-                debugging("There was an error during the aggregation procedure, an empty value resulted.");
-                return false;
-            }            
+            if (count($grades) > 1) {
+
+                switch ($this->aggregation) {
+                    case GRADE_AGGREGATE_MEAN : // Arithmetic average
+                        $num = count($grades);
+                        $sum = array_sum($grades);
+                        $aggregated_value = $sum / $num;
+                        break;
+                    case GRADE_AGGREGATE_MEDIAN : // Middle point value in the set: ignores frequencies
+                        sort($grades);
+                        $num = count($grades);
+                        $halfpoint = intval($num / 2);
+                        
+                        if($num % 2 == 0) { 
+                            $aggregated_value = ($grades[ceil($halfpoint)] + $grades[floor($halfpoint)]) / 2; 
+                        } else { 
+                            $aggregated_value = $grades[$halfpoint]; 
+                        }
+
+                        break;
+                    case GRADE_AGGREGATE_MODE : // Value that occurs most frequently. Not always useful (all values are likely to be different)
+                        // TODO implement or reject
+                        break;
+                    case GRADE_AGGREGATE_SUM : // I don't see much point to this one either
+                        $aggregated_value = array_sum($grades);
+                        break;
+                    default:
+                        $num = count($grades);
+                        $sum = array_sum($grades);
+                        $aggregated_value = $sum / $num; 
+                        break;
+                }
+            } elseif (count($grades) == 1) {
+                $aggregated_value = $grades[0];
+            } else {
+                // TODO what happens if the droplow and keephigh rules have deleted all grades?
+                $aggregated_value = 0;
+            }
             
             $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.
-     * If no grade_item exists yet, create one.
+     * Uses get_grade_item to load or create a grade_item, then saves it as $this->grade_item.
      * @return object 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);
         
         if ($grade_items){ 
             $params = current($grade_items);
-            $this->grade_item = new grade_item($params);
+            $grade_item = new grade_item($params);
         } 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 (empty($this->grade_item->id)) {
-            $this->grade_item->iteminstance = $this->id;
-            $this->grade_item->itemtype = 'category';
-            $this->grade_item->insert();
-            $this->grade_item->update_from_db();
+        if (empty($grade_item->id)) {
+            $grade_item->iteminstance = $this->id;
+            $grade_item->itemtype = 'category';
+            $grade_item->insert();
+            $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() {
         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;
     } 
-   
+    
+    /**
+     * 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.
      * A number of constraints are necessary:
index 6fb1fb6c66448c625d807c2db971e6078f265484..18221ce1e428b04f5a9e170fbb8d01f9ed1a8990 100644 (file)
@@ -147,7 +147,6 @@ class grade_grades_final extends grade_object {
                 return $object;
             }
         } else {
-            debugging("No grade_grades_final matching your criteria in the database.");
             return false;
         }
     } 
index 9a1da085452621bfb8e95f57bf3e76889812c25b..ecdb038ec35fbaf1e9990f25d5733eea9d229f1c 100644 (file)
@@ -173,7 +173,6 @@ class grade_grades_raw extends grade_object {
                 return $object;
             }
         } else {
-            debugging("No grade_grades_raw matching your criteria in the database.");
             return false;
         }
     } 
index a312a604a38e90647f298652afd3b8561201b897..0f215264e193845b686084a56a5112798d5fba14 100644 (file)
@@ -115,7 +115,6 @@ class grade_grades_text extends grade_object {
                 return $grade_text;
             }
         } else {
-            debugging("No grade_grades_text matching your criteria in the database.");
             return false;
         }
     }
index 08c65778cb2a2f126df7a026a8376c974622f61e..56fb5f669bea1429928525c7b404b3d7068db387 100644 (file)
@@ -102,7 +102,6 @@ class grade_history extends grade_object {
                 return $grade_history;
             }
         } else {
-            debugging("No grade_history matching your criteria in the database.");
             return false;
         }
     } 
index 6e249b0cdf84d24e7d315f0dd03df1d9fe90d83d..1da7943f8e8642b93418a6eb1117110db6c7ab8b 100644 (file)
@@ -426,7 +426,6 @@ class grade_item extends grade_object {
                 return $grade_item;
             }
         } else { 
-            debugging("No grade_item matching these criteria in the database.");
             return false;
         }
     }
@@ -513,7 +512,7 @@ class grade_item extends grade_object {
                 $this->grade_grades_raw[$userid] = $raw_grade;
             }
         } 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;
         }
     }
index 111d642db64013e6fb4e742eac946d580cde8e9d..5b87aff59554c1523d012e6f449ca96c9d574bda 100644 (file)
@@ -137,7 +137,7 @@ class grade_object {
      */
     function update_from_db() {
         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;
         } else {
             $class = get_class($this);
index 7d2a855151fc1a91f3026ddf2e1ae700de6c1a80..707351935f0fbe45c44a2abc6de4f4624e7a0baa 100644 (file)
@@ -117,7 +117,6 @@ class grade_outcome extends grade_object {
                 return $grade_outcome;
             }
         } else {
-            debugging("No matching grade_outcome in DB with the given criteria.");
             return false;
         }
     }
index d65555fb250f545f4aa27018f4a614ff5cd6e5b2..38264bc492cb6cf8f82d2647cfe03bd476efe3b6 100644 (file)
@@ -96,7 +96,6 @@ class grade_scale extends grade_object {
                 return $grade_scale;
             }
         } else {
-            debugging("No matching grade_scale in DB with the given criteria.");
             return false;
         }
     }
index a348105f9673d94e487f118f2e9b079a57f80361..0ad1eb3442253802269004151da9db2c856eb23f 100644 (file)
@@ -385,7 +385,7 @@ class gradelib_test extends UnitTestCase {
         $grade_category->courseid    = $this->courseid;
         $grade_category->aggregation = GRADE_AGGREGATE_MEAN;
         $grade_category->keephigh    = 100;
-        $grade_category->droplow     = 10;
+        $grade_category->droplow     = 0;
         $grade_category->hidden      = 0;
         $grade_category->timecreated = mktime();
         $grade_category->timemodified = mktime();
@@ -401,7 +401,7 @@ class gradelib_test extends UnitTestCase {
         $grade_category->courseid    = $this->courseid;
         $grade_category->aggregation = GRADE_AGGREGATE_MEAN;
         $grade_category->keephigh    = 100;
-        $grade_category->droplow     = 10;
+        $grade_category->droplow     = 0;
         $grade_category->hidden      = 0;
         $grade_category->parent      = $this->grade_categories[0]->id;
         $grade_category->timecreated = mktime();
@@ -418,7 +418,7 @@ class gradelib_test extends UnitTestCase {
         $grade_category->courseid    = $this->courseid;
         $grade_category->aggregation = GRADE_AGGREGATE_MEAN;
         $grade_category->keephigh    = 100;
-        $grade_category->droplow     = 10;
+        $grade_category->droplow     = 0;
         $grade_category->hidden      = 0;
         $grade_category->parent      = $this->grade_categories[0]->id;
         $grade_category->timecreated = mktime();
@@ -437,7 +437,7 @@ class gradelib_test extends UnitTestCase {
         $grade_category->courseid    = $this->courseid;
         $grade_category->aggregation = GRADE_AGGREGATE_MEAN;
         $grade_category->keephigh    = 100;
-        $grade_category->droplow     = 10;
+        $grade_category->droplow     = 0;
         $grade_category->hidden      = 0;
         $grade_category->timecreated = mktime();
         $grade_category->timemodified = mktime();