questions);
/// For each person in the class, get their best attempt
/// and create a table listing results for each person
if ($users = get_course_students($course->id, "u.lastname ASC")) {
foreach ($users as $user) {
$data[$user->id]->firstname = $user->firstname;
$data[$user->id]->lastname = $user->lastname;
$data[$user->id]->grades = array(); // by default
if (!$attempts = quiz_get_user_attempts($quiz->id, $user->id)) {
continue;
}
if (!$bestattempt = quiz_calculate_best_attempt($quiz, $attempts)) {
continue;
}
if (!$questions = quiz_get_attempt_responses($bestattempt, $quiz)) {
continue;
}
quiz_remove_unwanted_questions($questions, $quiz);
if (!$results = quiz_grade_attempt_results($quiz, $questions)) {
error("Could not re-grade this quiz attempt!");
}
$count = 0;
foreach ($questionorder as $questionid) {
$count++;
$data[$user->id]->grades[$count] = $results->grades[$questionid];
$question[$count] = $questions[$questionid];
}
}
}
$count = count($questionorder);
$total = array();
$average = array();
for ($i=1; $i<=$count; $i++) {
$total[$i] = 0.0;
$average[$i] = 0.0;
}
$datacount = 0;
foreach ($data as $userid => $datum) {
if ($datum->grades) {
$datacount++;
foreach ($datum->grades as $key => $grade) {
$total[$key]+= $grade;
}
}
}
if ($datacount) {
foreach ($total as $key => $sum) {
$average[$key] = format_float($sum/$datacount, 2);
}
}
/// If spreadsheet is wanted, produce one
if ($download == "xls") {
include("$CFG->libdir/psxlsgen.php");
$myxls = new PhpSimpleXlsGen();
$myxls->totalcol = $count+1;
/// Print names of all the fields
$myxls->ChangePos(0,0);
$myxls->InsertText($quiz->name);
for ($i=1; $i<=$count; $i++) {
$myxls->InsertText($i);
}
/// Print all the user data
$row=1;
foreach ($data as $userid => $datum) {
$myxls->ChangePos($row,0);
$myxls->InsertText("$datum->firstname $datum->lastname");
for ($i=1; $i<=$count; $i++) {
if (isset($datum->grades[$i])) {
$myxls->InsertNumber($datum->grades[$i]);
} else {
$myxls->InsertText("");
}
}
$row++;
}
$myxls->ChangePos($row,0);
/// Print all the averages
$myxls->InsertText("");
for ($i=1; $i<=$count; $i++) {
$myxls->InsertNumber($average[$i]);
}
$myxls->SendFileName("$quiz->name simplestat");
exit;
}
/// If a text file is wanted, produce one
if ($download == "txt") {
/// Print header to force download
header("Content-Type: application/download\n");
header("Content-Disposition: attachment; filename=\"$course->shortname $strgrades.txt\"");
/// Print names of all the fields
echo "$quiz->name";
for ($i=1; $i<=$count; $i++) {
echo "\t$i";
}
echo "\n";
/// Print all the user data
foreach ($data as $userid => $datum) {
echo "$datum->firstname $datum->lastname";
for ($i=1; $i<=$count; $i++) {
echo "\t";
if (isset($datum->grades[$i])) {
echo $datum->grades[$i];
}
}
echo "\n";
}
/// Print all the averages
echo "\t";
for ($i=1; $i<=$count; $i++) {
echo "\t".$average[$i];
}
echo "\n";
exit;
}
/// Otherwise, display the table as HTML
echo "
";
echo "";
echo " | ";
for ($i=1; $i<=$count; $i++) {
echo "questiontext."\">$i | ";
}
echo "
";
foreach ($data as $userid => $datum) {
echo "";
echo "$datum->firstname $datum->lastname | ";
if ($datum->grades) {
foreach ($datum->grades as $key => $grade) {
echo "$grade | ";
}
}
echo "
";
}
echo "";
echo " | ";
for ($i=1; $i<=$count; $i++) {
echo "".$average[$i]." | ";
}
echo "
";
echo "
";
echo "
";
echo "";
echo "";
unset($options);
$options["id"] = "$cm->id";
$options["mode"] = "simplestat";
$options["noheader"] = "yes";
$options["download"] = "xls";
print_single_button("report.php", $options, get_string("downloadexcel"));
echo " | ";
$options["download"] = "txt";
print_single_button("report.php", $options, get_string("downloadtext"));
echo " |
";
return true;
}
}
?>