Skip to content

Commit

Permalink
Improved overview, now allows deleting and shows more info.
Browse files Browse the repository at this point in the history
Thanks very much for Thomas Robb for submitting the original
modification with the new functionality ... I ended up doing a
lot of cleaning up and reworking of it but it wouldn't have been
done without Thom's work.
  • Loading branch information
moodler committed Dec 17, 2003
1 parent 99cb3dc commit a6478fd
Showing 1 changed file with 109 additions and 10 deletions.
119 changes: 109 additions & 10 deletions mod/quiz/report/overview/report.php
@@ -1,20 +1,71 @@
<?PHP // $Id$
<?php // $Id$

/// Overview report just displays a big table of all the attempts

class quiz_report extends quiz_default_report {

function display($quiz, $cm, $course) { /// This function just displays the report

global $CFG, $QUIZ_GRADE_METHOD;

if (!$grades = quiz_get_grade_records($quiz)) {
return;
}
global $CFG, $QUIZ_GRADE_METHOD, $del;

$strreallydel = addslashes(get_string('deleteattemptcheck','quiz'));
$strdeleteselected = get_string('deleteselected');
$strdeleteall = get_string('deleteall');
$strname = get_string("name");
$strattempts = get_string("attempts", "quiz");
$strnoattempts = get_string('noattempts','quiz');
$strbestgrade = $QUIZ_GRADE_METHOD[$quiz->grademethod];
$strtimeformat = get_string('strftimedatetime');


if (!empty($del)) { /// Some attempts need to be deleted

if (record_exists('quiz_attempts', 'quiz', $quiz->id)) {

if ($del == 'all'){ /// Delete all the attempts
$attempts = get_records('quiz_attempts','quiz',$quiz->id);
delete_records('quiz_attempts','quiz',$quiz->id);
delete_records('quiz_grades','quiz',$quiz->id);
if ($attempts) {
foreach ($attempts as $thisattempt){
delete_records('quiz_responses','attempt',$thisattempt->id);
}
}

} else { /// Delete selected attempts

$items = (array)data_submitted();

unset($items['del']);
unset($items['id']);

if ($items) {
foreach ($items as $attemptid) {
if ($todelete = get_record('quiz_attempts', 'id', $attemptid)) {
delete_records('quiz_attempts', 'id', $attemptid);
delete_records('quiz_responses', 'attempt', $attemptid);

// Search quiz_attempts for other instances by this user.
// If none, then delete record for this quiz, this user from quiz_grades
// else recalculate best grade

$userid = $todelete->userid;
if (!record_exists('quiz_attempts', 'userid', $userid, 'quiz',$quiz->id)) {
delete_records('quiz_grades', 'userid', $userid,'quiz',$quiz->id);
} else {
quiz_save_best_grade($quiz, $userid);
}
}
}
}
}
}
}

if (!$grades = quiz_get_grade_records($quiz)) {
print_heading($strnoattempts);
return true;
}

$table->head = array("&nbsp;", $strname, $strattempts, "$strbestgrade /$quiz->grade");
$table->align = array("center", "left", "left", "center");
Expand All @@ -24,21 +75,69 @@ function display($quiz, $cm, $course) { /// This function just displays the

foreach ($grades as $grade) {
$picture = print_user_picture($grade->userid, $course->id, $grade->picture, false, true);

if ($attempts = quiz_get_user_attempts($quiz->id, $grade->userid)) {
$userattempts = quiz_get_user_attempts_string($quiz, $attempts, $grade->grade);
$userattempts = $this->quiz_get_user_attempts_list($quiz, $attempts, $grade->grade, $strtimeformat);
} else {
$userattempts = "";
}

$table->data[] = array ($picture,
"<a href=\"$CFG->wwwroot/user/view.php?id=$grade->userid&course=$course->id\">".
"$grade->firstname $grade->lastname</a>",
"$userattempts", round($grade->grade,0));
}


//Embed script for warning
echo "\n<script lang=javascript>\n<!--\nfunction delcheck(){\n ";
echo "if (confirm('$strreallydel')) {\n";
echo " document.delform.del.value='all';\n return true;\n";
echo " } else {\n";
echo " return false;\n }\n}\n";
echo "//-->\n</script>\n";

$onsub = "return confirm('$strreallydel')";

echo "<form method=\"post\" action=\"report.php\" name=\"delform\" onsubmit=\"$onsub\">\n";
echo "<input type=\"hidden\" name=\"del\" value=\"selection\">\n";
echo "<input type=\"hidden\" name=\"id\" value=\"$cm->id\">\n";

print_table($table);

//There might be a more elegant way than using the <center> tag for this
echo "<center><input type=\"submit\" value=\"$strdeleteselected\">&nbsp;";
echo "<input type=button value=\"$strdeleteall\" onClick=\"if(delcheck()){document.delform.submit()}\">\n</center>\n";
echo "</form>\n";

return true;
}

function quiz_get_user_attempts_list($quiz, $attempts, $bestgrade, $timeformat) {
/// Returns a little list of all attempts, one per line,
/// with each grade linked to the feedback report and with the best grade highlighted
/// Each also has information about date and lapsed time

$bestgrade = format_float($bestgrade);

foreach ($attempts as $attempt) {
$attemptgrade = format_float(($attempt->sumgrades / $quiz->sumgrades) * $quiz->grade);
$attemptdate = userdate($attempt->timestart, $timeformat);
if ($attempt->timefinish) {
$attemptlapse = date("I:s", $attempt->timefinish - $attempt->timestart);
} else {
$attemptlapse = "...";
}
$button = "<input type=checkbox name=\"box$attempt->id\" value=\"$attempt->id\">";
$revurl = "review.php?q=$quiz->id&attempt=$attempt->id";
if ($attemptgrade == $bestgrade) {
$userattempts[] = "$button&nbsp;<span class=highlight><a href=\"$revurl\">$attemptgrade</a></span>&nbsp;$attemptdate&nbsp;($attemptlapse)";
} else {
$userattempts[] = "$button&nbsp;<a href=\"$revurl\">$attemptgrade</a>&nbsp;$attemptdate&nbsp;($attemptlapse)";
}
}
return implode("<br />\n", $userattempts);
}

}

?>

0 comments on commit a6478fd

Please sign in to comment.