From 028c9d20b91fca49def3a375608855f5f55c8cf5 Mon Sep 17 00:00:00 2001 From: Gregory Faller Date: Mon, 16 Jun 2014 18:09:21 +0930 Subject: [PATCH] MDL-45582: Apply grades and feedback to entire group does not work with Annotate PDF feature --- .../feedback/editpdf/classes/page_editor.php | 32 +++++++++++++++++++ mod/assign/feedback/editpdf/locallib.php | 8 +++++ 2 files changed, 40 insertions(+) diff --git a/mod/assign/feedback/editpdf/classes/page_editor.php b/mod/assign/feedback/editpdf/classes/page_editor.php index e02b2055881..b22633dc903 100644 --- a/mod/assign/feedback/editpdf/classes/page_editor.php +++ b/mod/assign/feedback/editpdf/classes/page_editor.php @@ -308,4 +308,36 @@ class page_editor { return $DB->delete_records('assignfeedback_editpdf_annot', array('id'=>$annotationid)); } + + /** + * This function copies annotations and comments from the source user + * to the current group member being processed when using applytoall. + * @param int|\assign $assignment + * @param stdClass $grade + * @param int $sourceuserid + * @return bool + */ + public static function copy_drafts_from_to($assignment, $grade, $sourceuserid) { + global $DB; + + // Delete any existing annotations and comments from current user. + $DB->delete_records('assignfeedback_editpdf_annot', array('gradeid' => $grade->id)); + $DB->delete_records('assignfeedback_editpdf_cmnt', array('gradeid' => $grade->id)); + // Get gradeid, annotations and comments from sourceuserid. + $sourceusergrade = $assignment->get_user_grade($sourceuserid, true, $grade->attemptnumber); + $annotations = $DB->get_records('assignfeedback_editpdf_annot', array('gradeid' => $sourceusergrade->id, 'draft' => 1)); + $comments = $DB->get_records('assignfeedback_editpdf_cmnt', array('gradeid' => $sourceusergrade->id, 'draft' => 1)); + + // Add annotations and comments to current user to generate feedback file. + foreach ($annotations as $annotation) { + $annotation->gradeid = $grade->id; + $DB->insert_record('assignfeedback_editpdf_annot', $annotation); + } + foreach ($comments as $comment) { + $comment->gradeid = $grade->id; + $DB->insert_record('assignfeedback_editpdf_cmnt', $comment); + } + + return true; + } } diff --git a/mod/assign/feedback/editpdf/locallib.php b/mod/assign/feedback/editpdf/locallib.php index 719e29e37a8..9e42ab0159e 100644 --- a/mod/assign/feedback/editpdf/locallib.php +++ b/mod/assign/feedback/editpdf/locallib.php @@ -178,6 +178,9 @@ class assign_feedback_editpdf extends assign_feedback_plugin { $html = $renderer->render($widget); $mform->addElement('static', 'editpdf', get_string('editpdf', 'assignfeedback_editpdf'), $html); $mform->addHelpButton('editpdf', 'editpdf', 'assignfeedback_editpdf'); + $mform->addElement('hidden', 'editpdf_source_userid', $userid); + $mform->setType('editpdf_source_userid', PARAM_INT); + $mform->setConstant('editpdf_source_userid', $userid); } } @@ -189,6 +192,11 @@ class assign_feedback_editpdf extends assign_feedback_plugin { * @return bool */ public function save(stdClass $grade, stdClass $data) { + $sourceuserid = $data->editpdf_source_userid; + // Copy drafts annotations and comments if current user is different to sourceuserid. + if ($sourceuserid != $grade->userid) { + page_editor::copy_drafts_from_to($this->assignment, $grade, $sourceuserid); + } if (page_editor::has_annotations_or_comments($grade->id, true)) { document_services::generate_feedback_document($this->assignment, $grade->userid, $grade->attemptnumber); }