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.");
 }
Exemple #2
0
                        }
                        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'), '&nbsp;');
$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);