From 968b596138ae4263f8a5a7d570f178bcf79b41e8 Mon Sep 17 00:00:00 2001 From: Clement Smith Date: Mon, 15 Feb 2016 07:28:04 -0600 Subject: [PATCH] MDL-51142 mod/assign: Fix erroneous submission status display This prevents display of submission time/date when the assignment submission record is in a new state. It also keeps the display of overdue assignments identical for those students who have viewed the assignment yet not submitted, for those students who have not viewed the assignment, and for those students who have not viewed the assignment yet the instructor has accessed the grading page. --- mod/assign/gradingtable.php | 15 +++++++---- mod/assign/renderer.php | 8 +++++- mod/assign/tests/locallib_test.php | 43 ++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 6 deletions(-) diff --git a/mod/assign/gradingtable.php b/mod/assign/gradingtable.php index 6e80cad0659..a4ed77bc0f8 100644 --- a/mod/assign/gradingtable.php +++ b/mod/assign/gradingtable.php @@ -905,7 +905,7 @@ class assign_grading_table extends table_sql implements renderable { $this->get_group_and_submission($row->id, $group, $submission, -1); if ($submission && $submission->timemodified && $submission->status != ASSIGN_SUBMISSION_STATUS_NEW) { $o = userdate($submission->timemodified); - } else if ($row->timesubmitted) { + } else if ($row->timesubmitted && $row->status != ASSIGN_SUBMISSION_STATUS_NEW) { $o = userdate($row->timesubmitted); } @@ -944,11 +944,16 @@ class assign_grading_table extends table_sql implements renderable { $status = $row->status; } + $displaystatus = $status; + if ($displaystatus == 'new') { + $displaystatus = ''; + } + if ($this->assignment->is_any_submission_plugin_enabled()) { - $o .= $this->output->container(get_string('submissionstatus_' . $status, 'assign'), - array('class'=>'submissionstatus' .$status)); - if ($due && $timesubmitted > $due) { + $o .= $this->output->container(get_string('submissionstatus_' . $displaystatus, 'assign'), + array('class'=>'submissionstatus' .$displaystatus)); + if ($due && $timesubmitted > $due && $row->status != ASSIGN_SUBMISSION_STATUS_NEW) { $usertime = format_time($timesubmitted - $due); $latemessage = get_string('submittedlateshort', 'assign', @@ -964,7 +969,7 @@ class assign_grading_table extends table_sql implements renderable { if (!$instance->markingworkflow) { if ($row->grade !== null && $row->grade >= 0) { $o .= $this->output->container(get_string('graded', 'assign'), 'submissiongraded'); - } else if (!$timesubmitted) { + } else if (!$timesubmitted || $row->status == ASSIGN_SUBMISSION_STATUS_NEW) { $now = time(); if ($due && ($now > $due)) { $overduestr = get_string('overdue', 'assign', format_time($now - $due)); diff --git a/mod/assign/renderer.php b/mod/assign/renderer.php index 7aa3c0dea04..f6838e08ba6 100644 --- a/mod/assign/renderer.php +++ b/mod/assign/renderer.php @@ -680,7 +680,13 @@ class mod_assign_renderer extends plugin_renderer_base { if ($submission) { $row = new html_table_row(); $cell1 = new html_table_cell(get_string('timemodified', 'assign')); - $cell2 = new html_table_cell(userdate($submission->timemodified)); + + if ($submission->status != ASSIGN_SUBMISSION_STATUS_NEW) { + $cell2 = new html_table_cell(userdate($submission->timemodified)); + } else { + $cell2 = new html_table_cell('-'); + } + $row->cells = array($cell1, $cell2); $t->data[] = $row; diff --git a/mod/assign/tests/locallib_test.php b/mod/assign/tests/locallib_test.php index 5b5ba635266..01f2b8020f4 100644 --- a/mod/assign/tests/locallib_test.php +++ b/mod/assign/tests/locallib_test.php @@ -229,6 +229,49 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase { $this->assertContains(get_string('submittedlateshort', 'assign', format_time(2*24*60*60 + $difftime)), $output); } + public function test_gradingtable_status_rendering() { + global $PAGE; + + // Setup the assignment. + $this->create_extra_users(); + $this->setUser($this->editingteachers[0]); + $time = time(); + $assign = $this->create_instance(array( + 'assignsubmission_onlinetext_enabled' => 1, + 'duedate' => $time - 4 * 24 * 60 * 60, + )); + $PAGE->set_url(new moodle_url('/mod/assign/view.php', array( + 'id' => $assign->get_course_module()->id, + 'action' => 'grading', + ))); + + // Check that the assignment is late. + $gradingtable = new assign_grading_table($assign, 1, '', 0, true); + $output = $assign->get_renderer()->render($gradingtable); + $this->assertContains(get_string('submissionstatus_', 'assign'), $output); + $difftime = time() - $time; + $this->assertContains(get_string('overdue', 'assign', format_time(4 * 24 * 60 * 60 + $difftime)), $output); + + // Simulate a student viewing the assignment without submitting. + $this->setUser($this->students[0]); + $submission = $assign->get_user_submission($this->students[0]->id, true); + $submission->status = ASSIGN_SUBMISSION_STATUS_NEW; + $assign->testable_update_submission($submission, $this->students[0]->id, true, false); + $submittedtime = time(); + + // Verify output. + $this->setUser($this->editingteachers[0]); + $gradingtable = new assign_grading_table($assign, 1, '', 0, true); + $output = $assign->get_renderer()->render($gradingtable); + $difftime = $submittedtime - $time; + $this->assertContains(get_string('overdue', 'assign', format_time(4 * 24 * 60 * 60 + $difftime)), $output); + + $document = new DOMDocument(); + $document->loadHTML($output); + $xpath = new DOMXPath($document); + $this->assertEquals('', $xpath->evaluate('string(//td[@id="mod_assign_grading_r0_c8"])')); + } + /** * Check that group submission information is rendered correctly in the * grading table.