/** * Sets the grade_item's hidden variable and updates the grade_item. * * Overrides grade_item::set_hidden() to add cascading of the hidden value to grade items in this grade category * * @param int $hidden 0 mean always visible, 1 means always hidden and a number > 1 is a timestamp to hide until * @param bool $cascade apply to child objects too */ public function set_hidden($hidden, $cascade = false) { $this->load_grade_item(); //this hides the associated grade item (the course total) $this->grade_item->set_hidden($hidden, $cascade); //this hides the category itself and everything it contains parent::set_hidden($hidden, $cascade); if ($cascade) { if ($children = grade_item::fetch_all(array('categoryid' => $this->id))) { foreach ($children as $child) { if ($child->can_control_visibility()) { $child->set_hidden($hidden, $cascade); } } } if ($children = grade_category::fetch_all(array('parent' => $this->id))) { foreach ($children as $child) { $child->set_hidden($hidden, $cascade); } } } //if marking category visible make sure parent category is visible MDL-21367 if (!$hidden) { $category_array = grade_category::fetch_all(array('id' => $this->parent)); if ($category_array && array_key_exists($this->parent, $category_array)) { $category = $category_array[$this->parent]; //call set_hidden on the category regardless of whether it is hidden as its parent might be hidden //if($category->is_hidden()) { $category->set_hidden($hidden, false); //} } } }
public function test_show_student_summary() { global $CFG, $PAGE; $this->setUser($this->editingteachers[0]); $assign = $this->create_instance(); $PAGE->set_url(new moodle_url('/mod/assign/view.php', array('id' => $assign->get_course_module()->id))); // No feedback should be available because this student has not been graded. $this->setUser($this->students[0]); $output = $assign->view_student_summary($this->students[0], true); $this->assertEquals(false, strpos($output, 'Feedback'), 'Do not show feedback if there is no grade'); // Simulate adding a grade. $this->setUser($this->teachers[0]); $data = new stdClass(); $data->grade = '50.0'; $assign->testable_apply_grade_to_user($data, $this->students[0]->id, 0); // Now we should see the feedback. $this->setUser($this->students[0]); $output = $assign->view_student_summary($this->students[0], true); $this->assertNotEquals(false, strpos($output, 'Feedback'), 'Show feedback if there is a grade'); // Now hide the grade in gradebook. $this->setUser($this->teachers[0]); require_once $CFG->libdir . '/gradelib.php'; $gradeitem = new grade_item(array('itemtype' => 'mod', 'itemmodule' => 'assign', 'iteminstance' => $assign->get_instance()->id, 'courseid' => $this->course->id)); $gradeitem->set_hidden(1, false); // No feedback should be available because the grade is hidden. $this->setUser($this->students[0]); $output = $assign->view_student_summary($this->students[0], true); $this->assertEquals(false, strpos($output, 'Feedback'), 'Do not show feedback if the grade is hidden in the gradebook'); // Do the same but add feedback. $assign = $this->create_instance(array('assignfeedback_comments_enabled' => 1)); $this->setUser($this->teachers[0]); $grade = $assign->get_user_grade($this->students[0]->id, true); $data = new stdClass(); $data->assignfeedbackcomments_editor = array('text' => 'Tomato sauce', 'format' => FORMAT_MOODLE); $plugin = $assign->get_feedback_plugin_by_type('comments'); $plugin->save($grade, $data); // Should have feedback but no grade. $this->setUser($this->students[0]); $output = $assign->view_student_summary($this->students[0], true); $this->assertNotEquals(false, strpos($output, 'Feedback'), 'Show feedback even if there is no grade'); $this->assertEquals(false, strpos($output, 'Grade'), 'Do not show grade when there is no grade.'); $this->assertEquals(false, strpos($output, 'Graded on'), 'Do not show graded date when there is no grade.'); // Now hide the grade in gradebook. $this->setUser($this->teachers[0]); $gradeitem = new grade_item(array('itemtype' => 'mod', 'itemmodule' => 'assign', 'iteminstance' => $assign->get_instance()->id, 'courseid' => $this->course->id)); $gradeitem->set_hidden(1, false); // No feedback should be available because the grade is hidden. $this->setUser($this->students[0]); $output = $assign->view_student_summary($this->students[0], true); $this->assertEquals(false, strpos($output, 'Feedback'), 'Do not show feedback if the grade is hidden in the gradebook'); }