]> git.mjollnir.org Git - moodle.git/commitdiff
improved hiding support in grade/
authorskodak <skodak>
Thu, 9 Aug 2007 16:19:06 +0000 (16:19 +0000)
committerskodak <skodak>
Thu, 9 Aug 2007 16:19:06 +0000 (16:19 +0000)
grade/edit/tree/action.php
grade/edit/tree/grade.php
grade/edit/tree/grade_form.php
grade/edit/tree/item.php
grade/edit/tree/item_form.php
grade/edit/tree/outcomeitem.php
grade/edit/tree/outcomeitem_form.php
grade/lib.php
lib/grade/grade_category.php
lib/grade/grade_grade.php
lib/grade/grade_item.php

index a239781d8780fa409515619aa26def5bb5c18906..641881f62fb2d2352db1143132fdf393ba571a5d 100644 (file)
@@ -38,7 +38,7 @@ switch ($action) {
             if ($type == 'grade' and empty($object->id)) {
                 $object->insert();
             }
-            $object->set_hidden(1);
+            $object->set_hidden(1, true);
         }
         break;
 
@@ -50,7 +50,7 @@ switch ($action) {
             if ($type == 'grade' and empty($object->id)) {
                 $object->insert();
             }
-            $object->set_hidden(0);
+            $object->set_hidden(0, true);
         }
         break;
 
