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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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 . '&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 . '&action=grading">' .
|
||||
get_string('numberofsubmissionsneedgradinglabel', 'assign', 1) . '</a>', $summary);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user