From c025084022a44158b0f9b6b97177fb2da804fd57 Mon Sep 17 00:00:00 2001 From: jamiesensei Date: Sun, 15 Jun 2008 11:58:16 +0000 Subject: [PATCH] MDL-14203 "split report into two seperate reports - Quiz Statistics report and Individual Item Analysis report" added start of "Quiz structure analysis" table --- lang/en_utf8/quiz_statistics.php | 4 + mod/quiz/report/statistics/report.php | 14 +- .../report/statistics/statistics_table.php | 267 +++++------------- theme/standard/styles_layout.css | 2 +- 4 files changed, 91 insertions(+), 196 deletions(-) diff --git a/lang/en_utf8/quiz_statistics.php b/lang/en_utf8/quiz_statistics.php index 7feab43a30..f6341df9f3 100644 --- a/lang/en_utf8/quiz_statistics.php +++ b/lang/en_utf8/quiz_statistics.php @@ -28,4 +28,8 @@ $string['kurtosis'] = 'Score distribution kurtosis'; $string['cic'] = 'Coefficient of internal consistency'; $string['errorratio'] = 'Error ratio'; $string['standarderror'] = 'Standard error'; +$string['questionnumber'] = 'Q#'; +$string['quizstructureanalysis'] = 'Quiz structure analysis'; +$string['questiontype'] = 'Q type'; +$string['intended_weight'] = 'Intended question weight'; ?> \ No newline at end of file diff --git a/mod/quiz/report/statistics/report.php b/mod/quiz/report/statistics/report.php index 7780c5089c..ea931266da 100644 --- a/mod/quiz/report/statistics/report.php +++ b/mod/quiz/report/statistics/report.php @@ -55,9 +55,9 @@ class quiz_report extends quiz_default_report { $allowedlist = $groupstudentslist; } - $questions = quiz_report_load_questions($quiz); + $questions = question_load_questions(quiz_questions_in_quiz($quiz->questions)); - $table = new quiz_report_statistics_table($quiz , $questions, $reporturl); + $table = new quiz_report_statistics_table(); $table->is_downloading($download, get_string('reportstatistics','quiz_statistics'), "$course->shortname ".format_string($quiz->name,true)); if (!$table->is_downloading()) { @@ -261,8 +261,16 @@ class quiz_report extends quiz_default_report { $quizattsstatistics->data[] = array(get_string('standarderror', 'quiz_statistics'), quiz_report_scale_sumgrades_as_percentage($standarderror, $quiz)); print_table($quizattsstatistics); - + + } + if (!$table->is_downloading()){ + print_heading(get_string('quizstructureanalysis', 'quiz_statistics')); + } + $table->setup($quiz, $cm->id, $reporturl); + foreach ($questions as $question){ + $table->add_data_keyed($table->format_row($question)); } + $table->finish_output(); return true; } diff --git a/mod/quiz/report/statistics/statistics_table.php b/mod/quiz/report/statistics/statistics_table.php index 38941bb398..6d4889c36a 100644 --- a/mod/quiz/report/statistics/statistics_table.php +++ b/mod/quiz/report/statistics/statistics_table.php @@ -1,211 +1,94 @@ quiz = $quiz; - $this->questions = $questions; - $this->reporturl = $reporturl; + function quiz_report_statistics_table(){ + parent::flexible_table('mod-quiz-report-statistics-report'); } - function build_table(){ - global $CFG, $DB; - 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 {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 = $DB->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 = $DB->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 '
'; - echo '
'; - echo $this->reporturl->hidden_params_out(array(), 0, $this->displayoptions); - echo '
'; - } - } - } - function wrap_html_finish(){ - if (!$this->is_downloading()) { - // Print "Select all" etc. - if ($this->candelete) { - echo ''; - echo '
'; - echo ''. - get_string('selectall', 'quiz').' / '; - echo ''. - get_string('selectnone', 'quiz').' '; - echo '  '; - echo ''; - echo '
'; - // Close form - echo '
'; - echo '
'; - } - } - } - - - function col_checkbox($attempt){ - if ($attempt->attempt){ - return ''; + /** + * Setup the columns and headers and other properties of the table and then + * call flexible_table::setup() method. + */ + function setup($quiz, $cmid, $reporturl){ + $this->quiz = $quiz; + $this->cmid = $cmid; + // Define table columns + $columns = array(); + $headers = array(); + + $columns[]= 'number'; + $headers[]= get_string('questionnumber', 'quiz_statistics'); + + if (!$this->is_downloading()){ + $columns[]= 'icon'; + $headers[]= ''; + $columns[]= 'actions'; + $headers[]= ''; } else { - return ''; + $columns[]= 'qtype'; + $headers[]= get_string('questiontype', 'quiz_statistics'); } - } - - function col_picture($attempt){ - global $COURSE; - return print_user_picture($attempt->userid, $COURSE->id, $attempt->picture, false, true); + $columns[]= 'name'; + $headers[]= get_string('questionname', 'quiz'); + + $columns[]= 'intended_weight'; + $headers[]= get_string('intended_weight', 'quiz_statistics'); + + $this->define_columns($columns); + $this->define_headers($headers); + $this->sortable(false); + + // Set up the table + $this->define_baseurl($reporturl->out()); + + $this->collapsible(true); + +/* $this->column_suppress('picture'); + $this->column_suppress('fullname'); + $this->column_suppress('idnumber'); + + $this->no_sorting('feedbacktext'); + + $this->column_class('picture', 'picture'); + $this->column_class('lastname', 'bold'); + $this->column_class('firstname', 'bold'); + $this->column_class('fullname', 'bold'); + $this->column_class('sumgrades', 'bold');*/ + + $this->column_class('intended_weight', 'numcol'); + + $this->set_attribute('id', 'questionstatistics'); + $this->set_attribute('class', 'generaltable generalbox boxaligncenter'); + + parent::setup(); } - - function col_timestart($attempt){ - if ($attempt->attempt) { - $startdate = userdate($attempt->timestart, $this->strtimeformat); - if (!$this->is_downloading()) { - return ''.$startdate.''; - } else { - return $startdate; - } - } else { - return '-'; - } + + function col_name($question){ + return $question->name; + } - function col_timefinish($attempt){ - if ($attempt->attempt) { - if ($attempt->timefinish) { - $timefinish = userdate($attempt->timefinish, $this->strtimeformat); - if (!$this->is_downloading()) { - return ''.$timefinish.''; - } else { - return $timefinish; - } - } else { - return '-'; - } - } else { - return '-'; - } + + function col_icon($question){ + return print_question_icon($question, true); } - function col_duration($attempt){ - if ($attempt->timefinish) { - return format_time($attempt->duration); - } elseif ($attempt->timestart) { - return get_string('unfinished', 'quiz'); - } else { - return '-'; - } + function col_number($question){ + return $question->number; } - function col_sumgrades($attempt){ - if ($attempt->timefinish) { - $grade = quiz_rescale_grade($attempt->sumgrades, $this->quiz); - if (!$this->is_downloading()) { - $gradehtml = ''.$grade.''; - if ($this->qmsubselect && $attempt->gradedattempt){ - $gradehtml = '
'.$gradehtml.'
'; - } - return $gradehtml; - } else { - return $grade; - } - } else { - return '-'; - } + function col_actions($question){ + return quiz_question_action_icons($this->quiz, $this->cmid, $question, $this->baseurl); } - 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_qtype($question){ + return $question->qtype; } - - 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 '-'; - } - + function col_intended_weight($question){ + return quiz_report_scale_sumgrades_as_percentage($question->grade, $this->quiz); } + + } ?> diff --git a/theme/standard/styles_layout.css b/theme/standard/styles_layout.css index 2e0d86f70a..500ea91afb 100644 --- a/theme/standard/styles_layout.css +++ b/theme/standard/styles_layout.css @@ -3989,7 +3989,7 @@ table.quizreviewsummary td.cell { #mod-quiz-report table#itemanalysis .header { text-align: left; } -#mod-quiz-report table#itemanalysis .numcol { +#mod-quiz-report table .numcol { text-align: center; vertical-align : middle !important; } -- 2.39.5