when no gradebook roles is set, there are lots of sql breakages so we should check...
[moodle-pu.git] / grade / import / xml / lib.php
blob419709f939ab40d86e71b3f45c8b01e232035e8c
1 <?php //$Id$
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!
10 $newgrades = array();
12 $status = true;
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
22 $status = false;
23 $error = get_string('errincorrectidnumber', 'gradeimport_xml');
24 break;
25 } else if (count($grade_items) != 1) {
26 $status = false;
27 $error = get_string('errduplicateidnumber', 'gradeimport_xml');
28 break;
29 } else {
30 $grade_item = reset($grade_items);
33 // grade item locked, abort
34 if ($grade_item->locked) {
35 $status = false;
36 $error = get_string('gradeitemlocked', 'grades');
37 break;
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
44 $status = false;
45 $error = get_string('gradegradeslocked', 'grades');
46 break;
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
66 $status = false;
67 $error = get_string('baduserid', 'grades');
68 break;
71 // check grade value is a numeric grade
72 if (!is_numeric($newgrade->grade)) {
73 $status = false;
74 $error = get_string('badgrade', 'grades');
75 break;
78 // insert this grade into a temp table
79 $newgrade->import_code = $importcode;
80 if (!insert_record('grade_import_values', addslashes_recursive($newgrade))) {
81 $status = false;
82 // could not insert into temp table
83 $error = get_string('importfailed', 'grades');
84 break;
88 } else {
89 // no results section found in xml,
90 // assuming bad format, abort import
91 $status = false;
92 $error = get_string('errbadxmlformat', 'gradeimport_xml');
95 if ($status) {
96 return $importcode;
98 } else {
99 import_cleanup($importcode);
100 return false;