Merge branch 'wip-MDL-53601-master' of git://github.com/abgreeve/moodle

This commit is contained in:
David Monllao 2016-05-02 16:17:48 +08:00
commit 71c0a5745c
8 changed files with 178 additions and 44 deletions

View File

@ -188,11 +188,18 @@ class assign_feedback_editpdf extends assign_feedback_plugin {
* @return boolean True if the pdf has been modified, else false. * @return boolean True if the pdf has been modified, else false.
*/ */
public function is_feedback_modified(stdClass $grade, stdClass $data) { public function is_feedback_modified(stdClass $grade, stdClass $data) {
global $USER; // We only need to know if the source user's PDF has changed. If so then all
$pagenumbercount = document_services::page_number_for_attempt($this->assignment, $grade->userid, $grade->attemptnumber); // following users will have the same status. If it's only an individual annotation
// then only one user will come through this method.
// Source user id is only added to the form if there was a pdf.
if (!empty($data->editpdf_source_userid)) {
$sourceuserid = $data->editpdf_source_userid;
// Retrieve the grade information for the source user.
$sourcegrade = $this->assignment->get_user_grade($sourceuserid, true, $grade->attemptnumber);
$pagenumbercount = document_services::page_number_for_attempt($this->assignment, $sourceuserid, $sourcegrade->attemptnumber);
for ($i = 0; $i < $pagenumbercount; $i++) { for ($i = 0; $i < $pagenumbercount; $i++) {
// Select all annotations. // Select all annotations.
$draftannotations = page_editor::get_annotations($grade->id, $i, true); $draftannotations = page_editor::get_annotations($sourcegrade->id, $i, true);
$nondraftannotations = page_editor::get_annotations($grade->id, $i, false); $nondraftannotations = page_editor::get_annotations($grade->id, $i, false);
// Check to see if the count is the same. // Check to see if the count is the same.
if (count($draftannotations) != count($nondraftannotations)) { if (count($draftannotations) != count($nondraftannotations)) {
@ -216,7 +223,7 @@ class assign_feedback_editpdf extends assign_feedback_plugin {
} }
} }
// Select all comments. // Select all comments.
$draftcomments = page_editor::get_comments($grade->id, $i, true); $draftcomments = page_editor::get_comments($sourcegrade->id, $i, true);
$nondraftcomments = page_editor::get_comments($grade->id, $i, false); $nondraftcomments = page_editor::get_comments($grade->id, $i, false);
if (count($draftcomments) != count($nondraftcomments)) { if (count($draftcomments) != count($nondraftcomments)) {
return true; return true;
@ -238,6 +245,7 @@ class assign_feedback_editpdf extends assign_feedback_plugin {
} }
} }
} }
}
return false; return false;
} }

View File

@ -4,8 +4,7 @@ Feature: In a group assignment, teacher can annotate PDF files for all users
As a teacher As a teacher
I need to use the PDF editor for a group assignment I need to use the PDF editor for a group assignment
@javascript Background:
Scenario: Submit a PDF file as a student and annotate the PDF as a teacher
Given ghostscript is installed Given ghostscript is installed
And the following "courses" exist: And the following "courses" exist:
| fullname | shortname | category | groupmode | | fullname | shortname | category | groupmode |
@ -56,6 +55,10 @@ Feature: In a group assignment, teacher can annotate PDF files for all users
And I click on ".stampbutton" "css_element" And I click on ".stampbutton" "css_element"
And I draw on the pdf And I draw on the pdf
And I wait until the page is ready And I wait until the page is ready
@javascript
Scenario: Submit a PDF file as a student and annotate the PDF as a teacher
Given I set the field "applytoall" to "0"
And I press "Save changes" And I press "Save changes"
And I should see "The changes to the grade and feedback were saved" And I should see "The changes to the grade and feedback were saved"
And I press "Ok" And I press "Ok"
@ -73,3 +76,24 @@ Feature: In a group assignment, teacher can annotate PDF files for all users
And I follow "Course 1" And I follow "Course 1"
And I follow "Test assignment name" And I follow "Test assignment name"
And I should not see "View annotated PDF..." And I should not see "View annotated PDF..."
@javascript
Scenario: Submit a PDF file as a student and annotate the PDF as a teacher and all students in the group get a copy of the annotated PDF.
Given I press "Save changes"
And I click on "Ok" "button"
And I follow "Course 1"
And I log out
And I log in as "student1"
And I follow "Course 1"
And I follow "Test assignment name"
When I follow "View annotated PDF..."
And I change window size to "large"
Then I should see "Annotate PDF"
And I change window size to "medium"
And I wait until the page is ready
And I click on "Close" "button"
And I log out
And I log in as "student2"
And I follow "Course 1"
And I follow "Test assignment name"
And I should see "View annotated PDF..."

