From: skodak Date: Sun, 7 Oct 2007 10:22:21 +0000 (+0000) Subject: MDL-11622, MDL-11623 xml import/export now uses user idnumber; feedback optional... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=3405820739dfb54f98d8fba21e7af638238e108c;p=moodle.git MDL-11622, MDL-11623 xml import/export now uses user idnumber; feedback optional; related bugfixing --- diff --git a/grade/export/xml/grade_export_xml.php b/grade/export/xml/grade_export_xml.php index 886ee7c6ad..b94eb5537c 100755 --- a/grade/export/xml/grade_export_xml.php +++ b/grade/export/xml/grade_export_xml.php @@ -63,6 +63,11 @@ class grade_export_xml extends grade_export { while ($userdata = $gui->next_user()) { $user = $userdata->user; + if (empty($user->idnumber)) { + //id number must exist + continue; + } + // studentgrades[] index should match with corresponding $index foreach ($userdata->grades as $itemid => $grade) { $grade_item = $this->grade_items[$itemid]; @@ -79,7 +84,7 @@ class grade_export_xml extends grade_export { // only need id number fwrite($handle, "\t\t{$grade_item->idnumber}\n"); // this column should be customizable to use either student id, idnumber, uesrname or email. - fwrite($handle, "\t\t{$user->id}\n"); + fwrite($handle, "\t\t{$user->idnumber}\n"); fwrite($handle, "\t\t$gradestr\n"); if ($this->export_feedback) { $feedbackstr = $this->format_feedback($userdata->feedbacks[$itemid]); diff --git a/grade/import/lib.php b/grade/import/lib.php index 141e81dc6d..d1779a9c95 100755 --- a/grade/import/lib.php +++ b/grade/import/lib.php @@ -10,7 +10,7 @@ * @param feedback print feedback and continue button * @return bool success */ -function grade_import_commit($courseid, $importcode, $feedback=true) { +function grade_import_commit($courseid, $importcode, $importfeedback=true, $verbose=true) { global $CFG; include_once($CFG->libdir.'/gradelib.php'); @@ -78,6 +78,9 @@ function grade_import_commit($courseid, $importcode, $feedback=true) { // make the grades array for update_grade foreach ($grades as $grade) { + if (!$importfeedback) { + $grade->feedback = false; // ignore it + } if (!$gradeitem->update_final_grade($grade->userid, $grade->finalgrade, 'import', NULL, $grade->feedback)) { $failed = 1; break 2; @@ -95,7 +98,7 @@ function grade_import_commit($courseid, $importcode, $feedback=true) { } } - if ($feedback) { + if ($verbose) { notify(get_string('importsuccess', 'grades'), 'notifysuccess'); print_continue($CFG->wwwroot.'/grade/index.php?id='.$courseid); } diff --git a/grade/import/xml/grade_import_form.php b/grade/import/xml/grade_import_form.php index e766de19ee..7897d5ad64 100644 --- a/grade/import/xml/grade_import_form.php +++ b/grade/import/xml/grade_import_form.php @@ -15,6 +15,9 @@ class grade_import_form extends moodleform { $mform->addElement('header', 'general', get_string('importfile', 'grades')); $mform->disabledIf('url', 'userfile', 'noteq', ''); + $mform->addElement('advcheckbox', 'feedback', get_string('importfeedback', 'grades')); + $mform->setDefault('feedback', 0); + // file upload $mform->addElement('file', 'userfile', get_string('file')); $mform->setType('userfile', PARAM_FILE); diff --git a/grade/import/xml/import.php b/grade/import/xml/import.php index a52370842f..fc580b15a4 100644 --- a/grade/import/xml/import.php +++ b/grade/import/xml/import.php @@ -27,8 +27,9 @@ require_once '../../../config.php'; require_once 'lib.php'; require_once $CFG->libdir.'/filelib.php'; -$url = required_param('url', PARAM_URL); // only real urls here -$id = required_param('id', PARAM_INT); // course id +$url = required_param('url', PARAM_URL); // only real urls here +$id = required_param('id', PARAM_INT); // course id +$feedback = optional_param('feedback', 0, PARAM_BOOL); if (!$course = get_record('course', 'id', $id)) { print_error('nocourseid'); @@ -62,7 +63,7 @@ if ($importcode !== false) { /// comit the code if we are up this far if (defined('USER_KEY_LOGIN')) { - if (grade_import_commit($id, $importcode, false)) { + if (grade_import_commit($id, $importcode, $feedback, false)) { echo 'ok'; die; } else { @@ -77,7 +78,7 @@ if ($importcode !== false) { print_header($course->shortname.': '.get_string('grades'), $course->fullname, $navigation); print_grade_plugin_selector($id, 'import', 'xml'); - grade_import_commit($id, $importcode); + grade_import_commit($id, $importcode, $feedback, true); print_footer(); die; diff --git a/grade/import/xml/index.php b/grade/import/xml/index.php index 1e4ea1e40d..2124bf97ca 100755 --- a/grade/import/xml/index.php +++ b/grade/import/xml/index.php @@ -66,7 +66,7 @@ if ($data = $mform->get_data()) { $error = ''; $importcode = import_xml_grades($text, $course, $error); if ($importcode) { - grade_import_commit($id, $importcode); + grade_import_commit($id, $importcode, $data->feedback, true); print_footer(); die; } else { @@ -77,7 +77,7 @@ if ($data = $mform->get_data()) { } } else if (empty($data->key)) { - redirect('import.php?id='.$id.'&url='.urlencode($data->url)); + redirect('import.php?id='.$id.'&feedback='.(int)($data->feedback).'&url='.urlencode($data->url)); } else { if ($data->key == 1) { @@ -88,7 +88,7 @@ if ($data = $mform->get_data()) { print_grade_plugin_selector($id, 'import', 'xml'); echo ''; print_footer(); diff --git a/grade/import/xml/lib.php b/grade/import/xml/lib.php index 419709f939..ed8e0c9355 100644 --- a/grade/import/xml/lib.php +++ b/grade/import/xml/lib.php @@ -7,14 +7,13 @@ require_once $CFG->dirroot.'/grade/import/lib.php'; function import_xml_grades($text, $course, &$error) { $importcode = time(); //TODO: fix predictable+colliding import code! - $newgrades = array(); $status = true; $content = xmlize($text); - + if ($results = $content['results']['#']['result']) { - + foreach ($results as $i => $result) { if (!$grade_items = grade_item::fetch_all(array('idnumber'=>$result['#']['assignment'][0]['#'], 'courseid'=>$course->id))) { // gradeitem does not exist @@ -29,62 +28,66 @@ function import_xml_grades($text, $course, &$error) { } else { $grade_item = reset($grade_items); } - + // grade item locked, abort - if ($grade_item->locked) { + if ($grade_item->is_locked()) { $status = false; $error = get_string('gradeitemlocked', 'grades'); break; } - + + // check if user exist and convert idnember to user id + if (!$user = get_record('user', 'idnumber', addslashes($result['#']['student'][0]['#']))) { + // no user found, abort + $status = false; + $error = get_string('baduserid', 'grades'); + break; + } + // check if grade_grade is locked and if so, abort - if ($grade_grade = new grade_grade(array('itemid'=>$grade_item->id, 'userid'=>$result['#']['student'][0]['#']))) { - if ($grade_grade->locked) { + if ($grade_grade = new grade_grade(array('itemid'=>$grade_item->id, 'userid'=>$user->id))) { + if ($grade_grade->is_locked()) { // individual grade locked, abort $status = false; $error = get_string('gradegradeslocked', 'grades'); break; } } - + + $newgrade = new object(); + $newgrade->itemid = $grade_item->id; + $newgrade->userid = $user->id; + $newgrade->import_code = $importcode; + + // check grade value exists and is a numeric grade if (isset($result['#']['score'][0]['#'])) { - $newgrade = new object(); - $newgrade->itemid = $grade_item->id; - $newgrade->grade = $result['#']['score'][0]['#']; - $newgrade->userid = $result['#']['student'][0]['#']; - $newgrades[] = $newgrade; - } - } - - // loop through info collected so far - if ($status && !empty($newgrades)) { - foreach ($newgrades as $newgrade) { - - // check if user exist - if (!$user = get_record('user', 'id', addslashes($newgrade->userid))) { - // no user found, abort - $status = false; - $error = get_string('baduserid', 'grades'); - break; - } - - // check grade value is a numeric grade - if (!is_numeric($newgrade->grade)) { + if (is_numeric($result['#']['score'][0]['#'])) { + $newgrade->finalgrade = $result['#']['score'][0]['#']; + } else { $status = false; $error = get_string('badgrade', 'grades'); break; } - - // insert this grade into a temp table - $newgrade->import_code = $importcode; - if (!insert_record('grade_import_values', addslashes_recursive($newgrade))) { - $status = false; - // could not insert into temp table - $error = get_string('importfailed', 'grades'); - break; - } + } else { + $newgrade->finalgrade = NULL; + } + + // check grade feedback exists + if (isset($result['#']['feedback'][0]['#'])) { + $newgrade->feedback = $result['#']['feedback'][0]['#']; + } else { + $newgrade->feedback = NULL; + } + + // insert this grade into a temp table + if (!insert_record('grade_import_values', addslashes_recursive($newgrade))) { + $status = false; + // could not insert into temp table + $error = get_string('importfailed', 'grades'); + break; } } + } else { // no results section found in xml, // assuming bad format, abort import diff --git a/lang/en_utf8/grades.php b/lang/en_utf8/grades.php index 93caa384fb..1ed71f6dc1 100644 --- a/lang/en_utf8/grades.php +++ b/lang/en_utf8/grades.php @@ -223,6 +223,7 @@ $string['identifier'] = 'Identify user by'; $string['import'] = 'Import'; $string['importcsv'] = 'Import CSV'; $string['importfailed'] = 'Import failed'; +$string['importfeedback'] = 'Import feedback'; $string['importfile'] = 'Import file'; $string['importplugins'] = 'Import plugins'; $string['importpreview'] = 'Import preview';