|
@@ -15,183 +15,190 @@
|
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
function create_submission ($data, $gradeimporterid, $userid) {
|
|
function create_submission ($data, $gradeimporterid, $userid) {
|
|
- global $DB;
|
|
|
|
- $timenow = time();
|
|
|
|
- if (empty($data->id)) {
|
|
|
|
- // If is new db entry;
|
|
|
|
- $data->gradeimporterid = $gradeimporterid;
|
|
|
|
- $data->usermodified = $userid;
|
|
|
|
- $data->timecreated = $timenow;
|
|
|
|
-
|
|
|
|
- $isnewentry = true;
|
|
|
|
- } else {
|
|
|
|
- $isnewentry = false;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- $data->descriptionformat = $data->description["format"];
|
|
|
|
- $data->description = $data->description["text"];
|
|
|
|
- $data->timemodified = $timenow;
|
|
|
|
- $data->position = -1; // Do later
|
|
|
|
-
|
|
|
|
- if ($isnewentry) {
|
|
|
|
- // If is new entry insert data into DB and gets id
|
|
|
|
- $data->id = $DB->insert_record('gradeimporter_submission', $data);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // If not new entry updates information
|
|
|
|
- // If new entry inserts id into DB
|
|
|
|
- $DB->update_record('gradeimporter_submission', $data);
|
|
|
|
-
|
|
|
|
- return $data;
|
|
|
|
|
|
+ global $DB;
|
|
|
|
+ $timenow = time();
|
|
|
|
+ if (empty($data->id)) {
|
|
|
|
+ // If is new db entry;
|
|
|
|
+ $data->gradeimporterid = $gradeimporterid;
|
|
|
|
+ $data->usermodified = $userid;
|
|
|
|
+ $data->timecreated = $timenow;
|
|
|
|
+
|
|
|
|
+ $isnewentry = true;
|
|
|
|
+ } else {
|
|
|
|
+ $isnewentry = false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $data->descriptionformat = $data->description["format"];
|
|
|
|
+ $data->description = $data->description["text"];
|
|
|
|
+ $data->timemodified = $timenow;
|
|
|
|
+ $data->position = -1; // Do later
|
|
|
|
+
|
|
|
|
+ if ($isnewentry) {
|
|
|
|
+ // If is new entry insert data into DB and gets id
|
|
|
|
+ $data->id = $DB->insert_record('gradeimporter_submission', $data);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // If not new entry updates information
|
|
|
|
+ // If new entry inserts id into DB
|
|
|
|
+ $DB->update_record('gradeimporter_submission', $data);
|
|
|
|
+
|
|
|
|
+ return $data;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function store_files ($context, $cm, $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) {
|
|
|
|
|
|
+ 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') {
|
|
|
|
+ // If it is a .zip file, extract files from the zip
|
|
|
|
+ $zipfiles = read_zip($file, $context, $fs);
|
|
|
|
+ // Search a .csv file
|
|
|
|
+ foreach ($zipfiles as $file) {
|
|
|
|
+
|
|
if ($file->get_mimetype() == 'text/csv') {
|
|
if ($file->get_mimetype() == 'text/csv') {
|
|
- read_csv($file->get_content(), $context, $data);
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- if ($file->get_mimetype() == 'application/zip') {
|
|
|
|
- // If it is a .zip file, extract files from the zip
|
|
|
|
- $zipfiles = read_zip($file, $context, $fs);
|
|
|
|
- // Search a .csv file
|
|
|
|
- foreach ($zipfiles as $file) {
|
|
|
|
-
|
|
|
|
- if ($file->get_mimetype() == 'text/csv') {
|
|
|
|
- // If csv is found, pass it to read_csv()
|
|
|
|
- read_csv($file->get_content(), $context, $data, $zipfiles);
|
|
|
|
- // Only expects one csv so doesn't look for another
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- // Finished processing files from zip, so delete temp copies
|
|
|
|
- $fs->delete_area_files($context->id, 'mod_gradeimporter', 'unpacktemp', 0);
|
|
|
|
|
|
+ // If csv is found, pass it to read_csv()
|
|
|
|
+ read_csv($file->get_content(), $context, $data, $zipfiles);
|
|
|
|
+ // Only expects one csv so doesn't look for another
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
+ // Finished processing files from zip, so delete temp copies
|
|
|
|
+ $fs->delete_area_files($context->id, 'mod_gradeimporter', 'unpacktemp', 0);
|
|
}
|
|
}
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
function read_csv ($content, $context, $data, $zipfiles = null) {
|
|
function read_csv ($content, $context, $data, $zipfiles = null) {
|
|
|
|
|
|
- $csv = prepare_csv($content);
|
|
|
|
- foreach ($csv as $feedback) {
|
|
|
|
- $feedbackid = store_feedback($feedback, $context->id, $data->id);
|
|
|
|
- if ($feedback['file'] != "") {
|
|
|
|
- // If feedback has associated file, insert it into pluginfile
|
|
|
|
- foreach ($zipfiles as $file) {
|
|
|
|
- // Search in zipfiles to find same name then feedback['file']
|
|
|
|
- if ($feedback['file'] == $file->get_filename()) {
|
|
|
|
- $feedbackfileinfo = store_feedback_file($feedback, $context, $data, $file, $feedbackid);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- // Already used all files, so delete extra copies
|
|
|
|
-
|
|
|
|
|
|
+ $csv = prepare_csv($content);
|
|
|
|
+ foreach ($csv as $feedback) {
|
|
|
|
+ $feedbackid = store_feedback($feedback, $context->id, $data->id);
|
|
|
|
+ if ($feedback['file'] != "") {
|
|
|
|
+ // If feedback has associated file, insert it into pluginfile
|
|
|
|
+ foreach ($zipfiles as $file) {
|
|
|
|
+ // Search in zipfiles to find same name then feedback['file']
|
|
|
|
+ if ($feedback['file'] == $file->get_filename()) {
|
|
|
|
+ $feedbackfileinfo = store_feedback_file($feedback, $context, $data, $file, $feedbackid);
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
+ // Already used all files, so delete extra copies
|
|
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
function prepare_csv ($content) {
|
|
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;
|
|
|
|
|
|
+ $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) {
|
|
function store_feedback ($feedback, $contextid, $submissionid) {
|
|
- global $DB;
|
|
|
|
- // Prepare data to submit to gradeimporter_feedback table
|
|
|
|
- $entry = new stdClass();
|
|
|
|
- $entry->id = null;
|
|
|
|
-
|
|
|
|
- $entry->timecreated = time();
|
|
|
|
- $entry->timemodified = time();
|
|
|
|
-
|
|
|
|
- $entry->submissionid = $submissionid;
|
|
|
|
- $entry->studentid = $feedback['id'];
|
|
|
|
- $entry->grade = $feedback['grade'];
|
|
|
|
- $entry->comment = $feedback['comment'];
|
|
|
|
- $entry->name = $feedback['file'];
|
|
|
|
- $entry->fileid = 0;
|
|
|
|
- $entry->usermodified = 1;
|
|
|
|
- $entry->contextid = $contextid;
|
|
|
|
-
|
|
|
|
- // Insert data into gradeimporter_feedback table and gets ID
|
|
|
|
- $entry->id = $DB->insert_record('gradeimporter_feedback', $entry);
|
|
|
|
-
|
|
|
|
|
|
+ global $DB;
|
|
|
|
+ // Prepare data to submit to gradeimporter_feedback table
|
|
|
|
+ $entry = new stdClass();
|
|
|
|
+ $entry->id = null;
|
|
|
|
+
|
|
|
|
+ $entry->timecreated = time();
|
|
|
|
+ $entry->timemodified = time();
|
|
|
|
+
|
|
|
|
+ $entry->submissionid = $submissionid;
|
|
|
|
+ $entry->studentid = $feedback['id'];
|
|
|
|
+ $entry->grade = $feedback['grade'];
|
|
|
|
+ $entry->comment = $feedback['comment'];
|
|
|
|
+ $entry->name = $feedback['file'];
|
|
|
|
+ $entry->fileid = 0;
|
|
|
|
+ $entry->usermodified = 1;
|
|
|
|
+ $entry->contextid = $contextid;
|
|
|
|
+
|
|
|
|
+ // Insert data into gradeimporter_feedback table and gets ID
|
|
|
|
+ $entry->id = $DB->insert_record('gradeimporter_feedback', $entry);
|
|
|
|
+
|
|
|
|
+ return $entry->id;
|
|
}
|
|
}
|
|
|
|
|
|
function store_feedback_file ($feedback, $context, $submission, $filetostore, $feedbackid) {
|
|
function store_feedback_file ($feedback, $context, $submission, $filetostore, $feedbackid) {
|
|
- // Prepare file
|
|
|
|
- $fs = get_file_storage();
|
|
|
|
- $fileinfo = array(
|
|
|
|
- 'contextid' => $context->id,
|
|
|
|
- 'component' => 'mod_gradeimporter',
|
|
|
|
- 'filearea' => 'submissionfiles',
|
|
|
|
- 'itemid' => 0,
|
|
|
|
- 'filepath' => "/",
|
|
|
|
- 'filename' => $filetostore->get_filename(),
|
|
|
|
- 'timecreated' => time(), 'timemodified' => time()
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- $fileinfo = $fs->create_file_from_storedfile($fileinfo, $filetostore);
|
|
|
|
-
|
|
|
|
- return $fileinfo;
|
|
|
|
|
|
+ // Prepare file
|
|
|
|
+ $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()
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ $fileinfo = $fs->create_file_from_storedfile($fileinfo, $filetostore);
|
|
|
|
+
|
|
|
|
+ return $fileinfo;
|
|
}
|
|
}
|
|
|
|
|
|
function read_zip ($file, $context, $fs) {
|
|
function read_zip ($file, $context, $fs) {
|
|
- global $CFG;
|
|
|
|
- // Get file packer to unpack zip
|
|
|
|
- $packer = get_file_packer('application/zip');
|
|
|
|
-
|
|
|
|
- // Clear area_files if it has been used before
|
|
|
|
- $fs->delete_area_files($context->id,
|
|
|
|
- 'mod_gradeimporter',
|
|
|
|
- 'unpacktemp'
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- // Extract to temp areafiles
|
|
|
|
- $file->extract_to_storage($packer,
|
|
|
|
- $context->id,
|
|
|
|
- 'mod_gradeimporter',
|
|
|
|
- 'unpacktemp',
|
|
|
|
- 0,
|
|
|
|
- $CFG->tempdir,
|
|
|
|
- false
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- // Get extracted files from unpacktemp area file
|
|
|
|
- $tempfiles = $fs->get_area_files($context->id,
|
|
|
|
- 'mod_gradeimporter',
|
|
|
|
- 'unpacktemp'
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- // Returns an array of files object
|
|
|
|
- return $tempfiles;
|
|
|
|
|
|
+ global $CFG;
|
|
|
|
+ // Get file packer to unpack zip
|
|
|
|
+ $packer = get_file_packer('application/zip');
|
|
|
|
+
|
|
|
|
+ // Clear area_files if it has been used before
|
|
|
|
+ $fs->delete_area_files($context->id,
|
|
|
|
+ 'mod_gradeimporter',
|
|
|
|
+ 'unpacktemp'
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ // Extract to temp areafiles
|
|
|
|
+ $file->extract_to_storage($packer,
|
|
|
|
+ $context->id,
|
|
|
|
+ 'mod_gradeimporter',
|
|
|
|
+ 'unpacktemp',
|
|
|
|
+ 0,
|
|
|
|
+ $CFG->tempdir,
|
|
|
|
+ false
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ // Get extracted files from unpacktemp area file
|
|
|
|
+ $tempfiles = $fs->get_area_files($context->id,
|
|
|
|
+ 'mod_gradeimporter',
|
|
|
|
+ 'unpacktemp'
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ // Returns an array of files object
|
|
|
|
+ return $tempfiles;
|
|
}
|
|
}
|
|
|
|
|
|
function get_types_array($gradeimporterid) {
|
|
function get_types_array($gradeimporterid) {
|
|
- global $DB, $CFG;
|
|
|
|
- // Gets moodle table prefix, usually mdl_
|
|
|
|
- $tp = $CFG->prefix;
|
|
|
|
- $query = "select id, name from {$tp}gradeimporter_submissiontype where gradeimporterid = $gradeimporterid";
|
|
|
|
- return $DB->get_records_sql($query);
|
|
|
|
|
|
+ global $DB, $CFG;
|
|
|
|
+ // Gets moodle table prefix, usually mdl_
|
|
|
|
+ $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'));
|
|
|
|
+ }
|
|
}
|
|
}
|