]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-11622, MDL-11623 xml import/export now uses user idnumber; feedback optional...
authorskodak <skodak>
Sun, 7 Oct 2007 10:22:21 +0000 (10:22 +0000)
committerskodak <skodak>
Sun, 7 Oct 2007 10:22:21 +0000 (10:22 +0000)
grade/export/xml/grade_export_xml.php
grade/import/lib.php
grade/import/xml/grade_import_form.php
grade/import/xml/import.php
grade/import/xml/index.php
grade/import/xml/lib.php
lang/en_utf8/grades.php

index 886ee7c6ad64b7c2f193d09b333e4d9f85baa796..b94eb5537c6f68e475ffffc83fa076a9702072a1 100755 (executable)
@@ -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<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]);
index 141e81dc6d315b9672ba160ed660ede999824169..d1779a9c959809e80b24be5d5815f7068cf659fb 100755 (executable)
@@ -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);
     }
index e766de19eee14e631e5de51f6ca6b6c57e0fda63..7897d5ad645ad604951dff5dc250f13c9a0a5aa7 100644 (file)
@@ -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);
index a52370842fef05d2d07d45d2ab73bc7d5d9b49d2..fc580b15a4b770c7e5ad760bf3577f84ba0f06f3 100644 (file)
@@ -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;
index 1e4ea1e40ddf6fe6764d81f5d11215b7ccbf8513..2124bf97ca125f0b9e25cffc3aa258004d7ce869 100755 (executable)
@@ -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.'&amp;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 '<div class="gradeexportlink">';
-        $link = $CFG->wwwroot.'/grade/import/xml/fetch.php?id='.$id.'&amp;url='.urlencode($data->url).'&amp;key='.$data->key;
+        $link = $CFG->wwwroot.'/grade/import/xml/fetch.php?id='.$id.'&amp;feedback='.(int)($data->feedback).'&amp;url='.urlencode($data->url).'&amp;key='.$data->key;
         echo get_string('import', 'grades').': <a href="'.$link.'">'.$link.'</a>';
         echo '</div>';
         print_footer();
index 419709f939ab40d86e71b3f45c8b01e232035e8c..ed8e0c9355f83bd4e5f7b8f20fbf39fa333a3a9f 100644 (file)
@@ -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
index 93caa384fbea3672fec87f306ba17873b1e9f184..1ed71f6dc19183dc315aa2fcaf2afbdf8dfa6709 100644 (file)
@@ -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';