]> git.mjollnir.org Git - moodle.git/commitdiff
development code, missing GUI and formslib for second form
authortoyomoyo <toyomoyo>
Thu, 17 May 2007 08:55:29 +0000 (08:55 +0000)
committertoyomoyo <toyomoyo>
Thu, 17 May 2007 08:55:29 +0000 (08:55 +0000)
grade/import/csv/index.php
grade/import/grade_import_form.php

index 5d220df16470ce2a9150efb43c3ddb5fa3829763..b899b047500709e37c98121157646fddad779a50 100755 (executable)
@@ -1,5 +1,13 @@
 <?php
 
+/*
+ This is development code, and it is not finished
+$form = new custom_form_subclass(qualified_me(), array('somefield' => 'somevalue', 'someotherfield' => 'someothervalue') );
+and then in your subclass, in definition, you can access
+$this->_customdata['somefield']
+*/
+
 require_once('../../../config.php');
 
 // capability check
@@ -20,12 +28,29 @@ if (isset($CFG->CSV_DELIMITER)) {
 }
 
 require_once('../grade_import_form.php');
-$mform = new grade_import_form();
 
 print_header("test","test","test");
-if ( $formdata = $mform->get_data() ) {
 
-    $filename = $mform->get_userfile_name();
+
+$mform = new grade_import_form();
+//$mform2 = new grade_import_mapping_form();
+
+//if ($formdata = $mform2->get_data() ) {
+
+if (($formdata = data_submitted()) && !empty($formdata->map)) {
+    // mapping info here    
+
+    // reconstruct the mapping
+
+    print_object($formdata);
+    
+    foreach ($formdata->maps as $i=>$header) {
+        $map[$header] = $formdata->mapping[$i];  
+    }    
+
+    $map[$formdata->mapfrom] = $formdata->mapto;
+
+    $filename = $CFG->dataroot.'/temp/cvstemp';
     
     // Large files are likely to take their time and memory. Let PHP know
     // that we'll take longer, and that the process should be recycled soon
@@ -35,17 +60,8 @@ if ( $formdata = $mform->get_data() ) {
     if (function_exists('apache_child_terminate')) {
         @apache_child_terminate();
     }
-
-    $text = my_file_get_contents($filename);
-    // trim utf-8 bom
-    $textlib = new textlib();
-    $text = $textlib->trim_utf8_bom($text);
-    // Fix mac/dos newlines
-    $text = preg_replace('!\r\n?!',"\n",$text);
-    $fp = fopen($filename, "w");
-    fwrite($fp,$text);
-    fclose($fp);
-
+    
+    $text = my_file_get_contents($filename);    
     $fp = fopen($filename, "r");
     
     // --- get header (field names) ---
@@ -54,8 +70,6 @@ if ( $formdata = $mform->get_data() ) {
     foreach ($header as $i => $h) {
         $h = trim($h); $header[$i] = $h; // remove whitespace
         // flag events to add columns if needed (?)
-        
-        /// if any header is unknown, print form 2       
     }
     
     while (!feof ($fp)) {
@@ -65,30 +79,136 @@ if ( $formdata = $mform->get_data() ) {
         // each line is a student record
         unset ($studentid);
         unset ($studentgrades);
-        
+        print_object($map);
         foreach ($line as $key => $value) {
-            
+                   
             //decode encoded commas
-            $value = preg_replace($csv_encode,$csv_delimiter2,trim($value)); // $record[$header[$key]]
-            
-            switch ($header[$key]) {
+            $value = preg_replace($csv_encode,$csv_delimiter2,trim($value));
+            switch ($map[$header[$key]]) {
                 case 'userid': // 
                     $studentid = $value;
                 break;
+                case 'useridnumber':
+                    $user = get_record('user', 'idnumber', $value);
+                    $studentid = $user->id;
+                break;
+                case 'useremail':
+                    $user = get_record('user', 'email', $value);
+                    $studentid = $user->id;                
+                break;
+                case 'username':
+                    $user = get_record('user', 'username', $value);
+                    $studentid = $user->id;
+                break;
                 // might need to add columns for comments
                 default:
-                    // case of an idnumber
-                    $studentgrades[$header[$key]] = $value;
+                    if (!empty($map[$header[$key]])) {
+                        // case of an idnumber, only maps idnumber of a grade_item
+                        $studentgrades[$map[$header[$key]]] = $value;
+                    } // otherwise, we ignore this column altogether (e.g. institution, address etc)
                 break;  
             }
         }
-        
-        foreach ($studentgrades as $idnumber => $studentgrade) {
-            // trigger event?
-            // echo "<br/>triggering event for $idnumber... student id is $studentid and grade is $studentgrade";
+        if (!empty($studentgrades)) {
+            foreach ($studentgrades as $idnumber => $studentgrade) {
+                
+                unset($eventdata);
+                $eventdata->idnumber = $idnumber;
+                $eventdata->userid = $studentid;
+                $eventdata->gradevalue = $studentgrade;
+                trigger_event('grade_added', $eventdata);               
+                
+                echo "<br/>triggering event for $idnumber... student id is $studentid and grade is $studentgrade";
             
+            }
         }
-    }  
+    }
+} else if ( $formdata = $mform->get_data() ) {
+
+    $filename = $mform->get_userfile_name();
+    
+    // Large files are likely to take their time and memory. Let PHP know
+    // that we'll take longer, and that the process should be recycled soon
+    // to free up memory.
+    @set_time_limit(0);
+    @raise_memory_limit("192M");
+    if (function_exists('apache_child_terminate')) {
+        @apache_child_terminate();
+    }
+
+    $text = my_file_get_contents($filename);
+    // trim utf-8 bom
+    $textlib = new textlib();
+    $text = $textlib->trim_utf8_bom($text);
+    // Fix mac/dos newlines
+    $text = preg_replace('!\r\n?!',"\n",$text);
+    $fp = fopen($filename, "w");
+    fwrite($fp,$text);
+    fclose($fp);
+
+    $fp = fopen($filename, "r");
+    
+    // --- get header (field names) ---
+    $header = split($csv_delimiter, fgets($fp,1024));
+    
+    echo '<form action="index.php" method="post" />';
+    
+    $mapfromoptions = array();
+    foreach ($header as $h) {
+        $mapfromoptions[$h] = $h;
+    }
+    
+    choose_from_menu($mapfromoptions, 'mapfrom');    
+    
+    // one mapfrom (csv column) to mapto (one of 4 choices)    
+    $maptooptions = array('userid'=>'userid', 'username'=>'username', 'useridnumber'=>'useridnumber', 'useremail'=>'useremail', '0'=>'ignore');
+    choose_from_menu($maptooptions, 'mapto');
+    
+
+    
+    $gradeitems = array();
+    
+    include_once($CFG->libdir.'/gradelib.php');
+    if ($grade_items = grade_get_items($id)) {
+        foreach ($grade_items as $grade_item) {
+            $gradeitems[$grade_item->idnumber] = $grade_item->itemname;      
+        }
+    }
+    
+    foreach ($header as $h) {
+        $h = trim($h);
+        // this is the order of the headers
+        echo "<br/> this field is :".$h." => ";
+        echo '<input type="hidden" name="maps[]" value="'.$h.'"/>';
+        // this is what they map to
+        
+        /**
+         * options are userid, 
+         * useridnumber, 
+         * useremail, 
+         * ignore (redundant column or 
+         * idnumber of grade_item (add individually);
+         */
+        
+        $mapfromoptions = array_merge(array('0'=>'ignore'), $gradeitems);
+
+        choose_from_menu($mapfromoptions, 'mapping[]', $h);
+
+    }
+
+    echo '<input type="hidden" name="map" value="1"/>';
+    echo '<input type="hidden" name="id" value="'.$id.'"/>';    
+    echo '<input name="filename" value='.$filename.' type="hidden" />';
+    echo '<input type="submit" value="upload" />';
+    echo '</form>';  
+    
+    // set the headers
+    //$mform2->setup($header, $filename);
+    //$mform2->display();
+  
+    // move file to $CFG->dataroot/temp
+    move_uploaded_file($filename, $CFG->dataroot.'/temp/cvstemp');
+  
 } else {
     $mform->display();
 }
index e20d5b67f931b4586b797f3156edda6c3eafb27b..710b2a32eb9a7512a35098c2aa22880c0edc6dd6 100755 (executable)
@@ -24,4 +24,33 @@ class grade_import_form extends moodleform {
         }
     }
 }
+
+
+class grade_import_mapping_form extends moodleform {
+    function definition () {
+        $mform =& $this->_form;
+
+        // course id needs to be passed for auth purposes
+        $mform->addElement('hidden', 'id', optional_param('id'));
+
+        $this->add_action_buttons(false, get_string('uploadgrades'));
+    }
+    
+    function setup ($headers = '', $filename = '') {
+        $mform =& $this->_form;
+        if (is_array($headers)) {
+            foreach ($headers as $header) {
+                $mform->addElement('hidden', $header, $header); 
+                $mform->addRule($header, null, 'required');
+            }
+        }    
+        if ($filename) {
+            $mform->addElement('hidden', 'filename', $filename);
+            $mform->addRule('filename', null, 'required');
+        }
+        
+        print_object($mform);
+                  
+    }
+}
 ?>