3 require_once $CFG->libdir
.'/gradelib.php';
4 require_once($CFG->libdir
.'/xmlize.php');
5 require_once $CFG->dirroot
.'/grade/lib.php';
6 require_once $CFG->dirroot
.'/grade/import/lib.php';
8 function import_xml_grades($text, $course, &$error) {
9 $importcode = time(); //TODO: fix predictable+colliding import code!
14 $content = xmlize($text);
16 if ($results = $content['results']['#']['result']) {
18 foreach ($results as $i => $result) {
19 if (!$grade_items = grade_item
::fetch_all(array('idnumber'=>$result['#']['assignment'][0]['#'], 'courseid'=>$course->id
))) {
20 // gradeitem does not exist
21 // no data in temp table so far, abort
23 $error = get_string('errincorrectidnumber', 'gradeimport_xml');
25 } else if (count($grade_items) != 1) {
27 $error = get_string('errduplicateidnumber', 'gradeimport_xml');
30 $grade_item = reset($grade_items);
33 // grade item locked, abort
34 if ($grade_item->locked
) {
36 $error = get_string('gradeitemlocked', 'grades');
40 // check if grade_grade is locked and if so, abort
41 if ($grade_grade = new grade_grade(array('itemid'=>$grade_item->id
, 'userid'=>$result['#']['student'][0]['#']))) {
42 if ($grade_grade->locked
) {
43 // individual grade locked, abort
45 $error = get_string('gradegradeslocked', 'grades');
50 if (isset($result['#']['score'][0]['#'])) {
51 $newgrade = new object();
52 $newgrade->itemid
= $grade_item->id
;
53 $newgrade->grade
= $result['#']['score'][0]['#'];
54 $newgrade->userid
= $result['#']['student'][0]['#'];
55 $newgrades[] = $newgrade;
59 // loop through info collected so far
60 if ($status && !empty($newgrades)) {
61 foreach ($newgrades as $newgrade) {
63 // check if user exist
64 if (!$user = get_record('user', 'id', addslashes($newgrade->userid
))) {
65 // no user found, abort
67 $error = get_string('baduserid', 'grades');
71 // check grade value is a numeric grade
72 if (!is_numeric($newgrade->grade
)) {
74 $error = get_string('badgrade', 'grades');
78 // insert this grade into a temp table
79 $newgrade->import_code
= $importcode;
80 if (!insert_record('grade_import_values', addslashes_recursive($newgrade))) {
82 // could not insert into temp table
83 $error = get_string('importfailed', 'grades');
89 // no results section found in xml,
90 // assuming bad format, abort import
92 $error = get_string('errbadxmlformat', 'gradeimport_xml');
99 import_cleanup($importcode);