. // Adds gradeimporter to add new activity page function tool_devcourse_extend_navigation_course($navigation, $course, $coursecontext) { $url = new moodle_url('/admin/tool/devcourse/index.php'); $devcoursenode = navigation_node::create('Development course', $url, navigation_node::TYPE_CUSTOM, 'Dev course', 'devcourse'); $navigation->add_node($devcoursenode); } function gradeimporter_supports($feature) { switch ($feature) { case FEATURE_MOD_ARCHETYPE: return MOD_ARCHETYPE_RESOURCE; case FEATURE_GROUPS: return false; case FEATURE_GROUPINGS: return false; case FEATURE_MOD_INTRO: return true; case FEATURE_COMPLETION_TRACKS_VIEWS: return true; case FEATURE_GRADE_HAS_GRADE: return false; case FEATURE_GRADE_OUTCOMES: return false; case FEATURE_BACKUP_MOODLE2: return true; default: return null; } } function gradeimporter_add_instance($data, $mform) { /* *Given an object containing all the necessary data, *(defined by the form in mod_form.php) this function *creates a new instance and returns the id of this new *instance. * *@param $data: an object from the form in mod_form.php *@return int: the id of the newly inserted gradeimport record */ global $DB; $data->timemodified = time(); $data->id = $DB->insert_record("gradeimporter", $data); return $data->id; } function gradeimporter_update_instance($data) { /* *given an object containing all the necessary data, *(defined by the form in mod_form.php) this function *updates an existing instance with the new data. * *@param $data: an object from the form mod_form.php *@return boolean: if the record update was a success of fail */ global $DB; $data->timemodified = time(); $data->id = $data->instance; return $DB->update_record('gradeimporter', $data); } function gradeimporter_delete_instance($data) { /* *Given an id of a gradeimporter instance, * this function permanently deletes the instance * and any data that depends on it. * *@param int $id: Id of the gradeimporter instance *@return boolean, if the deletion was a success or * a failure. */ global $DB; if (!$data = $DB->get_record('gradeimporter', array('id' => $id))) { return false; } $cm = get_coursemodule_from_instance('gradeimporter', $gradeimporter->id); $context = context_module::instance($cm->id); // Files $fs = get_file_storage(); $fs->delete_area_files($context->id, 'mod_gradeimporter'); // Delete all files and submissions associated with this instance $DB->delete_records('gradeimporter_submission', array('gradeimporterid' => $gradeimporter->id)); $DB->delete_records('gradeimporter_feedback', array('gradeimporterid' => $gradeimporter->id)); // Delete the instance itself $DB->delete_records('gradeimporter', array('id' => $id)); return true; } function gradeimporter_check_for_zips($context, $cm, $submission) { global $DB; $fs = get_file_storage(); $files = $fs->get_area_files($context->id, 'mod_gradeimporter', 'submission', $submission->id, "itemid, filepath, filename", false); foreach ($files as $storedfile) { if ($storedfile->get_mimetype() == 'application/zip') { // Unpack zip $packer = get_file_packer('application/zip'); $fs->delete_area_files($context->id, 'mod_gradeimporter', 'unpacktemp', 0); $storedfile->extract_to_storage($packer, $context->id, 'mod_gradeimporter', 'unpacktemp', 0, "item, filepath, filename", false ); $tempfiles = $fs->get_area_files($context->id, 'mod_gradeimporter', 'unpacktemp', 0, "itemid, filepath, filename", false); if (count($tempfiles) > 0) { $storedfile->delete(); // Delete the zip foreach ($tempfiles as $storedfile) { if ($storedfile->get_mimetype() == 'text/csv') { $csvdata = $storedfile->get_content(); $csvlines = explode(PHP_EOL, $csvdata); $csv = array(); foreach ($csvlines as $line) { $csv[] = str_getcsv($line); } // array_map('str_getcsv', $storedfile->get_content() ); array_walk($csv, function (&$a) use ($csv) { // Adds first row as keys $a = array_combine($csv[0], $a); }); array_shift($csv); // Remove column header for ($i = 0; $i < count($csv); $i++) { foreach ($tempfiles as $storedfile) { if ($storedfile->get_filename() == $csv[$i]['file']) { $dbentry = new stdClass(); $dbentry->id = null; $dbentry->submissionid = $submission->id; $dbentry->studentid = $csv[$i]['id']; $dbentry->grade = $csv[$i]['grade']; $dbentry->comment = $csv[$i]['comment']; $dbentry->fileid = $submission->id; $dbentry->usermodified = 0; $dbentry->timecreated = time(); $dbentry->timemodified = time(); $dbentry->contextid = $context->id; $dbentry->name = $csv[$i]['file']; $dbentry->id = $DB->insert_record('gradeimporter_feedback', $dbentry); $fileinfo = array( 'contextid' => $context->id, 'component' => 'mod_gradeimporter', 'filearea' => 'gradeimporter_feedback', 'itemid' => $dbentry->id, 'filepath' => '/', 'filename' => $csv[$i]['file'] ); $fs->create_file_from_storedfile($fileinfo, $storedfile); break; } } } } } } $fs->delete_area_files($context->id, 'mod_gradeimporter', 'unpacktemp', 0); } } }