public function execute() { global $CFG, $DB; require_once $CFG->dirroot . '/mod/emarking/lib.php'; require_once $CFG->dirroot . '/mod/emarking/locallib.php'; require_once $CFG->dirroot . '/mod/emarking/print/locallib.php'; $digitizedanswerfiles = emarking_get_digitized_answer_files(NULL, EMARKING_DIGITIZED_ANSWER_UPLOADED); if (count($digitizedanswerfiles) == 0) { mtrace('No digitized answers files to process'); return; } $totalfiles = 0; // Setup de directorios temporales. $tempdir = emarking_get_temp_dir_path(random_string()); emarking_initialize_directory($tempdir, true); foreach ($digitizedanswerfiles as $digitizedanswerfile) { if (!($zipfile = emarking_get_path_from_hash($tempdir, $digitizedanswerfile->hash))) { mtrace('Invalid file for processing ' . $digitizedanswerfile->id); continue; } if (!($emarking = $DB->get_record('emarking', array('id' => $digitizedanswerfile->emarking)))) { mtrace('Invalid emarking activity ' . $digitizedanswerfile->emarking); continue; } if (!($course = $DB->get_record('course', array('id' => $emarking->course)))) { mtrace('Invalid course in emarking activity ' . $emarking->course); continue; } if (!($cm = get_coursemodule_from_instance('emarking', $emarking->id))) { mtrace('Invalid course module for emarking activity ' . $emarking->id); continue; } $totalfiles++; $msg = "[{$totalfiles}] : {$course->fullname} ({$course->id}) : {$emarking->name} ({$emarking->id}) : {$digitizedanswerfile->filename} ({$digitizedanswerfile->id})"; $digitizedanswerfile->status = EMARKING_DIGITIZED_ANSWER_BEING_PROCESSED; $DB->update_record('emarking_digitized_answers', $digitizedanswerfile); // Process documents and obtain results. list($result, $errors, $totaldocumentsprocessed, $totaldocumentsignored) = emarking_upload_answers($emarking, $zipfile, $course, $cm); if ($result) { $digitizedanswerfile->status = EMARKING_DIGITIZED_ANSWER_PROCESSED; } else { $digitizedanswerfile->status = EMARKING_DIGITIZED_ANSWER_ERROR_PROCESSING; } $digitizedanswerfile->totalpages = $totaldocumentsprocessed; $digitizedanswerfile->identifiedpages = $totaldocumentsprocessed - $totaldocumentsignored; $msg .= emarking_get_string_for_status_digitized($digitizedanswerfile->status) . ' processed:' . $totaldocumentsprocessed . ' ignored:' . $totaldocumentsignored; $DB->update_record('emarking_digitized_answers', $digitizedanswerfile); mtrace($msg); } mtrace("A total of {$totalfiles} were processed."); }
} if (!($emarking = $DB->get_record('emarking', array('id' => $emarkingid)))) { emarking_json_error('Invalid emarking id'); } if (!($cm = get_coursemodule_from_instance('emarking', $emarking->id, $course->id))) { emarking_json_error('Invalid course module'); } if (count($_FILES) < 1 || !is_uploaded_file($_FILES['uploadedfile']['tmp_name'])) { emarking_json_error('You must upload a file'); } $extension = strtolower(substr($_FILES['uploadedfile']['name'], strrpos($_FILES['uploadedfile']['name'], "."), strlen($_FILES['uploadedfile']['name']) - strrpos($_FILES['uploadedfile']['name'], "."))); if ($extension !== '.zip') { emarking_json_error('Invalid extension file ' . $extension . ' in ' . $_FILES['uploadedfile']['tmp_name'] . '. Only zip files are allowed'); } // Setup de directorios temporales $tempdir = emarking_get_temp_dir_path($emarking->id); emarking_initialize_directory($tempdir, true); $fileid = $tempdir . "/" . random_string() . ".zip"; if (!move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $fileid)) { emarking_json_error("Couldn't move file " . $_FILES['uploadedfile']['tmp_name'] . " to " . $fileid); } emarking_upload_answers($emarking, $fileid, $course, $cm); $output = array($emarking - id => $emarking); emarking_json_resultset($output); } } } } } } emarking_json_error('Invalid action');
$PAGE->set_heading($course->fullname); $PAGE->navbar->add(get_string('uploadanswers', 'mod_emarking')); echo $OUTPUT->header(); echo $OUTPUT->heading(get_string('uploadinganswersheets', 'mod_emarking')); // Create progress bar $pbar = new progress_bar('extractqr', 500, true); $pbar->create(); // Count documents ignored and processed $totaldocumentsprocessed = 0; $totaldocumentsignored = 0; // Setup de directorios temporales $tempdir = emarking_get_temp_dir_path($emarking->id); emarking_initialize_directory($tempdir, true); $zipfile = emarking_get_path_from_hash($tempdir, $fileid); // Process documents and obtain results list($result, $errors, $totaldocumentsprocessed, $totaldocumentsignored) = emarking_upload_answers($emarking, $zipfile, $course, $cm, $pbar); $pbar->update_full(100, get_string('qrdecodingfinished', 'mod_emarking')); $percentage = 0; if ($totaldocumentsprocessed > 0) { $percentage = round(($totaldocumentsprocessed - $totaldocumentsignored) / $totaldocumentsprocessed * 100, 2); } $table = new html_table(); $table->attributes['style'] = "width: 500px; margin-left:auto; margin-right:auto;"; $table->head = array(get_string('results', 'mod_emarking'), ' '); $table->data[] = array(get_string('identifieddocuments', 'mod_emarking'), $totaldocumentsprocessed . " ({$percentage}%)"); $table->data[] = array(get_string('ignoreddocuments', 'mod_emarking'), $totaldocumentsignored); if (!$result) { $table->data[] = array(get_string('errors', 'mod_emarking'), $errors); } echo "<br/>"; echo html_writer::table($table);