Fix whitespace problems and Eclipse warnings in Item Analysis quiz report.

This commit is contained in:
tjhunt 2007-03-21 23:04:35 +00:00
parent f77192322f
commit c48ca9308f

View file

@ -1,10 +1,8 @@
<?php // $Id$ <?php // $Id$
/// Item analysis displays a table of quiz questions and their performance
require_once($CFG->libdir.'/tablelib.php'); require_once($CFG->libdir.'/tablelib.php');
/// Item analysis displays a table of quiz questions and their performance /// Item analysis displays a table of quiz questions and their performance
class quiz_report extends quiz_default_report { class quiz_report extends quiz_default_report {
function display($quiz, $cm, $course) { /// This function just displays the report function display($quiz, $cm, $course) { /// This function just displays the report
@ -17,7 +15,7 @@ class quiz_report extends quiz_default_report {
$this->print_header_and_tabs($cm, $course, $quiz, $reportmode="analysis"); $this->print_header_and_tabs($cm, $course, $quiz, $reportmode="analysis");
} }
/// Construct the table for this particular report /// Construct the table for this particular report
if (!$quiz->questions) { if (!$quiz->questions) {
print_heading($strnoattempts); print_heading($strnoattempts);
return true; return true;
@ -30,7 +28,7 @@ class quiz_report extends quiz_default_report {
} else { } else {
$changegroup = optional_param('group', -1, PARAM_INT); $changegroup = optional_param('group', -1, PARAM_INT);
$currentgroup = get_and_set_current_group($course, $groupmode, $changegroup); $currentgroup = get_and_set_current_group($course, $groupmode, $changegroup);
} }
} else { } else {
$currentgroup = false; $currentgroup = false;
@ -50,12 +48,12 @@ class quiz_report extends quiz_default_report {
$$option = $SESSION->quiz_analysis_table[$option] = $urlparam; $$option = $SESSION->quiz_analysis_table[$option] = $urlparam;
} }
} }
$scorelimit = $quiz->sumgrades * $lowmarklimit/ 100; $scorelimit = $quiz->sumgrades * $lowmarklimit/ 100;
// ULPGC ecastro DEBUG this is here to allow for different SQL to select attempts // ULPGC ecastro DEBUG this is here to allow for different SQL to select attempts
switch ($attemptselection) { switch ($attemptselection) {
case QUIZ_ALLATTEMPTS : case QUIZ_ALLATTEMPTS :
$limit = ''; $limit = '';
$group = ''; $group = '';
break; break;
@ -65,11 +63,11 @@ class quiz_report extends quiz_default_report {
break; break;
case QUIZ_FIRSTATTEMPT : case QUIZ_FIRSTATTEMPT :
$limit = ', min(qa.timemodified) '; $limit = ', min(qa.timemodified) ';
$group = ' GROUP BY qa.userid '; $group = ' GROUP BY qa.userid ';
break; break;
case QUIZ_LASTATTEMPT : case QUIZ_LASTATTEMPT :
$limit = ', max(qa.timemodified) '; $limit = ', max(qa.timemodified) ';
$group = ' GROUP BY qa.userid '; $group = ' GROUP BY qa.userid ';
break; break;
} }
@ -80,13 +78,14 @@ class quiz_report extends quiz_default_report {
$sql = 'SELECT qa.* FROM '.$CFG->prefix.'user u '. $sql = 'SELECT qa.* FROM '.$CFG->prefix.'user u '.
'JOIN '.$CFG->prefix.'quiz_attempts qa ON u.id = qa.userid '; 'JOIN '.$CFG->prefix.'quiz_attempts qa ON u.id = qa.userid ';
if (!empty($currentgroup)) { if (!empty($currentgroup)) {
$sql .= groups_members_join_sql($currentgroup); $sql .= groups_members_join_sql($currentgroup);
} }
$sql .= ' WHERE qa.quiz = '.$quiz->id. // ULPGC ecastro $sql .= ' WHERE qa.quiz = '.$quiz->id. // ULPGC ecastro
' AND ( qa.sumgrades >= '.$scorelimit.' ) '; ' AND ( qa.sumgrades >= '.$scorelimit.' ) ';
// ^^^^^^ es posible seleccionar aqu<71> TODOS los quizzes, como quiere Jussi, // ^^^^^^ es posible seleccionar aqu<71> TODOS los quizzes, como quiere Jussi,
// pero habr<62>a que llevar la cuenta ed cada quiz para restaura las preguntas (quizquestions, states) // pero habr<62>a que llevar la cuenta ed cada quiz para restaura las preguntas (quizquestions, states)
/// Fetch the attempts /// Fetch the attempts
$attempts = get_records_sql($sql); $attempts = get_records_sql($sql);
@ -99,7 +98,7 @@ class quiz_report extends quiz_default_report {
/// Here we rewiew all attempts and record data to construct the table /// Here we rewiew all attempts and record data to construct the table
$questions = array(); $questions = array();
$statstable = array(); $statstable = array();
$questionarray = array(); $questionarray = array();
foreach ($attempts as $attempt) { foreach ($attempts as $attempt) {
$questionarray[] = quiz_questions_in_quiz($attempt->layout); $questionarray[] = quiz_questions_in_quiz($attempt->layout);
} }
@ -110,7 +109,7 @@ class quiz_report extends quiz_default_report {
foreach ($attempts as $attempt) { foreach ($attempts as $attempt) {
switch ($attemptselection) { switch ($attemptselection) {
case QUIZ_ALLATTEMPTS : case QUIZ_ALLATTEMPTS :
$userscore = 0; // can be anything, not used $userscore = 0; // can be anything, not used
break; break;
case QUIZ_HIGHESTATTEMPT : case QUIZ_HIGHESTATTEMPT :
@ -119,7 +118,7 @@ class quiz_report extends quiz_default_report {
case QUIZ_FIRSTATTEMPT : case QUIZ_FIRSTATTEMPT :
$userscore = $attempt->timemodified; $userscore = $attempt->timemodified;
break; break;
case QUIZ_LASTATTEMPT : case QUIZ_LASTATTEMPT :
$userscore = $attempt->timemodified; $userscore = $attempt->timemodified;
break; break;
} }
@ -135,7 +134,7 @@ class quiz_report extends quiz_default_report {
if (!$quizquestions = get_records_sql($sql)) { if (!$quizquestions = get_records_sql($sql)) {
error('No questions found'); error('No questions found');
} }
// Load the question type specific information // Load the question type specific information
if (!get_question_options($quizquestions)) { if (!get_question_options($quizquestions)) {
error('Could not load question options'); error('Could not load question options');
@ -147,7 +146,7 @@ class quiz_report extends quiz_default_report {
} }
$numbers = explode(',', $questionlist); $numbers = explode(',', $questionlist);
$statsrow = array(); $statsrow = array();
foreach ($numbers as $i) { foreach ($numbers as $i) {
if (!isset($quizquestions[$i]) or !isset($states[$i])) { if (!isset($quizquestions[$i]) or !isset($states[$i])) {
continue; continue;
} }
@ -155,7 +154,7 @@ class quiz_report extends quiz_default_report {
$q = get_question_responses($quizquestions[$i], $states[$i]); $q = get_question_responses($quizquestions[$i], $states[$i]);
if (empty($q)){ if (empty($q)){
continue; continue;
} }
$qid = $q->id; $qid = $q->id;
if (!isset($questions[$qid])) { if (!isset($questions[$qid])) {
$questions[$qid]['id'] = $qid; $questions[$qid]['id'] = $qid;
@ -166,14 +165,15 @@ class quiz_report extends quiz_default_report {
$questions[$qid]['rcounts'][$answer] = 0; $questions[$qid]['rcounts'][$answer] = 0;
$questions[$qid]['credits'][$answer] = $r->credit; $questions[$qid]['credits'][$answer] = $r->credit;
$statsrow[$qid] = 0; $statsrow[$qid] = 0;
} }
} }
$responses = get_question_actual_response($quizquestions[$i], $states[$i]); $responses = get_question_actual_response($quizquestions[$i], $states[$i]);
foreach ($responses as $resp){ foreach ($responses as $resp){
if ($resp) { if ($resp) {
if ($key = array_search($resp, $questions[$qid]['responses'])) { if ($key = array_search($resp, $questions[$qid]['responses'])) {
$questions[$qid]['rcounts'][$key]++; $questions[$qid]['rcounts'][$key]++;
} else { } else {
$test = new stdClass;
$test->responses = $QTYPES[$quizquestions[$i]->qtype]->get_correct_responses($quizquestions[$i], $states[$i]); $test->responses = $QTYPES[$quizquestions[$i]->qtype]->get_correct_responses($quizquestions[$i], $states[$i]);
if ($key = $QTYPES[$quizquestions[$i]->qtype]->check_response($quizquestions[$i], $states[$i], $test)) { if ($key = $QTYPES[$quizquestions[$i]->qtype]->check_response($quizquestions[$i], $states[$i], $test)) {
$questions[$qid]['rcounts'][$key]++; $questions[$qid]['rcounts'][$key]++;
@ -187,11 +187,11 @@ class quiz_report extends quiz_default_report {
} }
$statsrow[$qid] = get_question_fraction_grade($quizquestions[$i], $states[$i]); $statsrow[$qid] = get_question_fraction_grade($quizquestions[$i], $states[$i]);
} }
$attemptscores[$attempt->id] = $attempt->sumgrades; $attemptscores[$attempt->id] = $attempt->sumgrades;
$statstable[$attempt->id] = $statsrow; $statstable[$attempt->id] = $statsrow;
} }
} // Statistics Data table built } // Statistics Data table built
unset($attempts); unset($attempts);
unset($quizquestions); unset($quizquestions);
unset($states); unset($states);
@ -207,7 +207,7 @@ class quiz_report extends quiz_default_report {
} }
unset($attemptscores); unset($attemptscores);
unset($statstable); unset($statstable);
/// Now check if asked download of data /// Now check if asked download of data
if ($download = optional_param('download', NULL)) { if ($download = optional_param('download', NULL)) {
$filename = clean_filename("$course->shortname ".format_string($quiz->name,true)); $filename = clean_filename("$course->shortname ".format_string($quiz->name,true));
@ -215,23 +215,23 @@ class quiz_report extends quiz_default_report {
case "Excel" : case "Excel" :
$this->Export_Excel($questions, $filename); $this->Export_Excel($questions, $filename);
break; break;
case "ODS": case "ODS":
$this->Export_ODS($questions, $filename); $this->Export_ODS($questions, $filename);
break; break;
case "CSV": case "CSV":
$this->Export_CSV($questions, $filename); $this->Export_CSV($questions, $filename);
break; break;
} }
} }
/// Construct the table for this particular report /// Construct the table for this particular report
$tablecolumns = array('id', 'qname', 'responses', 'credits', 'rcounts', 'rpercent', 'facility', 'qsd','disc_index', 'disc_coeff'); $tablecolumns = array('id', 'qname', 'responses', 'credits', 'rcounts', 'rpercent', 'facility', 'qsd','disc_index', 'disc_coeff');
$tableheaders = array(get_string('qidtitle','quiz_analysis'), get_string('qtexttitle','quiz_analysis'), $tableheaders = array(get_string('qidtitle','quiz_analysis'), get_string('qtexttitle','quiz_analysis'),
get_string('responsestitle','quiz_analysis'), get_string('rfractiontitle','quiz_analysis'), get_string('responsestitle','quiz_analysis'), get_string('rfractiontitle','quiz_analysis'),
get_string('rcounttitle','quiz_analysis'), get_string('rpercenttitle','quiz_analysis'), get_string('rcounttitle','quiz_analysis'), get_string('rpercenttitle','quiz_analysis'),
get_string('facilitytitle','quiz_analysis'), get_string('stddevtitle','quiz_analysis'), get_string('facilitytitle','quiz_analysis'), get_string('stddevtitle','quiz_analysis'),
get_string('dicsindextitle','quiz_analysis'), get_string('disccoefftitle','quiz_analysis')); get_string('dicsindextitle','quiz_analysis'), get_string('disccoefftitle','quiz_analysis'));
$table = new flexible_table('mod-quiz-report-itemanalysis'); $table = new flexible_table('mod-quiz-report-itemanalysis');
@ -242,16 +242,16 @@ class quiz_report extends quiz_default_report {
$table->sortable(true); $table->sortable(true);
$table->collapsible(true); $table->collapsible(true);
$table->initialbars(false); $table->initialbars(false);
$table->column_class('id', 'numcol'); $table->column_class('id', 'numcol');
$table->column_class('credits', 'numcol'); $table->column_class('credits', 'numcol');
$table->column_class('rcounts', 'numcol'); $table->column_class('rcounts', 'numcol');
$table->column_class('rpercent', 'numcol'); $table->column_class('rpercent', 'numcol');
$table->column_class('facility', 'numcol'); $table->column_class('facility', 'numcol');
$table->column_class('qsd', 'numcol'); $table->column_class('qsd', 'numcol');
$table->column_class('disc_index', 'numcol'); $table->column_class('disc_index', 'numcol');
$table->column_class('disc_coeff', 'numcol'); $table->column_class('disc_coeff', 'numcol');
$table->column_suppress('id'); $table->column_suppress('id');
$table->column_suppress('qname'); $table->column_suppress('qname');
$table->column_suppress('facility'); $table->column_suppress('facility');
@ -262,19 +262,19 @@ class quiz_report extends quiz_default_report {
$table->set_attribute('cellspacing', '0'); $table->set_attribute('cellspacing', '0');
$table->set_attribute('id', 'itemanalysis'); $table->set_attribute('id', 'itemanalysis');
$table->set_attribute('class', 'generaltable generalbox'); $table->set_attribute('class', 'generaltable generalbox');
// Start working -- this is necessary as soon as the niceties are over // Start working -- this is necessary as soon as the niceties are over
$table->setup(); $table->setup();
$tablesort = $table->get_sql_sort(); $tablesort = $table->get_sql_sort();
$sorts = explode(",",trim($tablesort)); $sorts = explode(",",trim($tablesort));
if ($tablesort and is_array($sorts)) { if ($tablesort and is_array($sorts)) {
$sortindex = array(); $sortindex = array();
$sortorder = array (); $sortorder = array ();
foreach ($sorts as $sort) { foreach ($sorts as $sort) {
$data = explode(" ",trim($sort)); $data = explode(" ",trim($sort));
$sortindex[] = trim($data[0]); $sortindex[] = trim($data[0]);
$s = trim($data[1]); $s = trim($data[1]);
if ($s=="ASC") { if ($s=="ASC") {
$sortorder[] = SORT_ASC; $sortorder[] = SORT_ASC;
} else { } else {
@ -292,30 +292,31 @@ class quiz_report extends quiz_default_report {
} }
} }
// Now it is time to page the data, simply slice the keys in the array // Now it is time to page the data, simply slice the keys in the array
if (!isset($pagesize) || ((int)$pagesize < 1) ){ if (!isset($pagesize) || ((int)$pagesize < 1) ){
$pagesize = 10; $pagesize = 10;
} }
$table->pagesize($pagesize, count($questions)); $table->pagesize($pagesize, count($questions));
$start = $table->get_page_start(); $start = $table->get_page_start();
$pagequestions = array_slice(array_keys($questions), $start, $pagesize); $pagequestions = array_slice(array_keys($questions), $start, $pagesize);
foreach($pagequestions as $qnum) { foreach($pagequestions as $qnum) {
$q = $questions[$qnum]; $q = $questions[$qnum];
$qid = $q['id']; $qid = $q['id'];
$question = get_record('question', 'id', $qid); $question = get_record('question', 'id', $qid);
$qnumber = " (".link_to_popup_window('/question/question.php?id='.$qid,'editquestion', $qid, 450, 550, get_string('edit'), 'none', true ).") "; $qnumber = " (".link_to_popup_window('/question/question.php?id='.$qid,'editquestion', $qid, 450, 550, get_string('edit'), 'none', true ).") ";
$qname = '<div class="qname">'.format_text($question->name." : ", $question->questiontextformat, NULL, $quiz->course).'</div>'; $qname = '<div class="qname">'.format_text($question->name." : ", $question->questiontextformat, NULL, $quiz->course).'</div>';
$qicon = print_question_icon($question, false, true); $qicon = print_question_icon($question, false, true);
$qreview = quiz_get_question_review($quiz, $question); $qreview = quiz_get_question_review($quiz, $question);
$qtext = format_text($question->questiontext, $question->questiontextformat, NULL, $quiz->course); $qtext = format_text($question->questiontext, $question->questiontextformat, NULL, $quiz->course);
$qquestion = $qname."\n".$qtext."\n"; $qquestion = $qname."\n".$qtext."\n";
$format_options = new stdClass;
$format_options->para = false; $format_options->para = false;
$format_options->newlines = false; $format_options->newlines = false;
unset($responses); unset($responses);
foreach ($q['responses'] as $aid=>$resp){ foreach ($q['responses'] as $aid=>$resp){
unset($response); $response = new stdClass;
if ($q['credits'][$aid] <= 0) { if ($q['credits'][$aid] <= 0) {
$qclass = 'uncorrect'; $qclass = 'uncorrect';
} elseif ($q['credits'][$aid] == 1) { } elseif ($q['credits'][$aid] == 1) {
@ -323,26 +324,26 @@ class quiz_report extends quiz_default_report {
} else { } else {
$qclass = 'partialcorrect'; $qclass = 'partialcorrect';
} }
$response->credit = '<span class="'.$qclass.'">('.format_float($q['credits'][$aid],2).') </span>'; $response->credit = '<span class="'.$qclass.'">('.format_float($q['credits'][$aid],2).') </span>';
$response->text = '<span class="'.$qclass.'">'.format_text("$resp", FORMAT_MOODLE, $format_options, $quiz->course).' </span>'; $response->text = '<span class="'.$qclass.'">'.format_text("$resp", FORMAT_MOODLE, $format_options, $quiz->course).' </span>';
$count = $q['rcounts'][$aid].'/'.$q['count']; $count = $q['rcounts'][$aid].'/'.$q['count'];
$response->rcount = $count; // format_text("$count", FORMAT_MOODLE, $format_options, $quiz->course); $response->rcount = $count; // format_text("$count", FORMAT_MOODLE, $format_options, $quiz->course);
$response->rpercent = '('.format_float($q['rcounts'][$aid]/$q['count']*100,0).'%)'; $response->rpercent = '('.format_float($q['rcounts'][$aid]/$q['count']*100,0).'%)';
$responses[] = $response; $responses[] = $response;
} }
$facility = format_float($q['facility']*100,0)." %"; $facility = format_float($q['facility']*100,0)." %";
$qsd = format_float($q['qsd'],3); $qsd = format_float($q['qsd'],3);
$di = format_float($q['disc_index'],2); $di = format_float($q['disc_index'],2);
$dc = format_float($q['disc_coeff'],2); $dc = format_float($q['disc_coeff'],2);
$response = array_shift($responses); $response = array_shift($responses);
$table->add_data(array($qnumber."\n<br />".$qicon."\n ".$qreview, $qquestion, $response->text, $response->credit, $response->rcount, $response->rpercent, $facility, $qsd, $di, $dc)); $table->add_data(array($qnumber."\n<br />".$qicon."\n ".$qreview, $qquestion, $response->text, $response->credit, $response->rcount, $response->rpercent, $facility, $qsd, $di, $dc));
foreach($responses as $response) { foreach($responses as $response) {
$table->add_data(array('', '', $response->text, $response->credit, $response->rcount, $response->rpercent, '', '', '', '')); $table->add_data(array('', '', $response->text, $response->credit, $response->rcount, $response->rpercent, '', '', '', ''));
} }
} }
print_heading_with_help(get_string("analysistitle", "quiz_analysis"),"itemanalysis", "quiz"); print_heading_with_help(get_string("analysistitle", "quiz_analysis"),"itemanalysis", "quiz");
echo '<div id="tablecontainer">'; echo '<div id="tablecontainer">';
@ -385,9 +386,9 @@ class quiz_report extends quiz_default_report {
echo '</td></tr></table>'; echo '</td></tr></table>';
echo '</fieldset>'; echo '</fieldset>';
echo '</form>'; echo '</form>';
echo '</div>'; echo '</div>';
echo "\n"; echo "\n";
echo '<table class="boxaligncenter"><tr>'; echo '<table class="boxaligncenter"><tr>';
$options = array(); $options = array();
$options["id"] = "$cm->id"; $options["id"] = "$cm->id";
@ -395,17 +396,17 @@ class quiz_report extends quiz_default_report {
$options["mode"] = "analysis"; $options["mode"] = "analysis";
$options['sesskey'] = $USER->sesskey; $options['sesskey'] = $USER->sesskey;
$options["noheader"] = "yes"; $options["noheader"] = "yes";
echo '<td>'; echo '<td>';
$options["download"] = "ODS"; $options["download"] = "ODS";
print_single_button("report.php", $options, get_string("downloadods")); print_single_button("report.php", $options, get_string("downloadods"));
echo "</td>\n"; echo "</td>\n";
echo '<td>'; echo '<td>';
$options["download"] = "Excel"; $options["download"] = "Excel";
print_single_button("report.php", $options, get_string("downloadexcel")); print_single_button("report.php", $options, get_string("downloadexcel"));
echo "</td>\n"; echo "</td>\n";
if (file_exists("$CFG->libdir/phpdocwriter/lib/include.php")) { if (file_exists("$CFG->libdir/phpdocwriter/lib/include.php")) {
echo '<td>'; echo '<td>';
$options["download"] = "OOo"; $options["download"] = "OOo";
print_single_button("report.php", $options, get_string("downloadooo", "quiz_analysis")); print_single_button("report.php", $options, get_string("downloadooo", "quiz_analysis"));
echo "</td>\n"; echo "</td>\n";
@ -435,7 +436,7 @@ class quiz_report extends quiz_default_report {
if ($attemptscores[$aid]<=$bottom){ if ($attemptscores[$aid]<=$bottom){
$bottom_scores +=$qrow[$qid]; $bottom_scores +=$qrow[$qid];
$bottom_count++; $bottom_count++;
} }
} }
} }
$n = count($qstats); $n = count($qstats);
@ -447,7 +448,7 @@ class quiz_report extends quiz_default_report {
$sumq2 = $sumx2[1]; $sumq2 = $sumx2[1];
$sumxy = stats_sumxy($qstats, array(0,0)); $sumxy = stats_sumxy($qstats, array(0,0));
$sumgq = $sumxy[0]; $sumgq = $sumxy[0];
$q['count'] = $n; $q['count'] = $n;
$q['facility'] = $sumq/$n; $q['facility'] = $sumq/$n;
if ($n<2) { if ($n<2) {
@ -513,22 +514,22 @@ class quiz_report extends quiz_default_report {
/// Here starts workshhet headers /// Here starts workshhet headers
$myxls->write_string(0,0,$sheettitle,$formatb); $myxls->write_string(0,0,$sheettitle,$formatb);
$headers = array(get_string('qidtitle','quiz_analysis'), get_string('qtypetitle','quiz_analysis'), $headers = array(get_string('qidtitle','quiz_analysis'), get_string('qtypetitle','quiz_analysis'),
get_string('qnametitle','quiz_analysis'), get_string('qtexttitle','quiz_analysis'), get_string('qnametitle','quiz_analysis'), get_string('qtexttitle','quiz_analysis'),
get_string('responsestitle','quiz_analysis'), get_string('rfractiontitle','quiz_analysis'), get_string('responsestitle','quiz_analysis'), get_string('rfractiontitle','quiz_analysis'),
get_string('rcounttitle','quiz_analysis'), get_string('rpercenttitle','quiz_analysis'), get_string('rcounttitle','quiz_analysis'), get_string('rpercenttitle','quiz_analysis'),
get_string('qcounttitle','quiz_analysis'), get_string('qcounttitle','quiz_analysis'),
get_string('facilitytitle','quiz_analysis'), get_string('stddevtitle','quiz_analysis'), get_string('facilitytitle','quiz_analysis'), get_string('stddevtitle','quiz_analysis'),
get_string('dicsindextitle','quiz_analysis'), get_string('disccoefftitle','quiz_analysis')); get_string('dicsindextitle','quiz_analysis'), get_string('disccoefftitle','quiz_analysis'));
$col = 0; $col = 0;
foreach ($headers as $item) { foreach ($headers as $item) {
$myxls->write(2,$col,$item,$formatbc); $myxls->write(2,$col,$item,$formatbc);
$col++; $col++;
} }
$row = 3; $row = 3;
foreach($questions as $q) { foreach($questions as $q) {
$rows = $this->print_row_stats_data($q); $rows = $this->print_row_stats_data($q);
foreach($rows as $rowdata){ foreach($rows as $rowdata){
$col = 0; $col = 0;
@ -592,22 +593,22 @@ class quiz_report extends quiz_default_report {
/// Here starts workshhet headers /// Here starts workshhet headers
$myxls->write_string(0,0,$sheettitle,$formatb); $myxls->write_string(0,0,$sheettitle,$formatb);
$headers = array(get_string('qidtitle','quiz_analysis'), get_string('qtypetitle','quiz_analysis'), $headers = array(get_string('qidtitle','quiz_analysis'), get_string('qtypetitle','quiz_analysis'),
get_string('qnametitle','quiz_analysis'), get_string('qtexttitle','quiz_analysis'), get_string('qnametitle','quiz_analysis'), get_string('qtexttitle','quiz_analysis'),
get_string('responsestitle','quiz_analysis'), get_string('rfractiontitle','quiz_analysis'), get_string('responsestitle','quiz_analysis'), get_string('rfractiontitle','quiz_analysis'),
get_string('rcounttitle','quiz_analysis'), get_string('rpercenttitle','quiz_analysis'), get_string('rcounttitle','quiz_analysis'), get_string('rpercenttitle','quiz_analysis'),
get_string('qcounttitle','quiz_analysis'), get_string('qcounttitle','quiz_analysis'),
get_string('facilitytitle','quiz_analysis'), get_string('stddevtitle','quiz_analysis'), get_string('facilitytitle','quiz_analysis'), get_string('stddevtitle','quiz_analysis'),
get_string('dicsindextitle','quiz_analysis'), get_string('disccoefftitle','quiz_analysis')); get_string('dicsindextitle','quiz_analysis'), get_string('disccoefftitle','quiz_analysis'));
$col = 0; $col = 0;
foreach ($headers as $item) { foreach ($headers as $item) {
$myxls->write(2,$col,$item,$formatbc); $myxls->write(2,$col,$item,$formatbc);
$col++; $col++;
} }
$row = 3; $row = 3;
foreach($questions as $q) { foreach($questions as $q) {
$rows = $this->print_row_stats_data($q); $rows = $this->print_row_stats_data($q);
foreach($rows as $rowdata){ foreach($rows as $rowdata){
$col = 0; $col = 0;
@ -626,19 +627,19 @@ class quiz_report extends quiz_default_report {
function Export_CSV(&$questions, $filename) { function Export_CSV(&$questions, $filename) {
$headers = array(get_string('qidtitle','quiz_analysis'), get_string('qtypetitle','quiz_analysis'), $headers = array(get_string('qidtitle','quiz_analysis'), get_string('qtypetitle','quiz_analysis'),
get_string('qnametitle','quiz_analysis'), get_string('qtexttitle','quiz_analysis'), get_string('qnametitle','quiz_analysis'), get_string('qtexttitle','quiz_analysis'),
get_string('responsestitle','quiz_analysis'), get_string('rfractiontitle','quiz_analysis'), get_string('responsestitle','quiz_analysis'), get_string('rfractiontitle','quiz_analysis'),
get_string('rcounttitle','quiz_analysis'), get_string('rpercenttitle','quiz_analysis'), get_string('rcounttitle','quiz_analysis'), get_string('rpercenttitle','quiz_analysis'),
get_string('qcounttitle','quiz_analysis'), get_string('qcounttitle','quiz_analysis'),
get_string('facilitytitle','quiz_analysis'), get_string('stddevtitle','quiz_analysis'), get_string('facilitytitle','quiz_analysis'), get_string('stddevtitle','quiz_analysis'),
get_string('dicsindextitle','quiz_analysis'), get_string('disccoefftitle','quiz_analysis')); get_string('dicsindextitle','quiz_analysis'), get_string('disccoefftitle','quiz_analysis'));
$text = implode("\t", $headers)." \n"; $text = implode("\t", $headers)." \n";
$filename .= ".txt"; $filename .= ".txt";
header("Content-Type: application/download\n"); header("Content-Type: application/download\n");
header("Content-Disposition: attachment; filename=\"$filename\""); header("Content-Disposition: attachment; filename=\"$filename\"");
header("Expires: 0"); header("Expires: 0");
header("Cache-Control: must-revalidate,post-check=0,pre-check=0"); header("Cache-Control: must-revalidate,post-check=0,pre-check=0");
@ -646,7 +647,7 @@ class quiz_report extends quiz_default_report {
echo $text; echo $text;
foreach($questions as $q) { foreach($questions as $q) {
$rows = $this->print_row_stats_data($q); $rows = $this->print_row_stats_data($q);
foreach($rows as $row){ foreach($rows as $row){
$text = implode("\t", $row); $text = implode("\t", $row);
@ -660,17 +661,18 @@ class quiz_report extends quiz_default_report {
$qid = $q['id']; $qid = $q['id'];
$question = get_record('question', 'id', $qid); $question = get_record('question', 'id', $qid);
$options = new stdClass;
$options->para = false; $options->para = false;
$options->newlines = false; $options->newlines = false;
$qtype = $question->qtype; $qtype = $question->qtype;
$qname = format_text($question->name, FORMAT_MOODLE, $options); $qname = format_text($question->name, FORMAT_MOODLE, $options);
$qtext = format_text($question->questiontext, FORMAT_MOODLE, $options); $qtext = format_text($question->questiontext, FORMAT_MOODLE, $options);
unset($responses); $responses = array();
foreach ($q['responses'] as $aid=>$resp){ foreach ($q['responses'] as $aid=>$resp){
unset($response); $response = new stdClass;
if ($q['credits'][$aid] <= 0) { if ($q['credits'][$aid] <= 0) {
$qclass = 'uncorrect'; $qclass = 'uncorrect';
} elseif ($q['credits'][$aid] == 1) { } elseif ($q['credits'][$aid] == 1) {
@ -678,10 +680,10 @@ class quiz_report extends quiz_default_report {
} else { } else {
$qclass = 'partialcorrect'; $qclass = 'partialcorrect';
} }
$response->credit = " (".format_float($q['credits'][$aid],2).") "; $response->credit = " (".format_float($q['credits'][$aid],2).") ";
$response->text = format_text("$resp", FORMAT_MOODLE, $options); $response->text = format_text("$resp", FORMAT_MOODLE, $options);
$count = $q['rcounts'][$aid].'/'.$q['count']; $count = $q['rcounts'][$aid].'/'.$q['count'];
$response->rcount = $count; $response->rcount = $count;
$response->rpercent = '('.format_float($q['rcounts'][$aid]/$q['count']*100,0).'%)'; $response->rpercent = '('.format_float($q['rcounts'][$aid]/$q['count']*100,0).'%)';
$responses[] = $response; $responses[] = $response;
} }
@ -690,16 +692,16 @@ class quiz_report extends quiz_default_report {
$qsd = format_float($q['qsd'],4); $qsd = format_float($q['qsd'],4);
$di = format_float($q['disc_index'],3); $di = format_float($q['disc_index'],3);
$dc = format_float($q['disc_coeff'],3); $dc = format_float($q['disc_coeff'],3);
unset($result); $result = array();
$response = array_shift($responses); $response = array_shift($responses);
$result[] = array($qid, $qtype, $qname, $qtext, $response->text, $response->credit, $response->rcount, $response->rpercent, $count, $facility, $qsd, $di, $dc); $result[] = array($qid, $qtype, $qname, $qtext, $response->text, $response->credit, $response->rcount, $response->rpercent, $count, $facility, $qsd, $di, $dc);
foreach($responses as $response){ foreach($responses as $response){
$result[] = array('', '', '', '', $response->text, $response->credit, $response->rcount, $response->rpercent, '', '', '', '', ''); $result[] = array('', '', '', '', $response->text, $response->credit, $response->rcount, $response->rpercent, '', '', '', '', '');
} }
return $result; return $result;
} }
} }
define('QUIZ_ALLATTEMPTS', 0); define('QUIZ_ALLATTEMPTS', 0);
define('QUIZ_HIGHESTATTEMPT', 1); define('QUIZ_HIGHESTATTEMPT', 1);
@ -713,7 +715,7 @@ function stats_sumx($data, $initsum){
$accum[1] += $v[1]; $accum[1] += $v[1];
} }
return $accum; return $accum;
} }
function stats_sumx2($data, $initsum){ function stats_sumx2($data, $initsum){
$accum = $initsum; $accum = $initsum;
@ -722,7 +724,7 @@ function stats_sumx2($data, $initsum){
$accum[1] += $v[1]*$v[1]; $accum[1] += $v[1]*$v[1];
} }
return $accum; return $accum;
} }
function stats_sumxy($data, $initsum){ function stats_sumxy($data, $initsum){
$accum = $initsum; $accum = $initsum;