123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- <?php
- defined('MOODLE_INTERNAL') || die();
- require_once('../../lib.php');
- function create_submission ($data, $gradeimporterid, $userid) {
- global $DB;
- $timenow = time();
- if (empty($data->id)) {
-
- $data->gradeimporterid = $gradeimporterid;
- $data->usermodified = $userid;
- $data->timecreated = $timenow;
- $isnewentry = true;
- } else {
- $isnewentry = false;
- }
- $data->introformat = $data->intro["format"];
- $data->intro = $data->intro["text"];
- $data->timemodified = $timenow;
- $data->position = -1;
- if ($isnewentry) {
-
- $data->id = $DB->insert_record('gradeimporter_submission', $data);
- }
-
-
- $DB->update_record('gradeimporter_submission', $data);
- return $data;
- }
- function store_files ($context, $cm, $data) {
- global $CFG;
- $fs = get_file_storage();
- $files = $fs->get_area_files($context->id, 'mod_gradeimporter',
- 'submissionfiles', $data->id
- );
- foreach ($files as $file) {
- if ($file->get_mimetype() == 'text/csv') {
- read_csv($file->get_content(), $context, $data);
- return;
- }
- if ($file->get_mimetype() == 'application/zip') {
-
- $zipfiles = read_zip($file, $context, $fs);
-
- foreach ($zipfiles as $file) {
- if ($file->get_mimetype() == 'text/csv') {
-
- read_csv($file->get_content(), $context, $data, $zipfiles);
-
- }
- }
-
- $fs->delete_area_files($context->id, 'mod_gradeimporter', 'unpacktemp', 0);
- }
- }
- }
- function read_csv ($content, $context, $data, $zipfiles = null) {
- $csv = prepare_csv($content);
- foreach ($csv as $line => $feedback) {
- $feedback = fix_feedback($feedback, $line);
- $feedbackid = store_feedback($feedback, $context->id, $data->id);
- gradeimporter_update_grades($data, $feedback['id']);
- if ($feedback['file'] != "") {
-
- foreach ($zipfiles as $file) {
-
- if ($feedback['file'] == $file->get_filename()) {
- $feedbackfileinfo = store_feedback_file($feedback, $context, $data, $file, $feedbackid);
- break;
- }
- }
- }
- }
- }
- function prepare_csv ($content) {
- $csvlines = explode(PHP_EOL, $content);
- $csv = array();
- foreach ($csvlines as $line) {
- $csv[] = str_getcsv($line);
- }
- $header = array_shift($csv);
- $outputcsv = array();
- $outputcsv = array_map(
- function($v)use($header){
- return array_combine($header, $v);
- },
- $csv
- );
- return $outputcsv;
- }
- function store_feedback ($feedback, $contextid, $submissionid) {
- global $DB, $USER;
-
- $entry = feedback_exists($feedback, $submissionid);
- $isnewentry = false;
- if (!$entry) {
- $entry = new stdClass();
- $entry->id = null;
- $entry->timecreated = time();
- $entry->submissionid = $submissionid;
- $entry->studentid = $feedback['id'];
- $entry->contextid = $contextid;
- $isnewentry = true;
- } else {
-
-
- delete_feedback_files($entry);
- $DB->delete_records('gradeimporter_feedback',
- array('submissionid' => $submissionid,
- 'studentid' => $feedback['id'])
- );
- }
- $entry->timemodified = time();
- $entry->grade = $feedback['grade'];
- $entry->comment = $feedback['comment'];
- $entry->filename = $feedback['file'];
- $entry->usermodified = $USER->id;
-
- return $DB->insert_record('gradeimporter_feedback', $entry);
- }
- function store_feedback_file ($feedback, $context, $submission, $filetostore, $feedbackid) {
-
- $fs = get_file_storage();
-
- $fileinfo = array(
- 'contextid' => $context->id,
- 'component' => 'mod_gradeimporter',
- 'filearea' => 'submissionfiles',
- 'itemid' => $feedbackid,
- 'filepath' => "/",
- 'filename' => $filetostore->get_filename(),
- 'timecreated' => time(), 'timemodified' => time()
- );
-
- return $fs->create_file_from_storedfile($fileinfo, $filetostore);
- }
- function read_zip ($file, $context, $fs) {
- global $CFG;
-
- $packer = get_file_packer('application/zip');
-
- $fs->delete_area_files($context->id,
- 'mod_gradeimporter',
- 'unpacktemp'
- );
-
- $file->extract_to_storage($packer,
- $context->id,
- 'mod_gradeimporter',
- 'unpacktemp',
- 0,
- $CFG->tempdir,
- false
- );
-
- $tempfiles = $fs->get_area_files($context->id,
- 'mod_gradeimporter',
- 'unpacktemp'
- );
-
- return $tempfiles;
- }
- function get_types_array($gradeimporterid) {
- global $DB, $CFG;
-
- $tp = $CFG->prefix;
- $query = "select id, name from {$tp}gradeimporter_submissiontype where gradeimporterid = $gradeimporterid";
- return $DB->get_records_sql($query);
- }
- function validate_formdata($data) {
- if ($data->type == -1) {
- throw new moodle_exception(get_string('invalidtype', 'gradeimporter'));
- }
- }
- function feedback_exists($feedback, $submissionid) {
- global $DB;
- $feedback = $DB->get_record('gradeimporter_feedback',
- array('submissionid' => $submissionid,
- 'studentid' => $feedback['id']),
- );
- return $feedback;
- }
- function delete_feedback_files($feedback) {
- $fs = get_file_storage();
- $file = $fs->get_file($feedback->contextid, 'mod_gradeimporter', 'submissionfiles', $feedback->id, '/', $feedback->filename);
- if ($file) {
- $file->delete();
- }
- }
- function fix_feedback ($feedback, $line) {
- if ($feedback['id'] == "") {
- throw new moodle_exception(get_string('studentidmissing', 'gradeimporter'), $line);
- }
- if ($feedback['grade'] == "") {
- $feedback['grade'] = 0;
- }
- return $feedback;
- }
- function delete_feedback($feedback) {
- global $DB;
- delete_feedback_files($feedback);
- $DB->delete_records('gradeimporter_feedback',
- array('submissionid' => $feedback->submissionid,
- 'studentid' => $feedback->studentid)
- );
- }
|