From 8b0ef9b0cb5af387ccc59e5a9a2d71f77c0bb7ae Mon Sep 17 00:00:00 2001 From: moodler Date: Mon, 28 Jul 2003 02:04:58 +0000 Subject: [PATCH] Improvements to simplestat (more info in HTML display plus downloads XLS an TXT) --- mod/quiz/report.php | 61 ++++++----- mod/quiz/report/simplestat/report.php | 141 +++++++++++++++++++++++--- 2 files changed, 160 insertions(+), 42 deletions(-) diff --git a/mod/quiz/report.php b/mod/quiz/report.php index 753c17dd54..49511ae0d8 100644 --- a/mod/quiz/report.php +++ b/mod/quiz/report.php @@ -44,36 +44,38 @@ add_to_log($course->id, "quiz", "report", "report.php?id=$cm->id", "$quiz->id"); /// Print the page header + if (empty($noheader)) { - if ($course->category) { - $navigation = "id\">$course->shortname ->"; - } - - $strquizzes = get_string("modulenameplural", "quiz"); - $strquiz = get_string("modulename", "quiz"); - $strreport = get_string("report", "quiz"); - - print_header("$course->shortname: $quiz->name", "$course->fullname", - "$navigation id>$strquizzes - -> id\">$quiz->name -> $strreport", - "", "", true); - - print_heading($quiz->name); - - -/// Print list of available quiz reports + if ($course->category) { + $navigation = "id\">$course->shortname ->"; + } + + $strquizzes = get_string("modulenameplural", "quiz"); + $strquiz = get_string("modulename", "quiz"); + $strreport = get_string("report", "quiz"); + + print_header("$course->shortname: $quiz->name", "$course->fullname", + "$navigation id>$strquizzes + -> id\">$quiz->name -> $strreport", + "", "", true); + + print_heading($quiz->name); + - $reports = get_list_of_plugins("mod/quiz/report"); - echo ""; - foreach ($reports as $report) { - $strreport = get_string("report$report", "quiz"); - if ($report == $mode) { - echo ""; - } else { - echo ""; + /// Print list of available quiz reports + + $reports = get_list_of_plugins("mod/quiz/report"); + echo "
$strreportid&mode=$report\">$strreport
"; + foreach ($reports as $report) { + $strreport = get_string("report$report", "quiz"); + if ($report == $mode) { + echo ""; + } else { + echo ""; + } } + echo "
$strreportid&mode=$report\">$strreport

"; } - echo "
"; /// Open the selected quiz report and display it @@ -87,10 +89,13 @@ $report = new quiz_report(); - if (! $report->display($quiz, $cm, $course)) { // Do anything before that we need to + if (! $report->display($quiz, $cm, $course)) { // Run the report! error("Error occurred during pre-processing!"); } - print_footer($course); + if (empty($noheader)) { + print_footer($course); + } + ?> diff --git a/mod/quiz/report/simplestat/report.php b/mod/quiz/report/simplestat/report.php index 28f5aac7cf..dc79e301b4 100644 --- a/mod/quiz/report/simplestat/report.php +++ b/mod/quiz/report/simplestat/report.php @@ -7,6 +7,9 @@ class quiz_report extends quiz_default_report { function display($quiz, $cm, $course) { /// This function just displays the report global $CFG; + global $download; + + optional_variable($download, ""); $data = array(); $questionorder = explode(',', $quiz->questions); @@ -16,7 +19,8 @@ class quiz_report extends quiz_default_report { if ($users = get_course_students($course->id, "u.lastname ASC")) { foreach ($users as $user) { - $data[$user->id]->name = "$user->firstname $user->lastname"; + $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)) { @@ -38,43 +42,138 @@ class quiz_report extends quiz_default_report { 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; } } } - optional_variable($output, ""); + if ($datacount) { + foreach ($total as $key => $sum) { + $average[$key] = format_float($sum/$datacount, 2); + } + } + /// If spreadsheet is wanted, produce one - if ($output = "xls") { + 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 ($output = "xls") { + 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 - $count = count($questionorder); - $total = array(); echo ""; echo ""; echo ""; for ($i=1; $i<=$count; $i++) { - $total[$i] = 0.0; - echo ""; + echo ""; } echo ""; - $datacount = 0; foreach ($data as $userid => $datum) { echo ""; - echo ""; + echo ""; if ($datum->grades) { - $datacount++; foreach ($datum->grades as $key => $grade) { echo ""; - $total[$key]+= $grade; } } echo ""; @@ -83,13 +182,27 @@ class quiz_report extends quiz_default_report { echo ""; echo ""; for ($i=1; $i<=$count; $i++) { - $average = format_float($total[$i] / $datacount, 2); - echo ""; + echo ""; } echo ""; echo "
 $iquestiontext."\">$i
$datum->name$datum->firstname $datum->lastname$grade
 $average".$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; } } -- 2.39.5