From 85e287deaa1922ce9695b8494c0b8b96db72dcf2 Mon Sep 17 00:00:00 2001 From: toyomoyo Date: Thu, 17 May 2007 08:55:29 +0000 Subject: [PATCH] development code, missing GUI and formslib for second form --- grade/import/csv/index.php | 176 ++++++++++++++++++++++++----- grade/import/grade_import_form.php | 29 +++++ 2 files changed, 177 insertions(+), 28 deletions(-) diff --git a/grade/import/csv/index.php b/grade/import/csv/index.php index 5d220df164..b899b04750 100755 --- a/grade/import/csv/index.php +++ b/grade/import/csv/index.php @@ -1,5 +1,13 @@ '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 "
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 "
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 '
'; + + $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 "
this field is :".$h." => "; + echo ''; + // 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 ''; + echo ''; + echo ''; + echo ''; + echo '
'; + + // 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(); } diff --git a/grade/import/grade_import_form.php b/grade/import/grade_import_form.php index e20d5b67f9..710b2a32eb 100755 --- a/grade/import/grade_import_form.php +++ b/grade/import/grade_import_form.php @@ -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); + + } +} ?> -- 2.39.5