View File

@ -90,7 +90,7 @@ class assign_feedback_file extends assign_feedback_plugin {
$filekey = null; $filekey = null;
$draftareainfo = null; $draftareainfo = null;
foreach ($data as $key => $value) { foreach ($data as $key => $value) {
if (strpos($key, 'files_') === 0) { if (strpos($key, 'files_') === 0 && strpos($key, '_filemanager')) {
$filekey = $key; $filekey = $key;
} }
} }

View File

@ -0,0 +1,89 @@
@mod @mod_assign @assignfeedback @assignfeedback_file @_file_upload
Feature: In an assignment, teacher can submit feedback files during grading
In order to provide a feedback file
As a teacher
I need to submit a feedback file.
Background:
Given 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 |
| student2 | Student | 2 | student2@example.com |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
| student1 | C1 | student |
| student2 | C1 | student |
And the following "groups" exist:
| name | course | idnumber |
| G1 | C1 | G1 |
And the following "group members" exist:
| user | group |
| student1 | G1 |
| student2 | G1 |
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 |
| Maximum number of uploaded files | 2 |
| Students submit in groups | Yes |
And I follow "Test assignment name"
And I follow "Edit settings"
And I follow "Expand all"
And I set the field "assignfeedback_file_enabled" to "1"
And I press "Save and display"
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/file/tests/fixtures/submission.txt" file to "File submissions" filemanager
And I press "Save changes"
And I should see "Submitted for grading"
And I should see "submission.txt"
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 click on "Grade"
And I upload "mod/assign/feedback/file/tests/fixtures/feedback.txt" file to "Feedback files" filemanager
@javascript
Scenario: A teacher can provide a feedback file when grading an assignment.
Given I set the field "applytoall" to "0"
And I press "Save changes"
And I click "Ok" "button"
And I follow "Course 1"
And I log out
And I log in as "student1"
And I follow "Course 1"
And I follow "Test assignment name"
And I should see "feedback.txt"
And I log out
When I log in as "student2"
And I follow "Course 1"
And I follow "Test assignment name"
Then I should not see "feedback.txt"
@javascript
Scenario: A teacher can provide a feedback file when grading an assignment and all students in the group will receive the file.
Given I press "Save changes"
And I click "Ok" "button"
And I follow "Course 1"
And I log out
And I log in as "student1"
And I follow "Course 1"
And I follow "Test assignment name"
And I should see "feedback.txt"
And I log out
When I log in as "student2"
And I follow "Course 1"
And I follow "Test assignment name"
Then I should see "feedback.txt"

View File

@ -0,0 +1 @@
feedback.txt

View File

@ -0,0 +1 @@
submission.txt

View File

@ -67,6 +67,17 @@ class assign_feedback_offline extends assign_feedback_plugin {
return true; return true;
} }
/**
* This plugin does not save through the normal interface so this returns false.
*
* @param stdClass $grade The grade.
* @param stdClass $data Form data from the feedback form.
* @return boolean - False
*/
public function is_feedback_modified(stdClass $grade, stdClass $data) {
return false;
}
/** /**
* Loop through uploaded grades and update the grades for this assignment * Loop through uploaded grades and update the grades for this assignment
* *

View File

@ -120,8 +120,8 @@ abstract class assign_feedback_plugin extends assign_plugin {
* @return boolean - True if the form element has been modified. * @return boolean - True if the form element has been modified.
*/ */
public function is_feedback_modified(stdClass $grade, stdClass $data) { public function is_feedback_modified(stdClass $grade, stdClass $data) {
debugging('This plugin has not overwritten the is_feedback_modified() method. Please add this method to your plugin', debugging('This plugin (' . $this->get_name() . ') has not overwritten the is_feedback_modified() method.
DEBUG_DEVELOPER); Please add this method to your plugin', DEBUG_DEVELOPER);
return true; return true;
} }