/** * This function will generate and return a list of the page images from a pdf. * @param int|\assign $assignment * @param int $userid * @param int $attemptnumber (-1 means latest attempt) * @return array(stored_file) */ public static function generate_page_images_for_attempt($assignment, $userid, $attemptnumber) { global $CFG; require_once $CFG->libdir . '/pdflib.php'; $assignment = self::get_assignment_from_param($assignment); if (!$assignment->can_view_submission($userid)) { \print_error('nopermission'); } // Need to generate the page images - first get a combined pdf. $file = self::get_combined_pdf_for_attempt($assignment, $userid, $attemptnumber); if (!$file) { throw new \moodle_exception('Could not generate combined pdf.'); } $tmpdir = \make_temp_directory('assignfeedback_editpdf/pageimages/' . self::hash($assignment, $userid, $attemptnumber)); $combined = $tmpdir . '/' . self::COMBINED_PDF_FILENAME; $file->copy_content_to($combined); // Copy the file. $pdf = new pdf(); $pdf->set_image_folder($tmpdir); $pagecount = $pdf->set_pdf($combined); $grade = $assignment->get_user_grade($userid, true, $attemptnumber); $record = new \stdClass(); $record->contextid = $assignment->get_context()->id; $record->component = 'assignfeedback_editpdf'; $record->filearea = self::PAGE_IMAGE_FILEAREA; $record->itemid = $grade->id; $record->filepath = '/'; $fs = \get_file_storage(); $files = array(); for ($i = 0; $i < $pagecount; $i++) { $image = $pdf->get_image($i); $record->filename = basename($image); $files[$i] = $fs->create_file_from_pathname($record, $tmpdir . '/' . $image); @unlink($tmpdir . '/' . $image); } @unlink($combined); @rmdir($tmpdir); return $files; }
/** * Test that the configured path to ghostscript is correct and working. * @param bool $generateimage - If true - a test image will be generated to verify the install. * @return bool */ public static function test_gs_path($generateimage = true) { global $CFG; $ret = (object) array('status' => self::GSPATH_OK, 'message' => null); $gspath = \get_config('assignfeedback_editpdf', 'gspath'); if (empty($gspath)) { $ret->status = self::GSPATH_EMPTY; return $ret; } if (!file_exists($gspath)) { $ret->status = self::GSPATH_DOESNOTEXIST; return $ret; } if (is_dir($gspath)) { $ret->status = self::GSPATH_ISDIR; return $ret; } if (!is_executable($gspath)) { $ret->status = self::GSPATH_NOTEXECUTABLE; return $ret; } $testfile = $CFG->dirroot . '/mod/assign/feedback/editpdf/tests/fixtures/testgs.pdf'; if (!file_exists($testfile)) { $ret->status = self::GSPATH_NOTESTFILE; return $ret; } if (!$generateimage) { return $ret; } $testimagefolder = \make_temp_directory('assignfeedback_editpdf_test'); @unlink($testimagefolder . '/image_page0.png'); // Delete any previous test images. $pdf = new pdf(); $pdf->set_pdf($testfile); $pdf->set_image_folder($testimagefolder); try { $pdf->get_image(0); } catch (\moodle_exception $e) { $ret->status = self::GSPATH_ERROR; $ret->message = $e->getMessage(); } return $ret; }