MDL-14203 "split report into two seperate reports - Quiz Statistics report and Individual Item Analysis report" checking this file in although it is not used yet. It is included in report.php.
This commit is contained in:
@@ -0,0 +1,210 @@
|
||||
<?php // $Id$
|
||||
|
||||
class quiz_report_statistics_table extends table_sql {
|
||||
|
||||
var $useridfield = 'userid';
|
||||
|
||||
var $candelete;
|
||||
var $reporturl;
|
||||
var $displayoptions;
|
||||
|
||||
function quiz_report_statistics_table($quiz , $questions, $reporturl){
|
||||
parent::table_sql('mod-quiz-report-statistics-report');
|
||||
$this->quiz = $quiz;
|
||||
$this->questions = $questions;
|
||||
$this->reporturl = $reporturl;
|
||||
}
|
||||
function build_table(){
|
||||
global $CFG;
|
||||
if ($this->rawdata) {
|
||||
// Define some things we need later to process raw data from db.
|
||||
$this->strtimeformat = get_string('strftimedatetime');
|
||||
parent::build_table();
|
||||
//end of adding data from attempts data to table / download
|
||||
//now add averages at bottom of table :
|
||||
$averagesql = "SELECT AVG(qg.grade) AS grade " .
|
||||
"FROM {$CFG->prefix}quiz_grades qg " .
|
||||
"WHERE quiz=".$this->quiz->id;
|
||||
|
||||
$this->add_separator();
|
||||
if ($this->is_downloading()){
|
||||
$namekey = 'lastname';
|
||||
} else {
|
||||
$namekey = 'fullname';
|
||||
}
|
||||
if ($this->groupstudents){
|
||||
$groupaveragesql = $averagesql." AND qg.userid IN ($this->groupstudents)";
|
||||
$groupaverage = get_record_sql($groupaveragesql);
|
||||
$groupaveragerow = array($namekey => get_string('groupavg', 'grades'),
|
||||
'sumgrades' => round($groupaverage->grade, $this->quiz->decimalpoints),
|
||||
'feedbacktext'=> strip_tags(quiz_report_feedback_for_grade($groupaverage->grade, $this->quiz->id)));
|
||||
if($this->detailedmarks && $this->qmsubselect) {
|
||||
$avggradebyq = quiz_get_average_grade_for_questions($this->quiz, $this->groupstudents);
|
||||
$groupaveragerow += quiz_format_average_grade_for_questions($avggradebyq, $this->questions, $this->quiz, $this->is_downloading());
|
||||
}
|
||||
$this->add_data_keyed($groupaveragerow);
|
||||
}
|
||||
$overallaverage = get_record_sql($averagesql." AND qg.userid IN ($this->students)");
|
||||
$overallaveragerow = array($namekey => get_string('overallaverage', 'grades'),
|
||||
'sumgrades' => round($overallaverage->grade, $this->quiz->decimalpoints),
|
||||
'feedbacktext'=> strip_tags(quiz_report_feedback_for_grade($overallaverage->grade, $this->quiz->id)));
|
||||
if($this->detailedmarks && $this->qmsubselect) {
|
||||
$avggradebyq = quiz_get_average_grade_for_questions($this->quiz, $this->students);
|
||||
$overallaveragerow += quiz_format_average_grade_for_questions($avggradebyq, $this->questions, $this->quiz, $this->is_downloading());
|
||||
}
|
||||
$this->add_data_keyed($overallaveragerow);
|
||||
}
|
||||
}
|
||||
|
||||
function wrap_html_start(){
|
||||
if (!$this->is_downloading()) {
|
||||
if ($this->candelete) {
|
||||
// Start form
|
||||
$strreallydel = addslashes_js(get_string('deleteattemptcheck','quiz'));
|
||||
echo '<div id="tablecontainer">';
|
||||
echo '<form id="attemptsform" method="post" action="' . $this->reporturl->out(true) .
|
||||
'" onsubmit="confirm(\''.$strreallydel.'\');">';
|
||||
echo $this->reporturl->hidden_params_out(array(), 0, $this->displayoptions);
|
||||
echo '<div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
function wrap_html_finish(){
|
||||
if (!$this->is_downloading()) {
|
||||
// Print "Select all" etc.
|
||||
if ($this->candelete) {
|
||||
echo '<table id="commands">';
|
||||
echo '<tr><td>';
|
||||
echo '<a href="javascript:select_all_in(\'DIV\',null,\'tablecontainer\');">'.
|
||||
get_string('selectall', 'quiz').'</a> / ';
|
||||
echo '<a href="javascript:deselect_all_in(\'DIV\',null,\'tablecontainer\');">'.
|
||||
get_string('selectnone', 'quiz').'</a> ';
|
||||
echo ' ';
|
||||
echo '<input type="submit" value="'.get_string('deleteselected', 'quiz_overview').'"/>';
|
||||
echo '</td></tr></table>';
|
||||
// Close form
|
||||
echo '</div>';
|
||||
echo '</form></div>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function col_checkbox($attempt){
|
||||
if ($attempt->attempt){
|
||||
return '<input type="checkbox" name="attemptid[]" value="'.$attempt->attempt.'" />';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
function col_picture($attempt){
|
||||
global $COURSE;
|
||||
return print_user_picture($attempt->userid, $COURSE->id, $attempt->picture, false, true);
|
||||
}
|
||||
|
||||
|
||||
function col_timestart($attempt){
|
||||
if ($attempt->attempt) {
|
||||
$startdate = userdate($attempt->timestart, $this->strtimeformat);
|
||||
if (!$this->is_downloading()) {
|
||||
return '<a href="review.php?q='.$this->quiz->id.'&attempt='.$attempt->attempt.'">'.$startdate.'</a>';
|
||||
} else {
|
||||
return $startdate;
|
||||
}
|
||||
} else {
|
||||
return '-';
|
||||
}
|
||||
}
|
||||
function col_timefinish($attempt){
|
||||
if ($attempt->attempt) {
|
||||
if ($attempt->timefinish) {
|
||||
$timefinish = userdate($attempt->timefinish, $this->strtimeformat);
|
||||
if (!$this->is_downloading()) {
|
||||
return '<a href="review.php?q='.$this->quiz->id.'&attempt='.$attempt->attempt.'">'.$timefinish.'</a>';
|
||||
} else {
|
||||
return $timefinish;
|
||||
}
|
||||
} else {
|
||||
return '-';
|
||||
}
|
||||
} else {
|
||||
return '-';
|
||||
}
|
||||
}
|
||||
|
||||
function col_duration($attempt){
|
||||
if ($attempt->timefinish) {
|
||||
return format_time($attempt->duration);
|
||||
} elseif ($attempt->timestart) {
|
||||
return get_string('unfinished', 'quiz');
|
||||
} else {
|
||||
return '-';
|
||||
}
|
||||
}
|
||||
function col_sumgrades($attempt){
|
||||
if ($attempt->timefinish) {
|
||||
$grade = quiz_rescale_grade($attempt->sumgrades, $this->quiz);
|
||||
if (!$this->is_downloading()) {
|
||||
$gradehtml = '<a href="review.php?q='.$this->quiz->id.'&attempt='.$attempt->attempt.'">'.$grade.'</a>';
|
||||
if ($this->qmsubselect && $attempt->gradedattempt){
|
||||
$gradehtml = '<div class="highlight">'.$gradehtml.'</div>';
|
||||
}
|
||||
return $gradehtml;
|
||||
} else {
|
||||
return $grade;
|
||||
}
|
||||
} else {
|
||||
return '-';
|
||||
}
|
||||
}
|
||||
function other_cols($colname, $attempt){
|
||||
static $gradedstatesbyattempt = null;
|
||||
if ($gradedstatesbyattempt === null){
|
||||
//get all the attempt ids we want to display on this page
|
||||
//or to export for download.
|
||||
$attemptids = array();
|
||||
foreach ($this->rawdata as $attempt){
|
||||
if ($attempt->attemptuniqueid > 0){
|
||||
$attemptids[] = $attempt->attemptuniqueid;
|
||||
}
|
||||
}
|
||||
$gradedstatesbyattempt = quiz_get_newgraded_states($attemptids, true, 'qs.id, qs.grade, qs.event, qs.question, qs.attempt');
|
||||
}
|
||||
if (preg_match('/^qsgrade([0-9]+)$/', $colname, $matches)){
|
||||
$questionid = $matches[1];
|
||||
$question = $this->questions[$questionid];
|
||||
$stateforqinattempt = $gradedstatesbyattempt[$attempt->attemptuniqueid][$questionid];
|
||||
if (question_state_is_graded($stateforqinattempt)) {
|
||||
$grade = quiz_rescale_grade($stateforqinattempt->grade, $this->quiz);
|
||||
} else {
|
||||
$grade = '--';
|
||||
}
|
||||
if (!$this->is_downloading()) {
|
||||
$grade = $grade.'/'.quiz_rescale_grade($question->grade, $this->quiz);
|
||||
return link_to_popup_window('/mod/quiz/reviewquestion.php?state='.
|
||||
$stateforqinattempt->id.'&number='.$question->number,
|
||||
'reviewquestion', $grade, 450, 650, get_string('reviewresponse', 'quiz'),
|
||||
'none', true);
|
||||
} else {
|
||||
return $grade;
|
||||
}
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
function col_feedbacktext($attempt){
|
||||
if ($attempt->timefinish) {
|
||||
if (!$this->is_downloading()) {
|
||||
return quiz_report_feedback_for_grade(quiz_rescale_grade($attempt->sumgrades, $this->quiz), $this->quiz->id);
|
||||
} else {
|
||||
return strip_tags(quiz_report_feedback_for_grade(quiz_rescale_grade($attempt->sumgrades, $this->quiz), $this->quiz->id));
|
||||
}
|
||||
} else {
|
||||
return '-';
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user