From: toyomoyo Date: Thu, 10 May 2007 09:29:58 +0000 (+0000) Subject: grade export plugins X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=a216f661d63eeabd2afa31f11861caf1ca5ac228;p=moodle.git grade export plugins --- diff --git a/grade/export/lib.php b/grade/export/lib.php index 7ad1efd031..92952754c9 100755 --- a/grade/export/lib.php +++ b/grade/export/lib.php @@ -34,6 +34,7 @@ class grade_export { var $totals = array(); // Collect all totals in this array var $columns = array(); // Accumulate column names in this array. var $columnhtml = array(); // Accumulate column html in this array. + var $columnidnumbers = array(); // Collect all gradeitem id numbers var $course; // course // common strings @@ -109,6 +110,7 @@ class grade_export { foreach ($gradeitems as $gradeitem) { $this->columns[] = "$gradeitem->itemmodule: ".format_string($gradeitem->itemname,true)." - $gradeitem->maxgrade"; + $this->columnidnumbers[] = $gradeitem->idnumber; // this might be needed for some export plugins if (!empty($gradeitem->maxgrade)) { $maxgrade = "$strmax: $gradeitem->maxgrade"; diff --git a/grade/export/ods/grade_export_ods.php b/grade/export/ods/grade_export_ods.php index cb21fd0783..6b38deddfb 100755 --- a/grade/export/ods/grade_export_ods.php +++ b/grade/export/ods/grade_export_ods.php @@ -31,7 +31,7 @@ class grade_export_ods extends grade_export { /** * To be implemented by child classes */ - function print_grades() { + function print_grades($feedback = false) { require_once($CFG->dirroot.'/lib/odslib.class.php'); @@ -54,6 +54,11 @@ class grade_export_ods extends grade_export { $pos=6; foreach ($this->columns as $column) { $myxls->write_string(0,$pos++,strip_tags($column)); + + /// add a column_feedback column + if ($feedback) { + $myxls->write_string(0,$pos++,strip_tags($column."_feedback")); + } } $myxls->write_string(0,$pos,get_string("total")); @@ -81,6 +86,11 @@ class grade_export_ods extends grade_export { else { $myxls->write_string($i,$j++,strip_tags($grade)); } + + // writing comment if requested + if ($feedback) { + $myxls->write_string($i,$j++,array_shift($this->comments[$student->id])); + } } $myxls->write_number($i,$j,$this->totals[$student->id]); } diff --git a/grade/export/txt/grade_export_txt.php b/grade/export/txt/grade_export_txt.php index 664571e15b..144325a7b4 100755 --- a/grade/export/txt/grade_export_txt.php +++ b/grade/export/txt/grade_export_txt.php @@ -31,7 +31,7 @@ class grade_export_txt extends grade_export { /** * To be implemented by child classes */ - function print_grades() { + function print_grades($feedback = false;) { /// Print header to force download @@ -50,6 +50,11 @@ class grade_export_txt extends grade_export { foreach ($this->columns as $column) { $column = strip_tags($column); echo "\t$column"; + + /// add a column_feedback column + if ($feedback) { + echo "\t{$column}_feedback"; + } } echo "\t".get_string("total")."\n"; @@ -62,7 +67,11 @@ class grade_export_txt extends grade_export { echo "$student->firstname\t$student->lastname\t$student->idnumber\t$student->institution\t$student->department\t$student->email"; foreach ($studentgrades as $grade) { $grade = strip_tags($grade); - echo "\t$grade"; + echo "\t$grade"; + + if ($feedback) { + echo "\t".array_shift($this->comments[$student->id]); + } } echo "\t".$this->totals[$student->id]; echo "\n"; diff --git a/grade/export/xls/grade_export_xls.php b/grade/export/xls/grade_export_xls.php index 412ff4c7e1..c28bc26f19 100755 --- a/grade/export/xls/grade_export_xls.php +++ b/grade/export/xls/grade_export_xls.php @@ -31,14 +31,14 @@ class grade_export_xls extends grade_export { /** * To be implemented by child classes */ - function print_grades() { + function print_grades($feedback = false) { global $CFG; require_once($CFG->dirroot.'/lib/excellib.class.php'); /// Calculate file name - $downloadfilename = clean_filename("$course->shortname $this->strgrades.xls"); + $downloadfilename = clean_filename("$this->course->shortname $this->strgrades.xls"); /// Creating a workbook $workbook = new MoodleExcelWorkbook("-"); /// Sending HTTP headers @@ -56,6 +56,10 @@ class grade_export_xls extends grade_export { $pos=6; foreach ($this->columns as $column) { $myxls->write_string(0,$pos++,strip_tags($column)); + /// add a column_feedback column + if ($feedback) { + $myxls->write_string(0,$pos++,strip_tags($column."_feedback")); + } } $myxls->write_string(0,$pos,get_string("total")); @@ -82,7 +86,12 @@ class grade_export_xls extends grade_export { } else { $myxls->write_string($i,$j++,strip_tags($grade)); - } + } + + // writing comment if requested + if ($feedback) { + $myxls->write_string($i,$j++,array_shift($this->comments[$student->id])); + } } $myxls->write_number($i,$j,$this->totals[$student->id]); } diff --git a/grade/export/xml/grade_export_xml.php b/grade/export/xml/grade_export_xml.php new file mode 100755 index 0000000000..c07c047c7b --- /dev/null +++ b/grade/export/xml/grade_export_xml.php @@ -0,0 +1,101 @@ +dirroot.'/grade/export/lib.php'); + +class grade_export_xml extends grade_export { + + var $format = 'xml'; // export format + + /** + * To be implemented by child classes + */ + function print_grades($feedback = false) { + + global $CFG; + + require_once($CFG->dirroot.'/lib/excellib.class.php'); + + /// Calculate file name + $downloadfilename = clean_filename("$this->course->shortname $this->strgrades.xml"); + + header("Content-type: text/xml; charset=UTF-8"); + header("Content-Disposition: attachment; filename=\"$downloadfilename\""); + + /// time stamp to ensure uniqueness of batch export + echo ''; + foreach ($this->$columnidnumbers as $index => $idnumber) { + + // studentgrades[] index should match with corresponding $index + foreach ($this->grades as $studentid => $studentgrades) { + echo ''; + + // state can be new, or regrade + // require comparing of timestamps in db + + $params->idnumber = $idnumber; + // get the grade item + $gradeitem = new grade_item($params); + + // we are trying to figure out if this is a new grade, or a regraded grade + // only relevant if this grade for this user is already exported + if ($gradeitem->exported) { + + // get the grade_grades_final for this user + unset($params); + $params->itemid = $gradeitem->id; + $params->userid = $studentid; + + $grade_grades_final = new grade_grades_final($params); + + // if exported, check grade_history, if modified after export, set state to regrade + + if (record_exists_select('grade_hitory', 'itemid = '.$gradeitem->id.' AND userid = '.$studentid.' AND timemodified > '.$grade_grades_final->exported)) { + $status = 'regrade'; + } else { + $status = 'new'; + } + } else { + // never exported + $status = 'new'; + } + + echo ''.$status.''; + // only need id number + echo ''.$idnumber.''; + // this column should be customizable to use either student id, idnumber, uesrname or email. + echo ''.$studentid.''; + echo ''.$studentgrades[$index].''; + if ($feedback) { + echo ''.$this->comments[$studentid][$index].''; + } + echo ''; + } + } + echo ''; + exit; + } +} + +?> \ No newline at end of file