Exemple #1
0
 /**
  * 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');
 }