. /** * A scheduled task. * * Simple task to convert submissions to pdf in the background. * * @package assignfeedback_editpdfplus * @copyright 2016 Université de Lausanne * The code is based on mod/assign/feedback/editpdf/classes/task/convert_submissions.php by Damyon Wiese. * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace assignfeedback_editpdfplus\task; use core\task\scheduled_task; use assignfeedback_editpdfplus\document_services; use assignfeedback_editpdfplus\combined_document; use context_module; use assign; class convert_submissions extends scheduled_task { /** * Get a descriptive name for this task (shown to admins). * * @return string */ public function get_name() { return get_string('preparesubmissionsforannotation', 'assignfeedback_editpdfplus'); } /** * Do the job. * Throw exceptions on errors (the job will be retried). */ public function execute() { global $CFG, $DB; require_once($CFG->dirroot . '/mod/assign/locallib.php'); $records = $DB->get_records('assignfeedback_editpp_queue'); $assignmentcache = array(); foreach ($records as $record) { $submissionid = $record->submissionid; $submission = $DB->get_record('assign_submission', array('id' => $submissionid), '*', IGNORE_MISSING); if (!$submission) { // Submission no longer exists. $DB->delete_records('assignfeedback_editpp_queue', array('id' => $record->id)); continue; } $assignmentid = $submission->assignment; $attemptnumber = $record->submissionattempt; if (empty($assignmentcache[$assignmentid])) { $cm = get_coursemodule_from_instance('assign', $assignmentid, 0, false, MUST_EXIST); $context = context_module::instance($cm->id); $assignment = new assign($context, null, null); $assignmentcache[$assignmentid] = $assignment; } else { $assignment = $assignmentcache[$assignmentid]; } $users = array(); if ($submission->userid) { array_push($users, $submission->userid); } else { $members = $assignment->get_submission_group_members($submission->groupid, true); foreach ($members as $member) { array_push($users, $member->id); } } mtrace('Convert ' . count($users) . ' submission attempt(s) for assignment ' . $assignmentid); foreach ($users as $userid) { try { $combineddocument = document_services::get_combined_pdf_for_attempt($assignment, $userid, $attemptnumber); $status = $combineddocument->get_status(); switch ($combineddocument->get_status()) { case combined_document::STATUS_READY: case combined_document::STATUS_PENDING_INPUT: // The document has not been converted yet or is somehow still ready. continue; } document_services::get_page_images_for_attempt( $assignment, $userid, $attemptnumber, false ); document_services::get_page_images_for_attempt( $assignment, $userid, $attemptnumber, true ); } catch (\moodle_exception $e) { mtrace('Conversion failed with error:' . $e->errorcode); } } // Remove from queue. $DB->delete_records('assignfeedback_editpp_queue', array('id' => $record->id)); } } }