From 232b26f021db0a6faa47b99d889f15931d8b7b10 Mon Sep 17 00:00:00 2001 From: Clement Smith Date: Mon, 15 Feb 2016 07:28:04 -0600 Subject: [PATCH 1/2] 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 6dfd26c01ce..71c3bcba52b 100644 --- a/mod/assign/gradingtable.php +++ b/mod/assign/gradingtable.php @@ -901,7 +901,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); } @@ -940,11 +940,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', @@ -960,7 +965,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 7d33d743c51..84178506568 100644 --- a/mod/assign/renderer.php +++ b/mod/assign/renderer.php @@ -870,7 +870,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 5419f3b61e8..f691574c00a 100644 --- a/mod/assign/tests/locallib_test.php +++ b/mod/assign/tests/locallib_test.php @@ -277,6 +277,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. From c78e567c5a6c2a01738124bf11ed8639db6fe9ba Mon Sep 17 00:00:00 2001 From: Damyon Wiese Date: Mon, 2 May 2016 16:41:10 +0800 Subject: [PATCH 2/2] MDL-51142 assign: Fix for group assignments with NEW status --- mod/assign/gradingtable.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mod/assign/gradingtable.php b/mod/assign/gradingtable.php index 71c3bcba52b..2c5b5bd862c 100644 --- a/mod/assign/gradingtable.php +++ b/mod/assign/gradingtable.php @@ -949,7 +949,7 @@ class assign_grading_table extends table_sql implements renderable { $o .= $this->output->container(get_string('submissionstatus_' . $displaystatus, 'assign'), array('class'=>'submissionstatus' .$displaystatus)); - if ($due && $timesubmitted > $due && $row->status != ASSIGN_SUBMISSION_STATUS_NEW) { + if ($due && $timesubmitted > $due && $status != ASSIGN_SUBMISSION_STATUS_NEW) { $usertime = format_time($timesubmitted - $due); $latemessage = get_string('submittedlateshort', 'assign', @@ -965,7 +965,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 || $row->status == ASSIGN_SUBMISSION_STATUS_NEW) { + } else if (!$timesubmitted || $status == ASSIGN_SUBMISSION_STATUS_NEW) { $now = time(); if ($due && ($now > $due)) { $overduestr = get_string('overdue', 'assign', format_time($now - $due));