From 0a062fdff5fc3c8af2db601fea1902c6f41daf93 Mon Sep 17 00:00:00 2001 From: skodak Date: Fri, 4 Jul 2008 20:48:18 +0000 Subject: [PATCH] MDL-14840 verbose scales in grade import; backported from HEAD --- grade/import/csv/index.php | 67 +++++++++++++++++++++--------- grade/import/grade_import_form.php | 23 ++++++++++ lang/en_utf8/grades.php | 1 + 3 files changed, 72 insertions(+), 19 deletions(-) diff --git a/grade/import/csv/index.php b/grade/import/csv/index.php index 36d42847ee4..7f820a993d5 100755 --- a/grade/import/csv/index.php +++ b/grade/import/csv/index.php @@ -28,7 +28,9 @@ require_once $CFG->dirroot.'/grade/lib.php'; require_once '../grade_import_form.php'; require_once '../lib.php'; -$id = required_param('id', PARAM_INT); // course id +$id = required_param('id', PARAM_INT); // course id +$separator = optional_param('separator', '', PARAM_ALPHA); +$verbosescales = optional_param('verbosescales', 1, PARAM_BOOL); if (!$course = get_record('course', 'id', $id)) { print_error('nocourseid'); @@ -40,7 +42,6 @@ require_capability('moodle/grade:import', $context); require_capability('gradeimport/csv:view', $context); // sort out delimiter -$csv_encode = '/\&\#44/'; if (isset($CFG->CSV_DELIMITER)) { $csv_delimiter = '\\' . $CFG->CSV_DELIMITER; $csv_delimiter2 = $CFG->CSV_DELIMITER; @@ -48,9 +49,14 @@ if (isset($CFG->CSV_DELIMITER)) { if (isset($CFG->CSV_ENCODE)) { $csv_encode = '/\&\#' . $CFG->CSV_ENCODE . '/'; } +} else if ($separator == 'tab') { + $csv_delimiter = "\t"; + $csv_delimiter2 = ""; + $csv_encode = ""; } else { $csv_delimiter = "\,"; $csv_delimiter2 = ","; + $csv_encode = '/\&\#44/'; } $strgrades = get_string('grades', 'grades'); @@ -61,7 +67,7 @@ print_header($course->shortname.': '.get_string('grades'), $course->fullname, $n print_grade_plugin_selector($id, 'import', 'csv'); // set up import form -$mform = new grade_import_form(); +$mform = new grade_import_form(null, array('includeseparator'=>!isset($CFG->CSV_DELIMITER), 'verbosescales'=>true)); // set up grade import mapping form $header = ''; @@ -148,7 +154,7 @@ if ($formdata = $mform->get_data()) { // display the mapping form with header info processed $mform2 = new grade_import_mapping_form(null, array('gradeitems'=>$gradeitems, 'header'=>$header)); - $mform2->set_data(array('importcode'=>$importcode, 'id'=>$id)); + $mform2->set_data(array('importcode'=>$importcode, 'id'=>$id, 'verbosescales'=>$verbosescales, 'separator'=>$separator)); $mform2->display(); //} else if (($formdata = data_submitted()) && !empty($formdata->map)) { @@ -235,7 +241,10 @@ if ($formdata = $mform->get_data()) { foreach ($line as $key => $value) { //decode encoded commas $value = clean_param($value, PARAM_RAW); - $value = preg_replace($csv_encode,$csv_delimiter2,trim($value)); + $value = trim($value); + if ($csv_encode != $csv_delimiter2) { + $value = preg_replace($csv_encode, $csv_delimiter2, $value); + } /* * the options are @@ -343,19 +352,6 @@ if ($formdata = $mform->get_data()) { default: // existing grade items 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 - echo "
t0 is $t0"; - echo "
grade is $value"; - $status = false; - import_cleanup($importcode); - notify(get_string('badgrade', 'grades')); - break 3; - } - // case of an id, only maps id of a grade_item // this was idnumber if (!$gradeitem = new grade_item(array('id'=>$map[$key], 'courseid'=>$course->id))) { @@ -377,7 +373,40 @@ if ($formdata = $mform->get_data()) { $newgrade = new object(); $newgrade->itemid = $gradeitem->id; - $newgrade->finalgrade = $value; + if ($gradeitem->gradetype == GRADE_TYPE_SCALE and $verbosescales) { + if ($value === '' or $value == '-') { + $value = null; // no grade + } else { + $scale = $gradeitem->load_scale(); + $scales = explode(',', $scale->scale); + array_unshift($scales, '-'); // scales start at key 1 + $key = array_search($value, $scales); + if ($key === false) { + echo "
t0 is $t0"; + echo "
grade is $value"; + $status = false; + import_cleanup($importcode); + notify(get_string('badgrade', 'grades')); + break 3; + } + $value = $key; + } + $newgrade->finalgrade = $value; + } else { + if ($value === '' or $value == '-') { + $value = null; // no grade + + } else if (!is_numeric($value)) { + // non numeric grade value supplied, possibly mapped wrong column + echo "
t0 is $t0"; + echo "
grade is $value"; + $status = false; + import_cleanup($importcode); + notify(get_string('badgrade', 'grades')); + break 3; + } + $newgrade->finalgrade = $value; + } $newgrades[] = $newgrade; } // otherwise, we ignore this column altogether // because user has chosen to ignore them (e.g. institution, address etc) diff --git a/grade/import/grade_import_form.php b/grade/import/grade_import_form.php index 4ac9b4a3d62..ee0d9ce4508 100755 --- a/grade/import/grade_import_form.php +++ b/grade/import/grade_import_form.php @@ -29,6 +29,12 @@ class grade_import_form extends moodleform { function definition (){ $mform =& $this->_form; + if (isset($this->_customdata)) { // hardcoding plugin names here is hacky + $features = $this->_customdata; + } else { + $features = array(); + } + // course id needs to be passed for auth purposes $mform->addElement('hidden', 'id', optional_param('id')); $mform->setType('id', PARAM_INT); @@ -41,6 +47,19 @@ class grade_import_form extends moodleform { $encodings = $textlib->get_encodings(); $mform->addElement('select', 'encoding', get_string('encoding', 'grades'), $encodings); + if (!empty($features['includeseparator'])) { + $radio = array(); + $radio[] = &MoodleQuickForm::createElement('radio', 'separator', null, get_string('septab', 'grades'), 'tab'); + $radio[] = &MoodleQuickForm::createElement('radio', 'separator', null, get_string('sepcomma', 'grades'), 'comma'); + $mform->addGroup($radio, 'separator', get_string('separator', 'grades'), ' ', false); + $mform->setDefault('separator', 'comma'); + } + + if (!empty($features['verbosescales'])) { + $options = array(1=>get_string('yes'), 0=>get_string('no')); + $mform->addElement('select', 'verbosescales', get_string('verbosescales', 'grades'), $options); + } + $options = array('10'=>10, '20'=>20, '100'=>100, '1000'=>1000, '100000'=>100000); $mform->addElement('select', 'previewrows', get_string('rowpreviewnum', 'grades'), $options); // TODO: localize $mform->setType('previewrows', PARAM_INT); @@ -106,6 +125,10 @@ class grade_import_mapping_form extends moodleform { $mform->setType('id', PARAM_INT); $mform->addElement('hidden', 'importcode'); $mform->setType('importcode', PARAM_FILE); + $mform->addElement('hidden', 'verbosescales', 1); + $mform->setType('separator', PARAM_ALPHA); + $mform->addElement('hidden', 'separator', 'comma'); + $mform->setType('verbosescales', PARAM_INT); $this->add_action_buttons(false, get_string('uploadgrades', 'grades')); } diff --git a/lang/en_utf8/grades.php b/lang/en_utf8/grades.php index c0d2a8dfb52..3ce6a3b6065 100644 --- a/lang/en_utf8/grades.php +++ b/lang/en_utf8/grades.php @@ -506,6 +506,7 @@ $string['usergrade'] = 'User $a->fullname ($a->useridnumber) on item $a->gradeid $string['userkeyhelp'] = 'Select a saved key that will give users access to the data published by this export plugin, without having to log into Moodle. Select `create a new user key` to generate a new key when submitting this form.'; $string['userpreferences'] = 'User preferences'; $string['useweighted'] = 'Use weighted'; +$string['verbosescales'] = 'Verbose scales'; $string['viewbygroup'] = 'Group'; $string['viewgrades'] = 'View grades'; $string['weight'] = 'weight';