コード例 #1
0
 function create_response_pdf($submissionid)
 {
     global $DB;
     $fs = get_file_storage();
     if (!($file = $fs->get_file($this->context->id, 'mod_assignment', 'submissionfinal', $submissionid, '/', 'submission.pdf'))) {
         print_error('Submitted PDF not found');
         return false;
     }
     $temparea = $this->get_temp_folder($submissionid) . 'sub';
     if (!file_exists($temparea)) {
         if (!mkdir($temparea, 0777, true)) {
             echo "Unable to create temporary folder";
             die;
         }
     }
     $sourcefile = $temparea . '/submission.pdf';
     $destfile = $temparea . '/response.pdf';
     $file->copy_content_to($sourcefile);
     $mypdf = new MyPDFLib();
     $mypdf->load_pdf($sourcefile);
     $comments = $DB->get_records('assignment_uploadpdf_comment', array('assignment_submission' => $submissionid), 'pageno');
     $annotations = $DB->get_records('assignment_uploadpdf_annot', array('assignment_submission' => $submissionid), 'pageno');
     if ($comments) {
         $comment = current($comments);
     } else {
         $comment = false;
     }
     if ($annotations) {
         $annotation = current($annotations);
     } else {
         $annotation = false;
     }
     while (true) {
         if ($comment) {
             $nextpage = $comment->pageno;
             if ($annotation) {
                 if ($annotation->pageno < $nextpage) {
                     $nextpage = $annotation->pageno;
                 }
             }
         } else {
             if ($annotation) {
                 $nextpage = $annotation->pageno;
             } else {
                 break;
             }
         }
         while ($nextpage > $mypdf->current_page()) {
             if (!$mypdf->copy_page()) {
                 break 2;
             }
         }
         while ($comment && $comment->pageno == $mypdf->current_page()) {
             $mypdf->add_comment($comment->rawtext, $comment->posx, $comment->posy, $comment->width, $comment->colour);
             $comment = next($comments);
         }
         while ($annotation && $annotation->pageno == $mypdf->current_page()) {
             if ($annotation->type == 'freehand') {
                 $path = explode(',', $annotation->path);
                 $mypdf->add_annotation(0, 0, 0, 0, $annotation->colour, 'freehand', $path);
             } else {
                 $mypdf->add_annotation($annotation->startx, $annotation->starty, $annotation->endx, $annotation->endy, $annotation->colour, $annotation->type, $annotation->path);
             }
             $annotation = next($annotations);
         }
     }
     $mypdf->copy_remaining_pages();
     $mypdf->save_pdf($destfile);
     // Delete any previous response file
     if ($file = $fs->get_file($this->context->id, 'mod_assignment', 'response', $submissionid, '/', 'response.pdf')) {
         $file->delete();
     }
     $fileinfo = array('contextid' => $this->context->id, 'component' => 'mod_assignment', 'filearea' => 'response', 'itemid' => $submissionid, 'filename' => 'response.pdf', 'filepath' => '/');
     $fs->create_file_from_pathname($fileinfo, $destfile);
     @unlink($sourcefile);
     @unlink($destfile);
     @rmdir($temparea);
     @rmdir(dirname($temparea));
     return true;
 }
コード例 #2
0
 function create_response_pdf($userid, $submissionid)
 {
     global $CFG;
     $filearea = $CFG->dataroot . '/' . $this->file_area_name($userid);
     $sourcearea = $filearea . '/submission';
     $sourcefile = $sourcearea . '/submission.pdf';
     if (!is_dir($sourcearea) || !file_exists($sourcefile)) {
         error('Submitted PDF not found');
         return false;
     }
     $destarea = $filearea . '/responses';
     $destfile = $destarea . '/response.pdf';
     check_dir_exists($destarea, true, true);
     $mypdf = new MyPDFLib();
     $mypdf->load_pdf($sourcefile);
     $comments = get_records('assignment_uploadpdf_comment', 'assignment_submission', $submissionid, 'pageno');
     $annotations = get_records('assignment_uploadpdf_annot', 'assignment_submission', $submissionid, 'pageno');
     if ($comments) {
         $comment = current($comments);
     } else {
         $comment = false;
     }
     if ($annotations) {
         $annotation = current($annotations);
     } else {
         $annotation = false;
     }
     while (true) {
         if ($comment) {
             $nextpage = $comment->pageno;
             if ($annotation) {
                 if ($annotation->pageno < $nextpage) {
                     $nextpage = $annotation->pageno;
                 }
             }
         } else {
             if ($annotation) {
                 $nextpage = $annotation->pageno;
             } else {
                 break;
             }
         }
         while ($nextpage > $mypdf->current_page()) {
             if (!$mypdf->copy_page()) {
                 error('Ran out of pages - this should not happen! - comment.pageno = ' . $comment->pageno . '; currrentpage = ' . $mypdf->CurrentPage());
                 return false;
             }
         }
         while ($comment && $comment->pageno == $mypdf->current_page()) {
             $mypdf->add_comment($comment->rawtext, $comment->posx, $comment->posy, $comment->width, $comment->colour);
             $comment = next($comments);
         }
         while ($annotation && $annotation->pageno == $mypdf->current_page()) {
             if ($annotation->type == 'freehand') {
                 $path = explode(',', $annotation->path);
                 $mypdf->add_annotation(0, 0, 0, 0, $annotation->colour, 'freehand', $path);
             } else {
                 $mypdf->add_annotation($annotation->startx, $annotation->starty, $annotation->endx, $annotation->endy, $annotation->colour, $annotation->type);
             }
             $annotation = next($annotations);
         }
     }
     $mypdf->copy_remaining_pages();
     $mypdf->save_pdf($destfile);
     return true;
 }