mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 16:32:18 +02:00
MDL-11069 reimplemented grade export flag handling
This commit is contained in:
parent
6db368e117
commit
eb8599199e
@ -315,4 +315,70 @@ class grade_export {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This class is used to update the exported field in grade_grades.
|
||||
* It does internal buffering to speedup the db operations.
|
||||
*/
|
||||
class grade_export_update_buffer {
|
||||
var $update_list;
|
||||
var $export_time;
|
||||
|
||||
/**
|
||||
* Constructor - creates the buffer and initialises the time stamp
|
||||
*/
|
||||
function grade_export_update_buffer() {
|
||||
$this->update_list = array();
|
||||
$this->export_time = time();
|
||||
}
|
||||
|
||||
function flush($buffersize) {
|
||||
global $CFG;
|
||||
|
||||
if (count($this->update_list) > $buffersize) {
|
||||
$list = implode(',', $this->update_list);
|
||||
$sql = "UPDATE {$CFG->prefix}grade_grades SET exported = {$this->export_time} WHERE id IN ($list)";
|
||||
execute_sql($sql, false);
|
||||
$this->update_list = array();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Track grade export status
|
||||
* @param object $grade_grade
|
||||
* @return string $status (unknow, new, regrade, nochange)
|
||||
*/
|
||||
function track($grade_grade) {
|
||||
if (empty($grade_grade->exported) or empty($grade_grade->timemodified)) {
|
||||
if (is_null($grade_grade->finalgrade)) {
|
||||
// grade does not exist yet
|
||||
$status = 'unknown';
|
||||
} else {
|
||||
$status = 'new';
|
||||
$this->update_list[] = $grade_grade->id;
|
||||
}
|
||||
|
||||
} else if ($grade_grade->exported < $grade_grade->timemodified) {
|
||||
$status = 'regrade';
|
||||
$this->update_list[] = $grade_grade->id;
|
||||
|
||||
} else if ($grade_grade->exported >= $grade_grade->timemodified) {
|
||||
$status = 'nochange';
|
||||
|
||||
} else {
|
||||
// something is wrong?
|
||||
$status = 'unknown';
|
||||
}
|
||||
|
||||
$this->flush(100);
|
||||
|
||||
return $status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Flush and close the buffer.
|
||||
*/
|
||||
function close() {
|
||||
$this->flush(0);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -67,6 +67,7 @@ class grade_export_ods extends grade_export {
|
||||
|
||||
/// Print all the lines of data.
|
||||
$i = 0;
|
||||
$geub = new grade_export_update_buffer();
|
||||
$gui = new graded_users_iterator($this->course, $this->columns, $this->groupid);
|
||||
$gui->init();
|
||||
while ($userdata = $gui->next_user()) {
|
||||
@ -81,6 +82,10 @@ class grade_export_ods extends grade_export {
|
||||
$myxls->write_string($i,5,$user->email);
|
||||
$j=6;
|
||||
foreach ($userdata->grades as $itemid => $grade) {
|
||||
if ($export_tracking) {
|
||||
$status = $geub->track($grade);
|
||||
}
|
||||
|
||||
$gradestr = $this->format_grade($grade);
|
||||
if (is_numeric($gradestr)) {
|
||||
$myxls->write_number($i,$j++,$gradestr);
|
||||
@ -93,11 +98,10 @@ class grade_export_ods extends grade_export {
|
||||
if ($this->export_feedback) {
|
||||
$myxls->write_string($i, $j++, $this->format_feedback($userdata->feedbacks[$itemid]));
|
||||
}
|
||||
|
||||
//TODO: reimplement export handling flag
|
||||
}
|
||||
}
|
||||
$gui->close();
|
||||
$geub->close();
|
||||
|
||||
/// Close the workbook
|
||||
$workbook->close();
|
||||
|
@ -59,7 +59,7 @@ class grade_export_txt extends grade_export {
|
||||
case 'comma':
|
||||
$separator = ",";
|
||||
break;
|
||||
case 'tab':
|
||||
case 'tab':
|
||||
default:
|
||||
$separator = "\t";
|
||||
}
|
||||
@ -91,6 +91,7 @@ class grade_export_txt extends grade_export {
|
||||
echo "\n";
|
||||
|
||||
/// Print all the lines of data.
|
||||
$geub = new grade_export_update_buffer();
|
||||
$gui = new graded_users_iterator($this->course, $this->columns, $this->groupid);
|
||||
$gui->init();
|
||||
while ($userdata = $gui->next_user()) {
|
||||
@ -100,17 +101,20 @@ class grade_export_txt extends grade_export {
|
||||
echo $user->firstname.$separator.$user->lastname.$separator.$user->idnumber.$separator.$user->institution.$separator.$user->department.$separator.$user->email;
|
||||
|
||||
foreach ($userdata->grades as $itemid => $grade) {
|
||||
if ($export_tracking) {
|
||||
$status = $geub->track($grade);
|
||||
}
|
||||
|
||||
echo $separator.$this->format_grade($grade);
|
||||
|
||||
if ($this->export_feedback) {
|
||||
echo $separator.$this->format_feedback($userdata->feedbacks[$itemid]);
|
||||
}
|
||||
|
||||
//TODO: reimplement export handling flag
|
||||
}
|
||||
echo "\n";
|
||||
}
|
||||
$gui->close();
|
||||
$geub->close();
|
||||
|
||||
exit;
|
||||
}
|
||||
|
@ -67,6 +67,7 @@ class grade_export_xls extends grade_export {
|
||||
|
||||
/// Print all the lines of data.
|
||||
$i = 0;
|
||||
$geub = new grade_export_update_buffer();
|
||||
$gui = new graded_users_iterator($this->course, $this->columns, $this->groupid);
|
||||
$gui->init();
|
||||
while ($userdata = $gui->next_user()) {
|
||||
@ -81,6 +82,10 @@ class grade_export_xls extends grade_export {
|
||||
$myxls->write_string($i,5,$user->email);
|
||||
$j=6;
|
||||
foreach ($userdata->grades as $itemid => $grade) {
|
||||
if ($export_tracking) {
|
||||
$status = $geub->track($grade);
|
||||
}
|
||||
|
||||
$gradestr = $this->format_grade($grade);
|
||||
if (is_numeric($gradestr)) {
|
||||
$myxls->write_number($i,$j++,$gradestr);
|
||||
@ -93,11 +98,10 @@ class grade_export_xls extends grade_export {
|
||||
if ($this->export_feedback) {
|
||||
$myxls->write_string($i, $j++, $this->format_feedback($userdata->feedbacks[$itemid]));
|
||||
}
|
||||
|
||||
//TODO: reimplement export handling flag
|
||||
}
|
||||
}
|
||||
$gui->close();
|
||||
$geub->close();
|
||||
|
||||
/// Close the workbook
|
||||
$workbook->close();
|
||||
|
@ -55,6 +55,9 @@ class grade_export_xml extends grade_export {
|
||||
/// time stamp to ensure uniqueness of batch export
|
||||
fwrite($handle, '<results batch="xml_export_'.time().'">'."\n");
|
||||
|
||||
$export_buffer = array();
|
||||
|
||||
$geub = new grade_export_update_buffer();
|
||||
$gui = new graded_users_iterator($this->course, $this->columns, $this->groupid);
|
||||
$gui->init();
|
||||
while ($userdata = $gui->next_user()) {
|
||||
@ -67,21 +70,12 @@ class grade_export_xml extends grade_export {
|
||||
$gradestr = $this->format_grade($grade);
|
||||
|
||||
fwrite($handle, "\t<result>\n");
|
||||
// if exported, check grade_history, if modified after export, set state to regrade
|
||||
$status = 'new';
|
||||
/* if (!empty($grade_grade->exported)) {
|
||||
//TODO: use timemodified or something else instead
|
||||
if (record_exists_select('grade_history', 'itemid = '.$gradeitem->id.' AND userid = '.$userid.' AND timemodified > '.$grade_grade->exported)) {
|
||||
$status = 'regrade';
|
||||
} else {
|
||||
$status = 'new';
|
||||
}
|
||||
} else {
|
||||
// never exported
|
||||
$status = 'new';
|
||||
|
||||
if ($export_tracking) {
|
||||
$status = $geub->track($grade);
|
||||
fwrite($handle, "\t\t<state>$status</state>\n");
|
||||
}
|
||||
*/
|
||||
fwrite($handle, "\t\t<state>$status</state>\n");
|
||||
|
||||
// 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.
|
||||
@ -92,18 +86,12 @@ class grade_export_xml extends grade_export {
|
||||
fwrite($handle, "\t\t<feedback>$feedbackstr</feedback>\n");
|
||||
}
|
||||
fwrite($handle, "\t</result>\n");
|
||||
|
||||
// timestamp this if needed
|
||||
/* if ($export) {
|
||||
$grade_grade->exported = time();
|
||||
// update the time stamp;
|
||||
$grade_grade->update();
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
fwrite($handle, "</results>");
|
||||
fclose($handle);
|
||||
$gui->close();
|
||||
$geub->close();
|
||||
|
||||
@header('Cache-Control: private, must-revalidate, pre-check=0, post-check=0, max-age=0');
|
||||
@header('Expires: '. gmdate('D, d M Y H:i:s', 0) .' GMT');
|
||||
|
Loading…
x
Reference in New Issue
Block a user