Merge branch 'MDL-69723-master' of https://github.com/martygilbert/moodle

This commit is contained in:
Ilya Tregubov 2021-10-26 16:32:52 +02:00
commit 92fa7e150a
5 changed files with 90 additions and 22 deletions

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;
}

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';

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);

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];
}

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);
}
}