MDL-69723 assign: Add # need grading to summary

For teachers viewing the assignment summary (/mod/assign/index.php),
it shows a '-' in the 'Grade' column. Instead of showing a '-', display
the number of items that need grading.

Augment by creating a link to the grading page so that teachers can see
the outstanding assignments more quickly.

Also attempted to write phpunit tests that verify values for ungraded
submissions for teachers.
This commit is contained in:
Marty
2021-10-26 09:58:02 -04:00
parent 2b2897bf10
commit 424fecb7b0
5 changed files with 90 additions and 22 deletions
+10 -2
View File
@@ -1345,6 +1345,14 @@ class renderer extends \plugin_renderer_base {
$info['cmname']);
$due = $info['timedue'] ? userdate($info['timedue']) : '-';
if ($info['cangrade']) {
$params['action'] = 'grading';
$gradeinfo = \html_writer::link(new \moodle_url('/mod/assign/view.php', $params),
get_string('numberofsubmissionsneedgradinglabel', 'assign', $info['gradeinfo']));
} else {
$gradeinfo = $info['gradeinfo'];
}
$printsection = '';
if ($indexsummary->usesections) {
if ($info['sectionname'] !== $currentsection) {
@@ -1359,9 +1367,9 @@ class renderer extends \plugin_renderer_base {
}
if ($indexsummary->usesections) {
$row = array($printsection, $link, $due, $info['submissioninfo'], $info['gradeinfo']);
$row = [$printsection, $link, $due, $info['submissioninfo'], $gradeinfo];
} else {
$row = array($link, $due, $info['submissioninfo'], $info['gradeinfo']);
$row = [$link, $due, $info['submissioninfo'], $gradeinfo];
}
$table->data[] = $row;
}
+1
View File
@@ -393,6 +393,7 @@ $string['numberofdraftsubmissions'] = 'Drafts';
$string['numberofparticipants'] = 'Participants';
$string['numberofsubmittedassignments'] = 'Submitted';
$string['numberofsubmissionsneedgrading'] = 'Needs grading';
$string['numberofsubmissionsneedgradinglabel'] = 'Needs grading: {$a}';
$string['numberofteams'] = 'Groups';
$string['offline'] = 'No online submissions required';
$string['open'] = 'Open';
+17 -13
View File
@@ -3132,10 +3132,9 @@ class assign {
$assignment->update_effective_access($USER->id);
$timedue = $assignment->get_instance()->duedate;
if (has_capability('mod/assign:grade', $context)) {
$submitted = $assignment->count_submissions_with_status(ASSIGN_SUBMISSION_STATUS_SUBMITTED);
} else if (has_capability('mod/assign:submit', $context)) {
if (has_capability('mod/assign:submit', $context) &&
!has_capability('moodle/site:config', $context)) {
$cangrade = false;
if ($assignment->get_instance()->teamsubmission) {
$usersubmission = $assignment->get_group_submission($USER->id, 0, false);
} else {
@@ -3147,17 +3146,22 @@ class assign {
} else {
$submitted = get_string('submissionstatus_', 'assign');
}
}
$gradinginfo = grade_get_grades($course->id, 'mod', 'assign', $cm->instance, $USER->id);
if (isset($gradinginfo->items[0]->grades[$USER->id]) &&
!$gradinginfo->items[0]->grades[$USER->id]->hidden ) {
$grade = $gradinginfo->items[0]->grades[$USER->id]->str_grade;
} else {
$grade = '-';
$gradinginfo = grade_get_grades($course->id, 'mod', 'assign', $cm->instance, $USER->id);
if (isset($gradinginfo->items[0]->grades[$USER->id]) &&
!$gradinginfo->items[0]->grades[$USER->id]->hidden ) {
$grade = $gradinginfo->items[0]->grades[$USER->id]->str_grade;
} else {
$grade = '-';
}
} else if (has_capability('mod/assign:grade', $context)) {
$submitted = $assignment->count_submissions_with_status(ASSIGN_SUBMISSION_STATUS_SUBMITTED);
$grade = $assignment->count_submissions_need_grading();
$cangrade = true;
}
$courseindexsummary->add_assign_info($cm->id, $cm->get_formatted_name(), $sectionname, $timedue, $submitted, $grade);
$courseindexsummary->add_assign_info($cm->id, $cm->get_formatted_name(),
$sectionname, $timedue, $submitted, $grade, $cangrade);
}
$o .= $this->get_renderer()->render($courseindexsummary);
+9 -7
View File
@@ -634,14 +634,16 @@ class assign_course_index_summary implements renderable {
* @param string $submissioninfo - A string with either the number of submitted assignments, or the
* status of the current users submission depending on capabilities.
* @param string $gradeinfo - The current users grade if they have been graded and it is not hidden.
* @param bool cangrade - Does this user have grade capability?
*/
public function add_assign_info($cmid, $cmname, $sectionname, $timedue, $submissioninfo, $gradeinfo) {
$this->assignments[] = array('cmid'=>$cmid,
'cmname'=>$cmname,
'sectionname'=>$sectionname,
'timedue'=>$timedue,
'submissioninfo'=>$submissioninfo,
'gradeinfo'=>$gradeinfo);
public function add_assign_info($cmid, $cmname, $sectionname, $timedue, $submissioninfo, $gradeinfo, $cangrade = false) {
$this->assignments[] = ['cmid' => $cmid,
'cmname' => $cmname,
'sectionname' => $sectionname,
'timedue' => $timedue,
'submissioninfo' => $submissioninfo,
'gradeinfo' => $gradeinfo,
'cangrade' => $cangrade];
}
+53
View File
@@ -4367,4 +4367,57 @@ Anchor link 2:<a title=\"bananas\" href=\"../logo-240x60.gif\">Link text</a>
$this->assertNotEmpty($event2);
$this->assertSame('This one should be re-created', $event2->description);
}
/**
* Test submissions that need grading output after one ungraded submission
*/
public function test_submissions_need_grading() {
global $PAGE;
$this->resetAfterTest();
$course = $this->getDataGenerator()->create_course();
$teacher = $this->getDataGenerator()->create_and_enrol($course, 'teacher');
$student = $this->getDataGenerator()->create_and_enrol($course, 'student');
// Setup the assignment.
$this->setUser($teacher);
$time = time();
$assign = $this->create_instance($course, [
'assignsubmission_onlinetext_enabled' => 1,
]);
$PAGE->set_url(new moodle_url('/mod/assign/view.php', [
'id' => $assign->get_course_module()->id,
'action' => 'grading',
]));
// Check for 0 submissions.
$summary = $assign->view('viewcourseindex');
$this->assertStringContainsString('/mod/assign/view.php?id=' .
$assign->get_course_module()->id . '&amp;action=grading">' .
get_string('numberofsubmissionsneedgradinglabel', 'assign', 0) . '</a>', $summary);
// Simulate an assignment submission.
$this->setUser($student);
$submission = $assign->get_user_submission($student->id, true);
$submission->status = ASSIGN_SUBMISSION_STATUS_SUBMITTED;
$assign->testable_update_submission($submission, $student->id, true, false);
$data = new stdClass();
$data->onlinetext_editor = [
'itemid' => file_get_unused_draft_itemid(),
'text' => 'Submission text',
'format' => FORMAT_MOODLE,
];
$plugin = $assign->get_submission_plugin_by_type('onlinetext');
$plugin->save($submission, $data);
// Check for 1 ungraded submission.
$this->setUser($teacher);
$summary = $assign->view('viewcourseindex');
$this->assertStringContainsString('/mod/assign/view.php?id=' .
$assign->get_course_module()->id . '&amp;action=grading">' .
get_string('numberofsubmissionsneedgradinglabel', 'assign', 1) . '</a>', $summary);
}
}