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("$course->shortname $quiz->name"); 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 $quiz->name.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 ""; } echo ""; foreach ($data as $userid => $datum) { echo ""; echo ""; if ($datum->grades) { foreach ($datum->grades as $key => $grade) { echo ""; } } echo ""; } echo ""; echo ""; for ($i=1; $i<=$count; $i++) { echo ""; } echo ""; echo "
 questiontext."\">$i
$datum->firstname $datum->lastname$grade
 ".$average[$i]."
"; 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; } } ?>