$added = page_editor::set_comments($grade->id, $index, $page->comments);
     if ($added != count($page->comments)) {
         array_push($response->errors, get_string('couldnotsavepage', 'seplfeedback_editpdf', $index + 1));
     }
     $added = page_editor::set_annotations($grade->id, $index, $page->annotations);
     if ($added != count($page->annotations)) {
         array_push($response->errors, get_string('couldnotsavepage', 'seplfeedback_editpdf', $index + 1));
     }
     echo json_encode($response);
     die;
 } else {
     if ($action == 'generatepdf') {
         require_capability('mod/sepl:grade', $context);
         $response = new stdClass();
         $grade = $seplment->get_user_grade($userid, true);
         $file = document_services::generate_feedback_document($seplment, $userid, $attemptnumber);
         $response->url = '';
         if ($file) {
             $url = moodle_url::make_pluginfile_url($seplment->get_context()->id, 'seplfeedback_editpdf', document_services::FINAL_PDF_FILEAREA, $grade->id, '/', $file->get_filename(), false);
             $response->url = $url->out(true);
             $response->filename = $file->get_filename();
         }
         echo json_encode($response);
         die;
     } else {
         if ($action == 'loadquicklist') {
             require_capability('mod/sepl:grade', $context);
             $result = comments_quick_list::get_comments();
             echo json_encode($result);
             die;
         } else {
 /**
  * Generate the pdf.
  *
  * @param stdClass $grade
  * @param stdClass $data
  * @return bool
  */
 public function save(stdClass $grade, stdClass $data)
 {
     // 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;
         // Copy drafts annotations and comments if current user is different to sourceuserid.
         if ($sourceuserid != $grade->userid) {
             page_editor::copy_drafts_from_to($this->seplment, $grade, $sourceuserid);
         }
     }
     if (page_editor::has_annotations_or_comments($grade->id, true)) {
         document_services::generate_feedback_document($this->seplment, $grade->userid, $grade->attemptnumber);
     }
     return true;
 }
 public function test_document_services()
 {
     $sepl = $this->create_sepl_and_submit_pdf();
     $this->setUser($this->teachers[0]);
     $grade = $sepl->get_user_grade($this->students[0]->id, true);
     $notempty = page_editor::has_annotations_or_comments($grade->id, false);
     $this->assertFalse($notempty);
     $comment = new comment();
     $comment->rawtext = 'Comment text';
     $comment->width = 100;
     $comment->x = 100;
     $comment->y = 100;
     $comment->colour = 'red';
     page_editor::set_comments($grade->id, 0, array($comment));
     $annotations = array();
     $annotation = new annotation();
     $annotation->path = '';
     $annotation->x = 100;
     $annotation->y = 100;
     $annotation->endx = 200;
     $annotation->endy = 200;
     $annotation->type = 'line';
     $annotation->colour = 'red';
     array_push($annotations, $annotation);
     $annotation = new annotation();
     $annotation->path = '';
     $annotation->x = 100;
     $annotation->y = 100;
     $annotation->endx = 200;
     $annotation->endy = 200;
     $annotation->type = 'rectangle';
     $annotation->colour = 'yellow';
     array_push($annotations, $annotation);
     $annotation = new annotation();
     $annotation->path = '';
     $annotation->x = 100;
     $annotation->y = 100;
     $annotation->endx = 200;
     $annotation->endy = 200;
     $annotation->type = 'oval';
     $annotation->colour = 'green';
     array_push($annotations, $annotation);
     $annotation = new annotation();
     $annotation->path = '';
     $annotation->x = 100;
     $annotation->y = 100;
     $annotation->endx = 200;
     $annotation->endy = 116;
     $annotation->type = 'highlight';
     $annotation->colour = 'blue';
     array_push($annotations, $annotation);
     $annotation = new annotation();
     $annotation->path = '100,100:105,105:110,100';
     $annotation->x = 100;
     $annotation->y = 100;
     $annotation->endx = 110;
     $annotation->endy = 105;
     $annotation->type = 'pen';
     $annotation->colour = 'black';
     array_push($annotations, $annotation);
     page_editor::set_annotations($grade->id, 0, $annotations);
     page_editor::release_drafts($grade->id);
     $notempty = page_editor::has_annotations_or_comments($grade->id, false);
     $this->assertTrue($notempty);
     $file = document_services::generate_feedback_document($sepl->get_instance()->id, $grade->userid, $grade->attemptnumber);
     $this->assertNotEmpty($file);
     $file2 = document_services::get_feedback_document($sepl->get_instance()->id, $grade->userid, $grade->attemptnumber);
     $this->assertEquals($file, $file2);
     document_services::delete_feedback_document($sepl->get_instance()->id, $grade->userid, $grade->attemptnumber);
     $file3 = document_services::get_feedback_document($sepl->get_instance()->id, $grade->userid, $grade->attemptnumber);
     $this->assertEmpty($file3);
 }