]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-10251 finished hiding implementation for grades, items and categories + unit...
authorskodak <skodak>
Mon, 25 Jun 2007 15:29:31 +0000 (15:29 +0000)
committerskodak <skodak>
Mon, 25 Jun 2007 15:29:31 +0000 (15:29 +0000)
lib/grade/grade_category.php
lib/grade/grade_grades.php
lib/grade/grade_item.php
lib/grade/grade_tree.php
lib/simpletest/grade/simpletest/testgradegrades.php
lib/simpletest/grade/simpletest/testgradeitem.php

index 25495e1fed49df5034e9fe69623851183e6a1c52..5bf4521ea147a7a01d13084870ee39815535f112 100644 (file)
@@ -913,15 +913,11 @@ class grade_category extends grade_object {
     /**
      * Returns the locked state/date of the associated grade_item. This method is also available in
      * grade_item, for cases where the object type is not known.
-     * @return int 0, 1 or timestamp int(10)
+     * @return boolean
      */
     function is_locked() {
         $this->load_grade_item();
-        if (!empty($this->grade_item)) {
-            return $this->grade_item->is_locked();
-        } else {
-            return false;
-        }
+        return $this->grade_item->is_locked();
     }
 
     /**
@@ -932,27 +928,17 @@ class grade_category extends grade_object {
      */
     function set_locked($lockedstate) {
         $this->load_grade_item();
-
-        if (!empty($this->grade_item)) {
-            return $this->grade_item->set_locked($lockedstate);
-
-        } else {
-            return false;
-        }
+        return $this->grade_item->set_locked($lockedstate);
     }
 
     /**
      * Returns the hidden state/date of the associated grade_item. This method is also available in
-     * grade_item, for cases where the object type is not known.
-     * @return int 0, 1 or timestamp int(10)
+     * grade_item.
+     * @return boolean
      */
-    function get_hidden() {
+    function is_hidden() {
         $this->load_grade_item();
-        if (!empty($this->grade_item)) {
-            return $this->grade_item->hidden;
-        } else {
-            return false;
-        }
+        return $this->grade_item->is_hidden();
     }
 
     /**
@@ -963,12 +949,7 @@ class grade_category extends grade_object {
      */
     function set_hidden($hidden) {
         $this->load_grade_item();
-        if (!empty($this->grade_item)) {
-            $this->grade_item->hidden = $hidden;
-            return $this->grade_item->update();
-        } else {
-            return false;
-        }
+        $this->grade_item->set_hidden($hidden);
     }
 
     /**
index edec57607d7b5b7afd85e778cf8b31c4a3569f0b..981cbbe5d4b263f8e7a783bd2cfd1ed3db2b0f97 100644 (file)
@@ -159,7 +159,7 @@ class grade_grades extends grade_object {
     function is_locked() {
         $this->load_grade_item();
 
-        return $this->grade_item->is_locked() or !empty($this->locked);
+        return !empty($this->locked) or $this->grade_item->is_locked();
     }
 
     /**
@@ -204,6 +204,28 @@ class grade_grades extends grade_object {
         }
     }
 
+    /**
+     * Check grade lock status. Uses both grade item lock and grade lock.
+     * Internally any date in hidden field (including future ones) means hidden,
+     * the date is stored for logging purposes only.
+     *
+     * @return boolean true if hidden, false if not
+     */
+    function is_hidden() {
+        $this->load_grade_item();
+
+        return $this->hidden == 1 or $this->hidden > time() or $this->grade_item->is_hidden();
+    }
+
+    /**
+     * Set the hidden status of grade, 0 mean visible, 1 always hidden, number means date to hide until.
+     * @param int $hidden new hidden status
+     */
+    function set_hidden($hidden) {
+       $this->hidden = $hidden;
+       $this->update();
+    }
+
     /**
      * Finds and returns a grade_grades instance based on params.
      * @static
index 30949b7cfd6e0331f4b4e084c78a5d19bedb2fc9..ccf797c7065897b6994b6c54cf7ac3346d715d55 100644 (file)
@@ -192,7 +192,7 @@ class grade_item extends grade_object {
     var $sortorder = 0;
 
     /**
-     * Date until which to hide this grade_item. If null, 0 or false, grade_item is not hidden. Hiding prevents viewing.
+     * 0 if visible, 1 always hidden or date not visible until
      * @var int $hidden
      */
     var $hidden = 0;
@@ -418,12 +418,9 @@ class grade_item extends grade_object {
         }
 
         if (!empty($userid)) {
-
-            $grade = new grade_grades(array('itemid'=>$this->id, 'userid'=>$userid));
-            $grade->grade_item =& $this; // prevent db fetching of cached grade_item
-
-            if (!empty($grade->id) and $grade->is_locked()) {
-                return true;
+            if ($grade = grade_grades::fetch(array('itemid'=>$this->id, 'userid'=>$userid))) {
+                $grade->grade_item =& $this; // prevent db fetching of cached grade_item
+                return $grade->is_locked();
             }
         }
 
@@ -478,17 +475,17 @@ class grade_item extends grade_object {
 
             // this could be improved with direct SQL update
             $result = true;
-            $grades = $this->get_final();
-            foreach($grades as $g) {
-                $grade = new grade_grades($g, false);
-                $grade->grade_item =& $this;
+            if ($grades = grade_grades::fetch_all(array('itemid'=>$this->id))) {
+                foreach($grades as $grade) {
+                    $grade->grade_item =& $this;
 
-                if (!empty($grade->locktime) and $grade->locktime < time()) {
-                    $result = false; // can not unlock grade that should be already locked
-                }
+                    if (!empty($grade->locktime) and $grade->locktime < time()) {
+                        $result = false; // can not unlock grade that should be already locked
+                    }
 
-                if (!$grade->set_locked(false)) {
-                    $result = false;
+                    if (!$grade->set_locked(false)) {
+                        $result = false;
+                    }
                 }
             }
 
@@ -498,17 +495,43 @@ class grade_item extends grade_object {
     }
 
     /**
-     * Locks or unlocks this grade_item and (optionally) all its associated final grades.
-     * @param boolean $update_final Whether to update final grades too
-     * @param boolean $new_state Optional new state. Will use inverse of current state otherwise.
-     * @return int Number of final grades changed, or false if error occurred during update.
+     * Returns the hidden state of this grade_item (if the grade_item is hidden OR no specific
+     * $userid is given) or the hidden state of a specific grade within this item if a specific
+     * $userid is given and the grade_item is unhidden.
+     *
+     * @param int $userid
+     * @return boolean hidden state
      */
-    function toggle_hiding($update_final=false, $new_state=NULL) {
-        //TODO: implement new hiding
+    function is_hidden($userid=NULL) {
+        if ($this->hidden == 1 or $this->hidden > time()) {
+            return true;
+        }
 
-        return 0;
+        if (!empty($userid)) {
+            if ($grade = grade_grades::fetch(array('itemid'=>$this->id, 'userid'=>$userid))) {
+                $grade->grade_item =& $this; // prevent db fetching of cached grade_item
+                return $grade->is_hidden();
+            }
+        }
+
+        return false;
     }
 
+    /**
+     * Set the hidden status of grade_item and all grades, 0 mean visible, 1 always hidden, number means date to hide until.
+     * @param int $hidden new hidden status
+     */
+    function set_hidden($hidden) {
+        $this->hidden = $hidden;
+        $this->update();
+
+        if ($grades = grade_grades::fetch_all(array('itemid'=>$this->id))) {
+            foreach($grades as $grade) {
+                $grade->grade_item =& $this;
+                $grade->set_hidden($hidden);
+            }
+        }
+    }
 
     /**
      * Performs the necessary calculations on the grades_final referenced by this grade_item.
@@ -944,26 +967,6 @@ class grade_item extends grade_object {
         $this->categoryid = $parentid;
     }
 
-    /**
-     * Returns the hidden state/date of this grade_item. This method is also available in
-     * grade_category, for cases where the object type is not known.
-     * @return int 0, 1 or timestamp int(10)
-     */
-    function is_hidden() {
-        // to do
-        return $this->hidden;
-    }
-
-    /**
-     * Sets the grade_item's hidden variable and updates the grade_item.
-     * @param int $hidden 0, 1 or a timestamp int(10) after which date the item will be hidden.
-     * @return void
-     */
-    function set_hidden($hidden) {
-        $this->hidden = $hidden;
-        return $this->update();
-    }
-
     /**
      * If the old parent is set (after an update), this checks and returns whether it has any children. Important for
      * deleting childless categories.
@@ -1109,7 +1112,7 @@ class grade_item extends grade_object {
 
             // trigger grade_updated event notification
             $eventdata = new object();
-    
+
             $eventdata->source       = $source;
             $eventdata->itemid       = $this->id;
             $eventdata->courseid     = $this->courseid;
@@ -1120,7 +1123,7 @@ class grade_item extends grade_object {
             $eventdata->idnumber     = $this->idnumber;
             $eventdata->userid       = $grade->userid;
             $eventdata->rawgrade     = $grade->rawgrade;
-    
+
             // load existing text annotation
             if ($grade_text = $grade->load_text()) {
                 $eventdata->feedback          = $grade_text->feedback;
@@ -1128,7 +1131,7 @@ class grade_item extends grade_object {
                 $eventdata->information       = $grade_text->information;
                 $eventdata->informationformat = $grade_text->informationformat;
             }
-    
+
             events_trigger('grade_updated', $eventdata);
 
             return $grade;
index e07df04dc61c0a6041e8f821a7a36505c7c10f02..c05bd682489e9bdc6ea472cbe412ec2c533a9622 100644 (file)
@@ -1091,7 +1091,7 @@ class grade_tree {
 
                 // Add dimmed_text span around object name if set to hidden
                 $hide_show = 'hide';
-                if ($object->get_hidden()) {
+                if ($object->is_hidden()) {
                     $object_name = '<span class="dimmed_text">' . $object_name . '</span>';
                     $hide_show = 'show';
                 }
index 9fc632a890d73168a57aa4637570637dffa50125..ae84379e1a9cb3ae7ca632ecb59ef236305494e7 100755 (executable)
@@ -166,6 +166,36 @@ class grade_grades_test extends grade_test {
         $this->assertTrue($grade->is_locked());
     }
 
+    function test_grade_grades_set_hidden() {
+        $grade_item = new grade_item($this->grade_items[0]);
+        $grade = new grade_grades($grade_item->get_final(1));
+        $this->assertTrue(method_exists($grade, 'set_hidden'));
+
+        $this->assertEqual(0, $grade_item->hidden);
+        $this->assertEqual(0, $grade->hidden);
+
+        $grade->set_hidden(0);
+        $this->assertEqual(0, $grade->hidden);
+
+        $grade->set_hidden(1);
+        $this->assertEqual(1, $grade->hidden);
+    }
+
+    function test_grade_grades_is_hidden() {
+        $grade = new grade_grades($this->grade_grades[0]);
+        $this->assertTrue(method_exists($grade, 'is_hidden'));
+
+        $this->assertFalse($grade->is_hidden());
+        $grade->hidden = 1;
+        $this->assertTrue($grade->is_hidden());
+
+        $grade->hidden = time()-666;
+        $this->assertFalse($grade->is_hidden());
+
+        $grade->hidden = time()+666;
+        $this->assertTrue($grade->is_hidden());
+    }
+
 
 }
 ?>
index 4d24aa288223c4df87f640e2c34a5fce8140bc3c..6f799d1c8c9b15e4c4ae7c7034d233c02b409e02 100755 (executable)
@@ -343,6 +343,44 @@ class grade_item_test extends grade_test {
         $this->assertTrue($grade_item->is_locked(1));\r
     }\r
 \r
+    /**\r
+     * Test hiding of grade items\r
+     */\r
+    function test_grade_item_set_hidden() {\r
+        $grade_item = new grade_item($this->grade_items[0]);\r
+        $this->assertTrue(method_exists($grade_item, 'set_hidden'));\r
+\r
+        $grade = new grade_grades($grade_item->get_final(1));\r
+        $this->assertEqual(0, $grade_item->hidden);\r
+        $this->assertEqual(0, $grade->hidden);\r
+\r
+        $grade_item->set_hidden(666);\r
+        $grade = new grade_grades($grade_item->get_final(1));\r
+\r
+        $this->assertEqual(666, $grade_item->hidden);\r
+        $this->assertEqual(666, $grade->hidden);\r
+    }\r
+\r
+    function test_grade_item_is_hidden() {\r
+        $grade_item = new grade_item($this->grade_items[0]);\r
+        $this->assertTrue(method_exists($grade_item, 'is_hidden'));\r
+\r
+        $this->assertFalse($grade_item->is_hidden());\r
+        $this->assertFalse($grade_item->is_hidden(1));\r
+\r
+        $grade_item->set_hidden(1);\r
+        $this->assertTrue($grade_item->is_hidden());\r
+        $this->assertTrue($grade_item->is_hidden(1));\r
+\r
+        $grade_item->set_hidden(666);\r
+        $this->assertFalse($grade_item->is_hidden());\r
+        $this->assertFalse($grade_item->is_hidden(1));\r
+\r
+        $grade_item->set_hidden(time()+666);\r
+        $this->assertTrue($grade_item->is_hidden());\r
+        $this->assertTrue($grade_item->is_hidden(1));\r
+    }\r
+\r
     function test_grade_item_depends_on() {\r
         $grade_item = new grade_item($this->grade_items[1]);\r
 \r
@@ -366,27 +404,6 @@ class grade_item_test extends grade_test {
         $this->assertEqual($res, $deps);\r
     }\r
 \r
-/*\r
-    function test_grade_item_toggle_hiding() {\r
-        $grade_item = new grade_item($this->grade_items[0]);\r
-        $this->assertTrue(method_exists($grade_item, 'toggle_hiding'));\r
-\r
-        $this->assertFalse($grade_item->hidden);\r
-        $this->assertEqual(0, $grade_item->toggle_hiding());\r
-        $this->assertTrue($grade_item->hidden);\r
-        $grade_item->load_final();\r
-        $this->assertFalse($grade_item->grade_grades[1]->hidden);\r
-\r
-        $grade_item->hidden = false;\r
-        $this->assertEqual(3, $grade_item->toggle_hiding(true));\r
-        $this->assertTrue($grade_item->hidden);\r
-        $this->assertTrue($grade_item->grade_grades[1]->hidden);\r
-        $this->assertTrue($grade_item->grade_gra\r
-        des[2]->hidden);\r
-        $this->assertTrue($grade_item->grade_grades[3]->hidden);\r
-    }\r
-*/\r
-\r
     function test_grade_item_is_calculated() {\r
         $grade_item = new grade_item($this->grade_items[1]);\r
         $this->assertTrue(method_exists($grade_item, 'is_calculated'));\r