$displaytype = null;
if ($this->export_letters) {
$displaytype = GRADE_DISPLAY_TYPE_LETTER;
+ } else {
+ $displaytype = GRADE_DISPLAY_TYPE_REAL;
}
return grade_format_gradevalue($grade->finalgrade, $this->grade_items[$grade->itemid], false, $displaytype, null);
// they are somehow not returned with get_data()
if (($formdata = data_submitted()) && !empty($formdata->map)) {
- // temporary file name supplied by form
- $filename = $CFG->dataroot.'/temp/'.clean_param($formdata->filename, PARAM_FILE);
+ $importcode = clean_param($formdata->importcode, PARAM_FILE);
+ $filename = $CFG->dataroot.'/temp/gradeimport/cvs/'.$USER->id.'/'.$importcode;
+
+ if (!file_exists($filename)) {
+ error('error processing upload file');
+ }
if ($fp = fopen($filename, "r")) {
// --- get header (field names) ---
$h = trim($h); $header[$i] = $h; // remove whitespace
}
} else {
- error ('could not open file '.$filename);
+ error ('could not open file');
}
$map = array();
} else {
// collision
unlink($filename); // needs to be uploaded again, sorry
- error('mapping collision detected, 2 fields maps to the same grdae item '.$j);
+ error('mapping collision detected, 2 fields maps to the same grade item '.$j);
}
}
}
if ($fp = fopen($filename, "r")) {
// read the first line makes sure this doesn't get read again
- $header = split($csv_delimiter, clean_param(fgets($fp,1024), PARAM_RAW));
-
- // use current (non-conflicting) time stamp
- $importcode = time();
- while (get_record('grade_import_values', 'import_code', $importcode)) {
- $importcode = time();
- }
+ $header = split($csv_delimiter, fgets($fp,1024));
$newgradeitems = array(); // temporary array to keep track of what new headers are processed
$status = true;
$t = explode("_", $map[$key]);
$t0 = $t[0];
if (isset($t[1])) {
- $t1 = $t[1];
+ $t1 = (int)$t[1];
} else {
$t1 = '';
}
$newgradeitem = new object();
$newgradeitem->itemname = $header[$key];
- $newgradeitem->import_code = $importcode;
+ $newgradeitem->importcode = $importcode;
+ $newgradeitem->importer = $USER->id;
// failed to insert into new grade item buffer
if (!$newgradeitems[$key] = insert_record('grade_import_newitem', addslashes_recursive($newgradeitem))) {
break;
case 'feedback':
if ($t1) {
+ // case of an id, only maps id of a grade_item
+ // this was idnumber
+ if (!$gradeitem = new grade_item(array('id'=>$t1, 'courseid'=>$course->id))) {
+ // supplied bad mapping, should not be possible since user
+ // had to pick mapping
+ $status = false;
+ import_cleanup($importcode);
+ notify(get_string('importfailed', 'grades'));
+ break 3;
+ }
+
// t1 is the id of the grade item
$feedback = new object();
$feedback->itemid = $t1;
break;
default:
// existing grade items
- if (!empty($map[$key]) && $value!=="") {
+ if (!empty($map[$key])) {
+ if ($value === '' or $value == '-') {
+ $value = null; // no grade
+ } else if (!is_numeric($value)) {
// non numeric grade value supplied, possibly mapped wrong column
- if (!is_numeric($value)) {
echo "<br/>t0 is $t0";
echo "<br/>grade is $value";
$status = false;
}
// check if grade item is locked if so, abort
- if ($gradeitem->locked) {
+ if ($gradeitem->is_locked()) {
$status = false;
import_cleanup($importcode);
notify(get_string('gradeitemlocked', 'grades'));
}
// insert results of this students into buffer
- if (!empty($newgrades)) {
+ if ($status and !empty($newgrades)) {
foreach ($newgrades as $newgrade) {
// check if grade_grade is locked and if so, abort
- if ($grade_grade = new grade_grade(array('itemid'=>$newgrade->itemid, 'userid'=>$studentid))) {
- if ($grade_grade->locked) {
+ if (!empty($newgrade->itemid) and $grade_grade = new grade_grade(array('itemid'=>$newgrade->itemid, 'userid'=>$studentid))) {
+ if ($grade_grade->is_locked()) {
// individual grade locked
$status = false;
import_cleanup($importcode);
}
}
- $newgrade->import_code = $importcode;
- $newgrade->userid = $studentid;
+ $newgrade->importcode = $importcode;
+ $newgrade->userid = $studentid;
+ $newgrade->importer = $USER->id;
if (!insert_record('grade_import_values', addslashes_recursive($newgrade))) {
// could not insert into temporary table
$status = false;
}
// updating/inserting all comments here
- if (!empty($newfeedbacks)) {
+ if ($status and !empty($newfeedbacks)) {
foreach ($newfeedbacks as $newfeedback) {
- if ($feedback = get_record('grade_import_values', 'import_code', $importcode, 'userid', $studentid, 'itemid', $newfeedback->itemid)) {
- $newfeedback ->id = $feedback ->id;
+ $sql = "SELECT *
+ FROM {$CFG->prefix}grade_import_values
+ WHERE importcode=$importcode AND userid=$studentid AND itemid=$newfeedback->itemid AND importer={$USER->id}";
+ if ($feedback = get_record_sql($sql)) {
+ $newfeedback->id = $feedback->id;
update_record('grade_import_values', addslashes_recursive($newfeedback));
+
} else {
// the grade item for this is not updated
- $newfeedback->import_code = $importcode;
- $newfeedback->userid = $studentid;
+ $newfeedback->importcode = $importcode;
+ $newfeedback->userid = $studentid;
+ $newfeedback->importer = $USER->id;
insert_record('grade_import_values', addslashes_recursive($newfeedback));
}
}
}
} else if ($formdata = $mform->get_data()) {
- // else if file is just uploaded
- $filename = $mform->get_userfile_name();
// Large files are likely to take their time and memory. Let PHP know
// that we'll take longer, and that the process should be recycled soon
@apache_child_terminate();
}
- $text = my_file_get_contents($filename);
+ // use current (non-conflicting) time stamp
+ $importcode = get_new_importcode();
+ if (!$filename = make_upload_directory('temp/gradeimport/cvs/'.$USER->id, true)) {
+ die;
+ }
+ $filename = $filename.'/'.$importcode;
+
+ $text = $mform->get_file_content('userfile');
// trim utf-8 bom
$textlib = textlib_get_instance();
/// normalize line endings and do the encoding conversion
$fp = fopen($filename, "r");
// --- get header (field names) ---
- $header = split($csv_delimiter, clean_param(fgets($fp,1024), PARAM_RAW));
+ $header = split($csv_delimiter, fgets($fp,1024), PARAM_RAW);
// print some preview
$numlines = 0; // 0 preview lines displayed
}
}
// display the mapping form with header info processed
- $mform2 = new grade_import_mapping_form(qualified_me(), array('gradeitems'=>$gradeitems, 'header'=>$header, 'filename'=>$filename));
+ $mform2 = new grade_import_mapping_form(null, array('gradeitems'=>$gradeitems, 'header'=>$header));
+ $mform2->set_data(array('importcode'=>$importcode, 'id'=>$id));
$mform2->display();
} else {
// display the standard upload file form
<?php // $Id$
require_once $CFG->libdir.'/formslib.php';
+require_once($CFG->libdir.'/gradelib.php');
class grade_import_form extends moodleform {
function definition (){
$mform->addElement('select', 'encoding', get_string('encoding', 'grades'), $encodings);
$options = array('10'=>10, '20'=>20, '100'=>100, '1000'=>1000, '100000'=>100000);
- $mform->addElement('select', 'previewrows', 'Preview rows', $options); // TODO: localize
+ $mform->addElement('select', 'previewrows', get_string('rowpreviewnum', 'grades'), $options); // TODO: localize
$mform->setType('previewrows', PARAM_INT);
$this->add_action_buttons(false, get_string('uploadgrades', 'grades'));
}
-
- function get_userfile_name(){
- if ($this->is_submitted() and $this->is_validated()) {
- // return the temporary filename to process
- return $this->_upload_manager->files['userfile']['tmp_name'];
- } else{
- return NULL;
- }
- }
}
class grade_import_mapping_form extends moodleform {
// this is an array of headers
$header = $this->_customdata['header'];
- // temporary filename
- $filename = $this->_customdata['filename'];
// course id
$mform->addElement('header', 'general', get_string('identifier', 'grades'));
}
}
- include_once($CFG->libdir.'/gradelib.php');
-
if ($header) {
$i = 0; // index
foreach ($header as $h) {
}
}
- // find a non-conflicting file name based on time stamp
- $newfilename = 'cvstemp_'.time();
- while (file_exists($CFG->dataroot.'/temp/'.$newfilename)) {
- $newfilename = 'cvstemp_'.time();
- }
-
- // move the uploaded file
- move_uploaded_file($filename, $CFG->dataroot.'/temp/'.$newfilename);
-
// course id needs to be passed for auth purposes
$mform->addElement('hidden', 'map', 1);
$mform->setType('map', PARAM_INT);
- $mform->addElement('hidden', 'id', optional_param('id'));
+ $mform->addElement('hidden', 'id');
$mform->setType('id', PARAM_INT);
- //echo '<input name="filename" value='.$newfilename.' type="hidden" />';
- $mform->addElement('hidden', 'filename', $newfilename);
- $mform->setType('filename', PARAM_FILE);
+ $mform->addElement('hidden', 'importcode');
+ $mform->setType('importcode', PARAM_FILE);
$this->add_action_buttons(false, get_string('uploadgrades', 'grades'));
}
<?php // $Id$
+require_once($CFG->libdir.'/gradelib.php');
+
+/**
+ * Returns new improtcode for current user
+ * @return int importcode
+ */
+function get_new_importcode() {
+ global $USER;
+
+ $importcode = time();
+ while (get_record('grade_import_values', 'importcode', $importcode, 'importer', $USER->id)) {
+ $importcode--;
+ }
+
+ return $importcode;
+}
+
/**
* given an import code, commits all entries in buffer tables
* (grade_import_value and grade_import_newitem)
* @return bool success
*/
function grade_import_commit($courseid, $importcode, $importfeedback=true, $verbose=true) {
- global $CFG;
+ global $CFG, $USER;
- include_once($CFG->libdir.'/gradelib.php');
- include_once($CFG->libdir.'/grade/grade_item.php');
$commitstart = time(); // start time in case we need to roll back
$newitemids = array(); // array to hold new grade_item ids from grade_import_newitem table, mapping array
/// first select distinct new grade_items with this batch
if ($newitems = get_records_sql("SELECT *
- FROM {$CFG->prefix}grade_import_newitem
- WHERE import_code = $importcode")) {
+ FROM {$CFG->prefix}grade_import_newitem
+ WHERE importcode = $importcode AND importer={$USER->id}")) {
// instances of the new grade_items created, cached
// in case grade_update fails, so that we can remove them
/// then find all existing items
if ($gradeitems = get_records_sql("SELECT DISTINCT (itemid)
- FROM {$CFG->prefix}grade_import_values
- WHERE import_code = $importcode
- AND itemid > 0")) {
+ FROM {$CFG->prefix}grade_import_values
+ WHERE importcode = $importcode AND importer={$USER->id} AND itemid > 0")) {
$modifieditems = array();
- foreach ($gradeitems as $itemid=>$iteminfo) {
+ foreach ($gradeitems as $itemid=>$notused) {
if (!$gradeitem = new grade_item(array('id'=>$itemid))) {
// not supposed to happen, but just in case
* @param string importcode - import batch identifier
*/
function import_cleanup($importcode) {
+ global $USER;
+
// remove entries from buffer table
- delete_records('grade_import_values', 'import_code', $importcode);
- delete_records('grade_import_newitem', 'import_code', $importcode);
+ delete_records('grade_import_values', 'importcode', $importcode, 'importer', $USER->id);
+ delete_records('grade_import_newitem', 'importcode', $importcode, 'importer', $USER->id);
}
-/// Returns the file as one big long string
-function my_file_get_contents($filename, $use_include_path = 0) {
-
- $data = "";
- $file = @fopen($filename, "rb", $use_include_path);
- if ($file) {
- while (!feof($file)) {
- $data .= fread($file, 1024);
- }
- fclose($file);
- }
- return $data;
-}
?>
require_once $CFG->dirroot.'/grade/import/lib.php';
function import_xml_grades($text, $course, &$error) {
- $importcode = time(); //TODO: fix predictable+colliding import code!
+ global $USER;
+
+ $importcode = get_new_importcode();
$status = true;
// check if grade_grade is locked and if so, abort
if ($grade_grade = new grade_grade(array('itemid'=>$grade_item->id, 'userid'=>$user->id))) {
+ $grade_grade->grade_item =& $grade_item;
if ($grade_grade->is_locked()) {
// individual grade locked, abort
$status = false;
}
$newgrade = new object();
- $newgrade->itemid = $grade_item->id;
- $newgrade->userid = $user->id;
- $newgrade->import_code = $importcode;
+ $newgrade->itemid = $grade_item->id;
+ $newgrade->userid = $user->id;
+ $newgrade->importcode = $importcode;
+ $newgrade->importer = $USER->id;
// check grade value exists and is a numeric grade
if (isset($result['#']['score'][0]['#'])) {
$string['reportplugins'] = 'Report plugins';
$string['reportsettings'] = 'Report settings';
$string['reprintheaders'] = 'Reprint Headers';
-$string['respectingcurrentdata'] = "leaving current configuration unmodified";
+$string['respectingcurrentdata'] = 'leaving current configuration unmodified';
$string['right'] = 'Right';
+$string['rowpreviewnum'] = 'Preview rows';
$string['savechanges'] = 'Save Changes';
$string['savepreferences'] = 'Save Preferences';
$string['scaledpct'] = 'Scaled %%';
<?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="lib/db" VERSION="20071002" COMMENT="XMLDB file for core Moodle tables"
+<XMLDB PATH="lib/db" VERSION="20071007" COMMENT="XMLDB file for core Moodle tables"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../lib/xmldb/xmldb.xsd"
>
<TABLE NAME="grade_import_newitem" COMMENT="temporary table for storing new grade_item names from grade import" PREVIOUS="grade_grades_history" NEXT="grade_import_values">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="itemname"/>
- <FIELD NAME="itemname" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" ENUM="false" COMMENT="new grade item name" PREVIOUS="id" NEXT="import_code"/>
- <FIELD NAME="import_code" TYPE="int" LENGTH="12" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" COMMENT="import batch code for identification" PREVIOUS="itemname"/>
+ <FIELD NAME="itemname" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" ENUM="false" COMMENT="new grade item name" PREVIOUS="id" NEXT="importcode"/>
+ <FIELD NAME="importcode" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" COMMENT="import batch code for identification" PREVIOUS="itemname" NEXT="importer"/>
+ <FIELD NAME="importer" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" COMMENT="user importing the data" PREVIOUS="importcode"/>
</FIELDS>
<KEYS>
- <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+ <KEY NAME="primary" TYPE="primary" FIELDS="id" NEXT="importer"/>
+ <KEY NAME="importer" TYPE="foreign" FIELDS="importer" REFTABLE="user" REFFIELDS="id" PREVIOUS="primary"/>
</KEYS>
</TABLE>
<TABLE NAME="grade_import_values" COMMENT="Temporary table for importing grades" PREVIOUS="grade_import_newitem" NEXT="tag">
<FIELD NAME="itemid" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" COMMENT="if set, this points to existing grade_items id" PREVIOUS="id" NEXT="newgradeitem"/>
<FIELD NAME="newgradeitem" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" COMMENT="if set, points to the id of grade_import_newitem" PREVIOUS="itemid" NEXT="userid"/>
<FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="newgradeitem" NEXT="finalgrade"/>
- <FIELD NAME="finalgrade" TYPE="number" LENGTH="10" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" DECIMALS="5" COMMENT="raw grade value" PREVIOUS="userid" NEXT="feedback"/>
- <FIELD NAME="feedback" TYPE="text" LENGTH="medium" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="finalgrade" NEXT="import_code"/>
- <FIELD NAME="import_code" TYPE="int" LENGTH="12" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" COMMENT="similar to backup_code, a unique batch code for identifying one batch of imports" PREVIOUS="feedback"/>
+ <FIELD NAME="finalgrade" TYPE="number" LENGTH="10" NOTNULL="false" UNSIGNED="false" SEQUENCE="false" ENUM="false" DECIMALS="5" COMMENT="raw grade value" PREVIOUS="userid" NEXT="feedback"/>
+ <FIELD NAME="feedback" TYPE="text" LENGTH="medium" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="finalgrade" NEXT="importcode"/>
+ <FIELD NAME="importcode" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" COMMENT="similar to backup_code, a unique batch code for identifying one batch of imports" PREVIOUS="feedback" NEXT="importer"/>
+ <FIELD NAME="importer" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="importcode"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" NEXT="itemid"/>
<KEY NAME="itemid" TYPE="foreign" FIELDS="itemid" REFTABLE="grade_items" REFFIELDS="id" PREVIOUS="primary" NEXT="newgradeitem"/>
- <KEY NAME="newgradeitem" TYPE="foreign" FIELDS="newgradeitem" REFTABLE="grade_import_newitem" REFFIELDS="id" PREVIOUS="itemid"/>
+ <KEY NAME="newgradeitem" TYPE="foreign" FIELDS="newgradeitem" REFTABLE="grade_import_newitem" REFFIELDS="id" PREVIOUS="itemid" NEXT="importer"/>
+ <KEY NAME="importer" TYPE="foreign" FIELDS="importer" REFTABLE="user" REFFIELDS="id" COMMENT="user who is importing" PREVIOUS="newgradeitem"/>
</KEYS>
</TABLE>
<TABLE NAME="tag" COMMENT="Tag table - this generic table will replace the old "tags" table." PREVIOUS="grade_import_values" NEXT="tag_correlation">
/// Launch create table for grade_grades_history
$result = $result && create_table($table);
-
- /// Define table grade_import_newitem to be created
- $table = new XMLDBTable('grade_import_newitem');
-
- /// Adding fields to table grade_import_newitem
- $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
- $table->addFieldInfo('itemname', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null);
- $table->addFieldInfo('import_code', XMLDB_TYPE_INTEGER, '12', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
-
- /// Adding keys to table grade_import_newitem
- $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
-
- /// Launch create table for grade_import_newitem
- $result = $result && create_table($table);
-
-
- /// Define table grade_import_values to be created
- $table = new XMLDBTable('grade_import_values');
-
- /// Adding fields to table grade_import_values
- $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
- $table->addFieldInfo('itemid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
- $table->addFieldInfo('newgradeitem', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
- $table->addFieldInfo('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
- $table->addFieldInfo('finalgrade', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0');
- $table->addFieldInfo('feedback', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null);
- $table->addFieldInfo('import_code', XMLDB_TYPE_INTEGER, '12', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
-
- /// Adding keys to table grade_import_values
- $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
- $table->addKeyInfo('itemid', XMLDB_KEY_FOREIGN, array('itemid'), 'grade_items', array('id'));
- $table->addKeyInfo('newgradeitem', XMLDB_KEY_FOREIGN, array('newgradeitem'), 'grade_import_newitem', array('id'));
-
- /// Launch create table for grade_import_values
- $result = $result && create_table($table);
-
/// upgrade the old 1.8 gradebook - migrade data into new grade tables
if ($result) {
require_once($CFG->libdir.'/db/upgradelib.php');
$result = $result && change_field_notnull($table, $field);
}
+ if ($result && $oldversion < 2007100700) {
+
+ /// first drop existing tables - we do not need any data from there
+ $table = new XMLDBTable('grade_import_values');
+ if (table_exists($table)) {
+ drop_table($table);
+ }
+
+ $table = new XMLDBTable('grade_import_newitem');
+ if (table_exists($table)) {
+ drop_table($table);
+ }
+
+ /// Define table grade_import_newitem to be created
+ $table = new XMLDBTable('grade_import_newitem');
+
+ /// Adding fields to table grade_import_newitem
+ $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
+ $table->addFieldInfo('itemname', XMLDB_TYPE_CHAR, '255', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
+ $table->addFieldInfo('importcode', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
+ $table->addFieldInfo('importer', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
+
+ /// Adding keys to table grade_import_newitem
+ $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
+ $table->addKeyInfo('importer', XMLDB_KEY_FOREIGN, array('importer'), 'user', array('id'));
+
+ /// Launch create table for grade_import_newitem
+ $result = $result && create_table($table);
+
+
+ /// Define table grade_import_values to be created
+ $table = new XMLDBTable('grade_import_values');
+
+ /// Adding fields to table grade_import_values
+ $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
+ $table->addFieldInfo('itemid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
+ $table->addFieldInfo('newgradeitem', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
+ $table->addFieldInfo('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
+ $table->addFieldInfo('finalgrade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, null, null);
+ $table->addFieldInfo('feedback', XMLDB_TYPE_TEXT, 'medium', XMLDB_UNSIGNED, null, null, null, null, null);
+ $table->addFieldInfo('importcode', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
+ $table->addFieldInfo('importer', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null);
+
+ /// Adding keys to table grade_import_values
+ $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
+ $table->addKeyInfo('itemid', XMLDB_KEY_FOREIGN, array('itemid'), 'grade_items', array('id'));
+ $table->addKeyInfo('newgradeitem', XMLDB_KEY_FOREIGN, array('newgradeitem'), 'grade_import_newitem', array('id'));
+ $table->addKeyInfo('importer', XMLDB_KEY_FOREIGN, array('importer'), 'user', array('id'));
+
+ /// Launch create table for grade_import_values
+ $result = $result && create_table($table);
+
+ }
+
/* NOTE: please keep this at the end of upgrade file for now ;-)
/// drop old gradebook tables
// This is compared against the values stored in the database to determine
// whether upgrades should be performed (see lib/db/*.php)
- $version = 2007100500; // YYYYMMDD = date
+ $version = 2007100700; // YYYYMMDD = date
// XY = increments within a single day
$release = '1.9 Beta +'; // Human-friendly version name