index 8e5bb5f48a37fcdec1df93ea558ad75a02db4d19..bef8cf72e4b0722abc656540a471f03a0aa7a607 100644 (file)
@@ -90,11 +90,15 @@ if ($grade = get_record('grade_grades', 'itemid', $grade_item->id, 'userid', $us
 
     if ($grade->hidden > 1) {
         $grade->hiddenuntil = $grade->hidden;
-        $grade->hidden = 0;
+        $grade->hidden = 1;
     } else {
         $grade->hiddenuntil = 0;
     }
 
+    if ($grade_item->is_hidden()) {
+        $grade->hidden = 1;
+    }
+
     if ($grade_item->is_locked()) {
         $grade->locked = 1;
     }
@@ -131,14 +135,21 @@ if ($mform->is_cancelled()) {
     $grade_grade->grade_item =& $grade_item; // no db fetching
 
     if (has_capability('moodle/grade:manage', $context) or has_capability('moodle/grade:hide', $context)) {
-        if (empty($data->hidden)) {
-            if (empty($data->hiddenuntil)) {
-                $grade_grade->set_hidden(0);
+        $hidden      = empty($data->hidden) ? 0: $data->hidden;
+        $hiddenuntil = empty($data->hiddenuntil) ? 0: $data->hiddenuntil;
+
+        if ($grade_item->is_hidden()) {
+            if ($old_grade_grade->hidden == 1 and $hiddenuntil == 0) {
+                //nothing to do - grade was originally hidden, we want to keep it that way
             } else {
-                $grade_grade->set_hidden($data->hiddenuntil);
+                $grade_grade->set_hidden($hiddenuntil);
             }
         } else {
-            $grade_grade->set_hidden(1);
+            if ($hiddenuntil) {
+                $grade_grade->set_hidden($hiddenuntil);
+            } else {
+                $grade_grade->set_hidden($hidden); // checkbox data might be undefined
+            }
         }
     }
 
index 2a87ce8ac06e87858a0bf3827d9384c138c6018e..84d980a71eba518db8294dc70859a6102f69badb 100755 (executable)
@@ -59,7 +59,7 @@ class edit_grade_form extends moodleform {
         $mform->setHelpButton('hidden', array('hidden', get_string('hidden', 'grades'), 'grade'));
         $mform->addElement('date_time_selector', 'hiddenuntil', get_string('hiddenuntil', 'grades'), array('optional'=>true));
         $mform->setHelpButton('hiddenuntil', array('hiddenuntil', get_string('hiddenuntil', 'grades'), 'grade'));
-        $mform->disabledIf('hiddenuntil', 'hidden', 'checked');
+        $mform->disabledIf('hidden', 'hiddenuntil[off]', 'notchecked');
 
         /// locking
         $mform->addElement('advcheckbox', 'locked', get_string('locked', 'grades'));
@@ -136,6 +136,10 @@ class edit_grade_form extends moodleform {
 
         $old_grade_grade = new grade_grade(array('itemid'=>$grade_item->id, 'userid'=>$userid));
 
+        if ($grade_item->is_hidden()) {
+            $mform->hardFreeze('hidden');
+        }
+
         if ($old_grade_grade->is_locked()) {
             if ($grade_item->is_locked()) {
                 $mform->hardFreeze('locked');
index 3919c03b7c1553cd53a373afc28587b3ddc8c615..3dec92cc661216abda1baea14eacd36202c33ee1 100644 (file)
@@ -78,11 +78,11 @@ if ($data = $mform->get_data(false)) {
         $grade_item->update();
     }
 
-    // update hiding flag (in grades too if needed)
-    if (empty($hidden)) {
-        $grade_item->set_hidden($hiddenuntil);
+    // update hiding flag
+    if ($hiddenuntil) {
+        $grade_item->set_hidden($hiddenuntil, false);
     } else {
-        $grade_item->set_hidden(1);
+        $grade_item->set_hidden($hidden, false);
     }
 
     $grade_item->set_locktime($locktime); // locktime first - it might be removed when unlocking
index f1d441a780c41adaa0afa8b5823dd4d16ba609ce..a5c4effbf3ee17215c80cf4c8c5c142c966808ef 100644 (file)
@@ -89,7 +89,7 @@ class edit_item_form extends moodleform {
         $mform->setHelpButton('hidden', array('hidden', get_string('hidden', 'grades'), 'grade'));
         $mform->addElement('date_time_selector', 'hiddenuntil', get_string('hiddenuntil', 'grades'), array('optional'=>true));
         $mform->setHelpButton('hiddenuntil', array('hiddenuntil', get_string('hiddenuntil', 'grades'), 'grade'));
-        $mform->disabledIf('hiddenuntil', 'hidden', 'checked');
+        $mform->disabledIf('hidden', 'hiddenuntil[off]', 'notchecked');
 
         /// locking
         $mform->addElement('advcheckbox', 'locked', get_string('locked', 'grades'));
index 1fe6457ed7c3fce83d024c16d7a875ac298a7895..37a79134de42cf94248075038db0fdc5b89d4a7f 100644 (file)
@@ -130,11 +130,11 @@ if ($data = $mform->get_data(false)) {
         $grade_item->update();
     }
 
-    // update hiding flag (in grades too if needed)
-    if (empty($hidden)) {
-        $grade_item->set_hidden($hiddenuntil);
+    // update hiding flag
+    if ($hiddenuntil) {
+        $grade_item->set_hidden($hiddenuntil, false);
     } else {
-        $grade_item->set_hidden(1);
+        $grade_item->set_hidden($hidden, false);
     }
 
     $grade_item->set_locktime($locktime); // locktime first - it might be removed when unlocking
index 2d63253a0b221de0d0816eb17caee3b8227d1bf2..86ef536da29df825023588467f4d20e648b17335 100644 (file)
@@ -57,7 +57,7 @@ class edit_outcomeitem_form extends moodleform {
         $mform->setHelpButton('hidden', array('hidden', get_string('hidden', 'grades'), 'grade'));
         $mform->addElement('date_time_selector', 'hiddenuntil', get_string('hiddenuntil', 'grades'), array('optional'=>true));
         $mform->setHelpButton('hiddenuntil', array('hiddenuntil', get_string('hiddenuntil', 'grades'), 'grade'));
-        $mform->disabledIf('hiddenuntil', 'hidden', 'checked');
+        $mform->disabledIf('hidden', 'hiddenuntil[off]', 'notchecked');
 
         //locking
         $mform->addElement('advcheckbox', 'locked', get_string('locked', 'grades'));
index 8f9c4e4afaeae8fdd7edc7d6199224d25d362733..c7dd0d19df9471342c52149134712fa376b7bfa8 100644 (file)
@@ -825,9 +825,9 @@ class grade_tree {
             $icon = 'show';
             $tooltip = '';
 
-            if ($element['object']->hidden > 1) { // Change the icon and add a tooltip showing the date
+            if ($element['type'] != 'category' and $element['object']->get_hidden() > 1) { // Change the icon and add a tooltip showing the date
                 $icon = 'hiddenuntil';
-                $tooltip = userdate($element['object']->hidden);
+                $tooltip = userdate($element['object']->get_hidden());
             }
 
             $url     = $CFG->wwwroot.'/grade/edit/tree/action.php?id='.$this->courseid.'&amp;action=show&amp;sesskey='.sesskey()
index 2b1ffd9f617557e460dfb3d3ed8ef1afdd3636ae..5ab5293d03d61db49661e034456819e226120e54 100644 (file)
@@ -1053,22 +1053,24 @@ class grade_category extends grade_object {
      * Sets the grade_item's hidden variable and updates the grade_item.
      * Method named after grade_item::set_hidden().
      * @param int $hidden 0, 1 or a timestamp int(10) after which date the item will be hidden.
+     * @param boolean $cascade apply to child objects too
      * @return void
      */
-    function set_hidden($hidden) {
+    function set_hidden($hidden, $cascade=false) {
         $this->load_grade_item();
         $this->grade_item->set_hidden($hidden);
-        if ($children = grade_item::fetch_all(array('categoryid'=>$this->id))) {
-            foreach($children as $child) {
-                $child->set_hidden($hidden);
+        if ($cascade) {
+            if ($children = grade_item::fetch_all(array('categoryid'=>$this->id))) {
+                foreach($children as $child) {
+                    $child->set_hidden($hidden, $cascade);
+                }
             }
-        }
-        if ($children = grade_category::fetch_all(array('parent'=>$this->id))) {
-            foreach($children as $child) {
-                $child->set_hidden($hidden);
+            if ($children = grade_category::fetch_all(array('parent'=>$this->id))) {
+                foreach($children as $child) {
+                    $child->set_hidden($hidden, $cascade);
+                }
             }
         }
     }
-
 }
 ?>
index ecb43047d83d0251dbb9d03e4aa6c02d75a21294..b3d95ae73a9bbc8a8b3b861dcce405ad8f70c473 100644 (file)
@@ -356,24 +356,49 @@ class grade_grade 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.
-     *
-     * @param object $grade_item An optional grade_item given to avoid having to reload one from the DB
+     * Check grade hidden status. Uses data from both grade item and grade.
      * @return boolean true if hidden, false if not
      */
-    function is_hidden($grade_item=null) {
-        $this->load_grade_item($grade_item);
+    function is_hidden() {
+        $this->load_grade_item();
 
-        return $this->hidden == 1 or $this->hidden > time() or $this->grade_item->is_hidden();
+        return $this->hidden == 1 or ($this->hidden != 0 and $this->hidden > time()) or $this->grade_item->is_hidden();
+    }
+
+    /**
+     * Check grade hidden status. Uses data from both grade item and grade.
+     * @return int 0 means visible, 1 hidden always, timestamp hidden until
+     */
+    function get_hidden() {
+        $this->load_grade_item();
+
+        $item_hidden = $this->grade_item->get_hidden();
+
+        if ($item_hidden == 1) {
+            return 1;
+
+        } else if ($item_hidden == 0) {
+            return $this->hidden;
+
+        } else {
+            if ($this->hidden == 0) {
+                return $item_hidden;
+            } else if ($this->hidden == 1) {
+                return 1;
+            } else if ($this->hidden > $item_hidden) {
+                return $this->hidden;
+            } else {
+                return $item_hidden;
+            }
+        }
     }
 
     /**
      * Set the hidden status of grade, 0 mean visible, 1 always hidden, number means date to hide until.
+     * @param boolean $cascade ignored
      * @param int $hidden new hidden status
      */
-    function set_hidden($hidden) {
+    function set_hidden($hidden, $cascade=false) {
        $this->hidden = $hidden;
        $this->update();
     }
index 1dcf587b9a3c320e28e2479ac9d3bc43e3822cf8..fc37d2d87e7d588edfbabf95f46fe43f6c6dc581 100644 (file)
@@ -514,41 +514,37 @@ class grade_item extends grade_object {
     }
 
     /**
-     * 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
+     * Returns the hidden state of this grade_item
      * @return boolean hidden state
      */
     function is_hidden($userid=NULL) {
-        if ($this->hidden == 1 or $this->hidden > time()) {
-            return true;
-        }
-
-        if (!empty($userid)) {
-            if ($grade = grade_grade::fetch(array('itemid'=>$this->id, 'userid'=>$userid))) {
-                $grade->grade_item =& $this; // prevent db fetching of cached grade_item
-                return $grade->is_hidden();
-            }
-        }
+        return ($this->hidden == 1 or ($this->hidden != 0 and $this->hidden > time()));
+    }
 
-        return false;
+    /**
+     * Check grade item hidden status.
+     * @return int 0 means visible, 1 hidden always, timestamp hidden until
+     */
+    function get_hidden() {
+        return $this->hidden;
     }
 
     /**
      * 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
+     * @param boolean $cascade apply to child objects too
      * @return void
      */
-    function set_hidden($hidden) {
+    function set_hidden($hidden, $cascade=false) {
         $this->hidden = $hidden;
         $this->update();
 
-        if ($grades = grade_grade::fetch_all(array('itemid'=>$this->id))) {
-            foreach($grades as $grade) {
-                $grade->grade_item =& $this;
-                $grade->set_hidden($hidden);
+        if ($cascade) {
+            if ($grades = grade_grade::fetch_all(array('itemid'=>$this->id))) {
+                foreach($grades as $grade) {
+                    $grade->grade_item =& $this;
+                    $grade->set_hidden($hidden, $cascade);
+                }
             }
         }
     }