]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-9506 Changed grade_tree fullobjects param (not fully implemented) to $include_gra...
authornicolasconnault <nicolasconnault>
Tue, 22 May 2007 09:03:33 +0000 (09:03 +0000)
committernicolasconnault <nicolasconnault>
Tue, 22 May 2007 09:03:33 +0000 (09:03 +0000)
lib/grade/grade_tree.php
lib/simpletest/grade/simpletest/testgradetree.php

index 7d7c97a71b2793cd30750ff761d28dc4d3d2f313..f63eb031741130ea36f56f604c5fd11342c37786 100644 (file)
@@ -67,6 +67,11 @@ class grade_tree {
      */
     var $need_delete = array();
 
+    /**
+     * Whether or not this grade_tree should load and store all the grades in addition to the categories and items.
+     * @var boolean $include_grades
+     */
+    var $include_grades;
 
     /**
      * Constructor, retrieves and stores a hierarchical array of all grade_category and grade_item
@@ -74,15 +79,16 @@ class grade_tree {
      * by default, but this can be switched off. The tree is indexed by sortorder, to facilitate CRUD operations
      * and renumbering.
      * @param int $courseid
-     * @param boolean $fullobjects
+     * @param boolean $include_grades
      * @param array $tree
      */
-    function grade_tree($courseid=NULL, $fullobjects=true, $tree=NULL) {
+    function grade_tree($courseid=NULL, $include_grades=false, $tree=NULL) {
         $this->courseid = $courseid;
+        $this->include_grades = $include_grades;
         if (!empty($tree)) {
             $this->tree_array = $tree;
         } else {
-            $this->tree_array = $this->get_tree($fullobjects);
+            $this->tree_array = $this->get_tree($include_grades);
         }
         
         $this->first_sortorder = key($this->tree_array);
@@ -273,7 +279,7 @@ class grade_tree {
         }
         
         // If the object is a grade_item, but the final_grades index isn't yet loaded, make the switch now. Same for grade_category and children
-        if (get_class($new_element->element['object']) == 'grade_item' && empty($new_element->element['final_grades'])) {
+        if (get_class($new_element->element['object']) == 'grade_item' && empty($new_element->element['final_grades']) && $this->include_grades) {
             $new_element->element['final_grades'] = $new_element->element['object']->load_final();
             unset($new_element->element['object']->grade_grades_final);
         } elseif (get_class($new_element->element['object']) == 'grade_category' && 
@@ -479,10 +485,9 @@ class grade_tree {
     /**
      * Static method that returns a sorted, nested array of all grade_categories and grade_items for 
      * a given course, or for the entire site if no courseid is given.
-     * @param boolean $fullobjects Whether to instantiate full objects based on the data or not
      * @return array
      */
-    function get_tree($fullobjects=true) {
+    function get_tree() {
         global $CFG;
         global $db;
         $db->debug = false;
@@ -507,9 +512,7 @@ class grade_tree {
         // For every grade_item that doesn't have a parent category, create category fillers
         foreach ($grade_items as $itemid => $item) {
             if (empty($item->categoryid)) {
-                if ($fullobjects) {
-                    $item = new grade_item($item);
-                }
+                $item = new grade_item($item);
                 $fillers[$item->sortorder] = $item;
             }
         }
@@ -541,14 +544,14 @@ class grade_tree {
                 $object = current($fillers);
                 unset($fillers[$sortorder]);
                 
-                $this->tree_filled[$sortorder] = $this->get_filler($object, $fullobjects);
+                $this->tree_filled[$sortorder] = $this->get_filler($object);
                 $element = array();
 
                 if (get_class($object) == 'grade_category') {
                     $children = $object->get_children(1);
                     unset($object->children);
                     $element['children'] = $children;
-                } elseif (get_class($object) == 'grade_item') {
+                } elseif (get_class($object) == 'grade_item' && $this->include_grades) {
                     $final_grades = $object->get_final();
                     unset($object->grade_grades_final);
                     $element['final_grades'] = $final_grades;
@@ -577,38 +580,30 @@ class grade_tree {
                 }
                 
                 foreach ($items as $itemid => $item) { 
-                    $finaltree = array();
-                    
-                    if ($fullobjects) {
+                    $finals = array();
+
+                    if ($this->include_grades) {
                         $final = new grade_grades_final();
                         $final->itemid = $itemid;
                         $finals = $final->fetch_all_using_this();
-                    } else {
-                        $finals = get_records('grade_grades_final', 'itemid', $itemid);
                     }
 
-                    if ($fullobjects) {
-                        $sortorder = $item->sortorder;
-                        $item = new grade_item($item);
-                        $item->sortorder = $sortorder;
-                    }
+                    $sortorder = $item->sortorder;
+                    $item = new grade_item($item);
+                    $item->sortorder = $sortorder;
 
                     $itemtree[$item->sortorder] = array('object' => $item, 'finalgrades' => $finals);
                 }
                 
-                if ($fullobjects) {
-                    $sortorder = $subcat->sortorder;
-                    $subcat = new grade_category($subcat, false);
-                    $subcat->sortorder = $sortorder;
-                }
+                $sortorder = $subcat->sortorder;
+                $subcat = new grade_category($subcat, false);
+                $subcat->sortorder = $sortorder;
                 $subcattree[$subcat->sortorder] = array('object' => $subcat, 'children' => $itemtree);
             }
             
-            if ($fullobjects) {
-                $sortorder = $topcat->sortorder;
-                $topcat = new grade_category($topcat, false);
-                $topcat->sortorder = $sortorder;
-            }
+            $sortorder = $topcat->sortorder;
+            $topcat = new grade_category($topcat, false);
+            $topcat->sortorder = $sortorder;
 
             $tree[$topcat->sortorder] = array('object' => $topcat, 'children' => $subcattree);
             $this->tree_filled[$topcat->sortorder] = array('object' => $topcat, 'children' => $subcattree);
@@ -617,13 +612,13 @@ class grade_tree {
         // If there are still grade_items or grade_categories without a top category, add another filler
         if (!empty($fillers)) {
             foreach ($fillers as $sortorder => $object) { 
-                $this->tree_filled[$sortorder] = $this->get_filler($object, $fullobjects);
+                $this->tree_filled[$sortorder] = $this->get_filler($object);
                 
                 if (get_class($object) == 'grade_category') {
                     $children = $object->get_children(1);
                     unset($object->children);
                     $element['children'] = $children;
-                } elseif (get_class($object) == 'grade_item') {
+                } elseif (get_class($object) == 'grade_item' && $this->include_grades) {
                     $final_grades = $object->get_final();
                     unset($object->grade_grades_final);
                     $element['final_grades'] = $final_grades;
@@ -644,19 +639,21 @@ class grade_tree {
      * the tree of grade_items in the cases where a grade_item or grade_category doesn't have a 
      * 2nd level topcategory.
      * @param object $object A grade_item or a grade_category object
-     * @param boolean $fullobjects Whether to instantiate full objects or just return stdClass objects
      * @return array
      */
-    function get_filler($object, $fullobjects=true) { 
+    function get_filler($object) { 
         $filler_array = array();
 
         // Depending on whether the filler is for a grade_item or a category...
         if (isset($object->itemname)) {
-            if (get_class($object) == 'grade_item') {
-                $finals = $object->load_final();
-            } else {
-                $item_object = new grade_item($object, false);
-                $finals = $object->load_final();
+            $finals = array();
+            if ($this->include_grades) {
+                if (get_class($object) == 'grade_item') {
+                    $finals = $object->load_final();
+                } else {
+                    $item_object = new grade_item($object, false);
+                    $finals = $object->load_final();
+                }
             }
 
             $filler_array = array('object' => 'filler', 'children' => 
@@ -667,14 +664,16 @@ class grade_tree {
             $subcat_children = $object->get_children(0, 'flat');
             $children_for_tree = array();
             foreach ($subcat_children as $itemid => $item) {
-                $finals = null;
-
-                if (get_class($item) == 'grade_item') {
-                    $finals = $item->load_final();
-                } else {
-                    $item_object = new grade_item($item, false);
-                    if (method_exists($item, 'load_final')) {
+                $finals = array();
+                
+                if ($this->include_grades) {
+                    if (get_class($item) == 'grade_item') {
                         $finals = $item->load_final();
+                    } else {
+                        $item_object = new grade_item($item, false);
+                        if (method_exists($item, 'load_final')) {
+                            $finals = $item->load_final();
+                        }
                     }
                 }
                 
index 7d079c2c94a3e86a332f36eecead6810457cf550..2959ad28a45a337b064876a8e15c33d29f9b27ff 100644 (file)
@@ -77,7 +77,7 @@ class grade_tree_test extends gradelib_test {
     }
     
     function test_grade_tree_insert_grade_item() {
-        $tree = new grade_tree($this->courseid);
+        $tree = new grade_tree($this->courseid, true);
         $grade_item = new grade_item($this->grade_items[2]);
         $element = array('object' => $grade_item);
         $tree->insert_element($element, 4);
@@ -163,7 +163,7 @@ class grade_tree_test extends gradelib_test {
     }
 
     function test_grade_tree_get_tree() {
-        $tree = new grade_tree($this->courseid);
+        $tree = new grade_tree($this->courseid, true);
         $this->assertEqual(58, count($tree->tree_filled, COUNT_RECURSIVE));
         $this->assertEqual(44, count($tree->tree_array, COUNT_RECURSIVE));
     }
@@ -214,7 +214,7 @@ class grade_tree_test extends gradelib_test {
         $tree->renumber();
         $this->assertTrue(empty($tree->tree_array[1]['children'][4])); 
         
-        $this->assertEqual(12, count($tree->tree_array, COUNT_RECURSIVE));
+        $this->assertEqual(9, count($tree->tree_array, COUNT_RECURSIVE));
         
         // Check the need_delete array
         $this->assertEqual(5, count($tree->need_delete));
@@ -259,4 +259,9 @@ class grade_tree_test extends gradelib_test {
         $tree->insert_element($element, 9);
 
     } 
+
+    function test_grade_tree_load_without_finals() {
+        $tree = new grade_tree($this->courseid);
+        $this->assertEqual(27, count($tree->tree_array, COUNT_RECURSIVE));
+    }
 }