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];
// only need id number
fwrite($handle, "\t\t<assignment>{$grade_item->idnumber}</assignment>\n");
// this column should be customizable to use either student id, idnumber, uesrname or email.
- fwrite($handle, "\t\t<student>{$user->id}</student>\n");
+ fwrite($handle, "\t\t<student>{$user->idnumber}</student>\n");
fwrite($handle, "\t\t<score>$gradestr</score>\n");
if ($this->export_feedback) {
$feedbackstr = $this->format_feedback($userdata->feedbacks[$itemid]);
* @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');
// 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;
}
}
- if ($feedback) {
+ if ($verbose) {
notify(get_string('importsuccess', 'grades'), 'notifysuccess');
print_continue($CFG->wwwroot.'/grade/index.php?id='.$courseid);
}
$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);
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');
/// 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 {
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;
$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 {
}
} 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) {
print_grade_plugin_selector($id, 'import', 'xml');
echo '<div class="gradeexportlink">';
- $link = $CFG->wwwroot.'/grade/import/xml/fetch.php?id='.$id.'&url='.urlencode($data->url).'&key='.$data->key;
+ $link = $CFG->wwwroot.'/grade/import/xml/fetch.php?id='.$id.'&feedback='.(int)($data->feedback).'&url='.urlencode($data->url).'&key='.$data->key;
echo get_string('import', 'grades').': <a href="'.$link.'">'.$link.'</a>';
echo '</div>';
print_footer();
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
} 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
$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';