From 0d5d8ee56a31b8b575d0720f1e6106052f9323e2 Mon Sep 17 00:00:00 2001 From: Damyon Wiese Date: Fri, 30 Sep 2016 12:37:13 +0800 Subject: [PATCH] MDL-45969 editpdf: The logic for showing a previous attempt is wrong It originally was only ever going to show static pdfs for older versions, but this doesn't make sense in the UI for 3.1. --- mod/assign/feedback/editpdf/ajax.php | 10 +-- .../editpdf/classes/document_services.php | 12 ++-- mod/assign/feedback/editpdf/locallib.php | 2 +- .../behat/view_previous_annotations.feature | 66 +++++++++++++++++++ mod/assign/locallib.php | 4 +- 5 files changed, 81 insertions(+), 13 deletions(-) create mode 100644 mod/assign/feedback/editpdf/tests/behat/view_previous_annotations.feature diff --git a/mod/assign/feedback/editpdf/ajax.php b/mod/assign/feedback/editpdf/ajax.php index c66b726e4d3..400947786fd 100644 --- a/mod/assign/feedback/editpdf/ajax.php +++ b/mod/assign/feedback/editpdf/ajax.php @@ -72,7 +72,7 @@ if ($action == 'loadallpages') { $response->pagecount = count($pages); $response->pages = array(); - $grade = $assignment->get_user_grade($userid, true); + $grade = $assignment->get_user_grade($userid, true, $attemptnumber); // The readonly files are stored in a different file area. $filearea = document_services::PAGE_IMAGE_FILEAREA; @@ -111,7 +111,7 @@ if ($action == 'loadallpages') { $response = new stdClass(); $response->errors = array(); - $grade = $assignment->get_user_grade($userid, true); + $grade = $assignment->get_user_grade($userid, true, $attemptnumber); $pagejson = required_param('page', PARAM_RAW); $page = json_decode($pagejson); @@ -132,7 +132,7 @@ if ($action == 'loadallpages') { require_capability('mod/assign:grade', $context); $response = new stdClass(); - $grade = $assignment->get_user_grade($userid, true); + $grade = $assignment->get_user_grade($userid, true, $attemptnumber); $file = document_services::generate_feedback_document($assignment, $userid, $attemptnumber); $response->url = ''; @@ -172,7 +172,7 @@ if ($action == 'loadallpages') { } else if ($action == 'revertchanges') { require_capability('mod/assign:grade', $context); - $grade = $assignment->get_user_grade($userid, true); + $grade = $assignment->get_user_grade($userid, true, $attemptnumber); $result = page_editor::revert_drafts($gradeid); @@ -190,7 +190,7 @@ if ($action == 'loadallpages') { } else if ($action == 'deletefeedbackdocument') { require_capability('mod/assign:grade', $context); - $grade = $assignment->get_user_grade($userid, true); + $grade = $assignment->get_user_grade($userid, true, $attemptnumber); $result = document_services::delete_feedback_document($assignment, $userid, $attemptnumber); $result = $result && page_editor::unrelease_drafts($grade->id); diff --git a/mod/assign/feedback/editpdf/classes/document_services.php b/mod/assign/feedback/editpdf/classes/document_services.php index 1b57ae1bd07..be41cfe94c8 100644 --- a/mod/assign/feedback/editpdf/classes/document_services.php +++ b/mod/assign/feedback/editpdf/classes/document_services.php @@ -161,9 +161,9 @@ EOD; $files = array(); if ($assignment->get_instance()->teamsubmission) { - $submission = $assignment->get_group_submission($userid, 0, false); + $submission = $assignment->get_group_submission($userid, 0, false, $attemptnumber); } else { - $submission = $assignment->get_user_submission($userid, false); + $submission = $assignment->get_user_submission($userid, false, $attemptnumber); } $user = $DB->get_record('user', array('id' => $userid)); @@ -230,9 +230,9 @@ EOD; $grade = $assignment->get_user_grade($userid, true, $attemptnumber); if ($assignment->get_instance()->teamsubmission) { - $submission = $assignment->get_group_submission($userid, 0, false); + $submission = $assignment->get_group_submission($userid, 0, false, $attemptnumber); } else { - $submission = $assignment->get_user_submission($userid, false); + $submission = $assignment->get_user_submission($userid, false, $attemptnumber); } $contextid = $assignment->get_context()->id; @@ -486,9 +486,9 @@ EOD; } if ($assignment->get_instance()->teamsubmission) { - $submission = $assignment->get_group_submission($userid, 0, false); + $submission = $assignment->get_group_submission($userid, 0, false, $attemptnumber); } else { - $submission = $assignment->get_user_submission($userid, false); + $submission = $assignment->get_user_submission($userid, false, $attemptnumber); } $grade = $assignment->get_user_grade($userid, true, $attemptnumber); diff --git a/mod/assign/feedback/editpdf/locallib.php b/mod/assign/feedback/editpdf/locallib.php index a9a74e5e027..c92f7ee332a 100644 --- a/mod/assign/feedback/editpdf/locallib.php +++ b/mod/assign/feedback/editpdf/locallib.php @@ -58,7 +58,7 @@ class assign_feedback_editpdf extends assign_feedback_plugin { */ public function get_widget($userid, $grade, $readonly) { $attempt = -1; - if ($grade && $grade->attemptnumber) { + if ($grade) { $attempt = $grade->attemptnumber; } else { $grade = $this->assignment->get_user_grade($userid, true); diff --git a/mod/assign/feedback/editpdf/tests/behat/view_previous_annotations.feature b/mod/assign/feedback/editpdf/tests/behat/view_previous_annotations.feature new file mode 100644 index 00000000000..b35072d9c60 --- /dev/null +++ b/mod/assign/feedback/editpdf/tests/behat/view_previous_annotations.feature @@ -0,0 +1,66 @@ +@mod @mod_assign @assignfeedback @assignfeedback_editpdf @_file_upload +Feature: In an assignment, teacher can view the feedback for a previous attempt. + In order to see the history of attempts + As a teacher + I need to see the previous annotations. + + @javascript + Scenario: Submit a PDF file as a student and annotate the PDF as a teacher, allowing another attempt + Given ghostscript is installed + And the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 1 | + And the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@example.com | + | student1 | Student | 1 | student1@example.com | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + And I log in as "teacher1" + And I follow "Course 1" + And I turn editing mode on + And I add a "Assignment" to section "1" and I fill the form with: + | Assignment name | Test assignment name | + | Description | Submit your PDF file | + | assignsubmission_file_enabled | 1 | + | Maximum number of uploaded files | 2 | + | Attempts reopened | Manually | + | Maximum attempts | Unlimited | + And I log out + And I log in as "student1" + And I follow "Course 1" + And I follow "Test assignment name" + And I press "Add submission" + And I upload "mod/assign/feedback/editpdf/tests/fixtures/submission.pdf" file to "File submissions" filemanager + And I upload "mod/assign/feedback/editpdf/tests/fixtures/testgs.pdf" file to "File submissions" filemanager + And I press "Save changes" + And I should see "Submitted for grading" + And I should see "submission.pdf" + And I should see "Not graded" + And I log out + And I log in as "teacher1" + And I follow "Course 1" + And I follow "Test assignment name" + And I follow "View all submissions" + And I click on "Edit" "link" in the "Submitted for grading" "table_row" + And I click on "Grade" "link" in the "Submitted for grading" "table_row" + And I should see "Page 1 of 3" + And I click on ".navigate-next-button" "css_element" + And I should see "Page 2 of 3" + And I click on ".stampbutton" "css_element" + And I draw on the pdf + And I wait until the page is ready + And I set the field "Allow another attempt" to "Yes" + And I press "Save changes" + And I wait until the page is ready + And I should see "The changes to the grade and feedback were saved" + And I press "Ok" + And I follow "View a different attempt" + And I click on "//div[contains(@class, 'moodle-dialogue-bd')]//label[2]" "xpath_element" + And I press "View" + And I wait until the page is ready + And I should see "You are editing the feedback for a previous attempt. This is attempt 1 out of 2." + And I should see "Page 1 of 3" + diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 07a1e7b852e..2d1d4237b5e 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -6627,7 +6627,9 @@ class assign { } $userid = $useridlist[$rownum]; - $grade = $this->get_user_grade($userid, false, $attemptnumber); + // We need to create a grade record matching this attempt number + // or the feedback plugin will have no way to know what is the correct attempt. + $grade = $this->get_user_grade($userid, true, $attemptnumber); $submission = null; if ($this->get_instance()->teamsubmission) {