📄 report.php
字号:
} } } // end foreach $field // initialize counters for this question, if necessary if (!isset($q[$id]['count'])) { $q[$id]['count'] = array('hi'=>0, 'lo'=>0, 'correct'=>0, 'total'=>0, 'sum'=>0); } // increment counters $q[$id]['count']['sum'] += $response->score; $q[$id]['count']['total']++; if ($response->score==100) { $q[$id]['count']['correct']++; if ($is_hi_score) { $q[$id]['count']['hi']++; } else if ($is_lo_score) { $q[$id]['count']['lo']++; } } } // end foreach attempt } // end foreach question // check we have some details if (count($q)) { $showhideid = 'showhide'; // shortcuts for html tags $bold_start = $is_html ? '<strong>' : ""; $bold_end = $is_html ? '</strong>' : ""; $div_start = $is_html ? '<div id="'.$showhideid.'">' : ""; $div_end = $is_html ? '</div>' : ""; $font_red = $is_html ? '<font color="red" size="-2">' : ''; $font_blue = $is_html ? '<font color="blue" size="-2">' : ''; $font_green = $is_html ? '<font color="green" size="-2">' : ''; $font_brown = $is_html ? '<font color="brown" size="-2">' : ''; $font_end = $is_html ? '</font>'."\n" : ''; $br = $is_html ? '<br />' : "\n"; $space = $is_html ? ' ' : ""; $no_value = $is_html ? '--' : ""; $help_button = $is_html ? helpbutton("discrimination", get_string('discrimination', 'quiz'), "quiz", true, false, "", true) : ""; // table properties unset($table); $table->border = 1; $table->width = '100%'; $table->caption = get_string('itemanal', 'quiz'); if ($is_html) { $table->caption .= helpbutton('analysistable', $table->caption, 'hotpot', true, false, '', true); } // initialize legend, if necessary if (!empty($options['reportshowlegend'])) { if (empty($tables) || empty($tables[0]->legend)) { $table->legend = array(); } else { $table->legend = $tables[0]->legend; unset($tables[0]->legend); } } // headings for name, attempt number and score/grade $table->head = array($space); $table->align = array('right'); $table->size = array(80); // question headings $this->add_question_headings($questions, $table, 'left', 0); // initialize statistics $table->stat = array(); $table->statheadercols = array(0); // add headings for the $foot of the $table $table->foot = array(); $table->foot[0] = array(get_string('average', 'hotpot')); $table->foot[1] = array(get_string('percentcorrect', 'quiz')); $table->foot[2] = array(get_string('discrimination', 'quiz').$help_button); // maximum discrimination index (also default the default value) $max_d_index = 10; //////////////////////////////////////////// // format the statistics into the $table //////////////////////////////////////////// // add $stat(istics) and $foot of $table $questionids = array_keys($q); foreach ($questionids as $col => $id) { $row = 0; // print the question text if there is no legend if (empty($table->legend)) { // add button to show/hide question text if (!isset($table->stat[0])) { $button = $is_html ? hotpot_showhide_button($showhideid) : ""; $table->stat[0] = array(get_string('question', 'quiz').$button); } // add the question name/text $name = hotpot_get_question_name($questions[$id]); $table->stat[$row++][$col+1] = $div_start.$bold_start.$name.$bold_end.$div_end.$space; } // add details about each field foreach ($fields as $field) { // check this row is required if ($f[$field]['count']) { $values = array(); $string_type = array_search($field, $string_fields); // get the value of each response to this field // and the count of that value foreach ($q[$id][$field] as $value => $count) { if (is_numeric($value) && $count) { if (is_numeric($string_type)) { $value = hotpot_string($value); $this->set_legend($table, $col, $value, $questions[$id]); switch ($string_type) { case 0: // correct $font_start = $font_red; break; case 1: // wrong $font_start = $font_blue; break; case 2: // ignored $font_start = $font_brown; break; } } else { // numeric field $font_start = $font_green; } $values[] = $font_start.round(100*$count/$q[$id]['count']['total']).'%'.$font_end.' '.$value; } } // end foreach $value => $count // initialize stat(istics) row for this field, if required if (!isset($table->stat[$row])) { $table->stat[$row] = array(get_string($field, 'hotpot')); } // sort the values by frequency (using user-defined function) usort($values, "hotpot_sort_stat_values"); // add stat(istics) values for this field $table->stat[$row++][$col+1] = count($values) ? implode($br, $values) : $space; } } // end foreach field // default percent correct and discrimination index for this question $average = $no_value; $percent = $no_value; $d_index = $no_value; if (isset($q[$id]['count'])) { // average and percent correct if ($q[$id]['count']['total']) { $average = round($q[$id]['count']['sum'] / $q[$id]['count']['total']).'%'; $percent = round(100*$q[$id]['count']['correct'] / $q[$id]['count']['total']).'%'; $percent .= ' ('.$q[$id]['count']['correct'].'/'.$q[$id]['count']['total'].')'; } // discrimination index if ($q[$id]['count']['lo']) { $d_index = min($max_d_index, round($q[$id]['count']['hi'] / $q[$id]['count']['lo'], 1)); } else { $d_index = $q[$id]['count']['hi'] ? $max_d_index : 0; } $d_index .= ' ('.$q[$id]['count']['hi'].'/'.$q[$id]['count']['lo'].')'; } $table->foot[0][$col+1] = $average; $table->foot[1][$col+1] = $percent; $table->foot[2][$col+1] = $d_index; } // end foreach $question ($col) // add javascript to show/hide question text if (isset($table->stat[0]) && $is_html && empty($table->legend)) { $i = count($table->stat[0]); $table->stat[0][$i-1] .= hotpot_showhide_set($showhideid); } $tables[] = &$table; $this->create_legend_table($tables, $table); } // end if (empty($q) } // end function} // end classfunction hotpot_sort_stat_values($a, $b) { // sorts in descending order // assumes first chars in $a and $b are a percentage $a_val = intval(strip_tags($a)); $b_val = intval(strip_tags($b)); return ($a_val<$b_val) ? 1 : ($a_val==$b_val ? 0 : -1);}function hotpot_showhide_button($id) { $show = get_string('show'); $hide = get_string('hide'); $pref = '1'; $text = ($pref=='1' ? $hide : $show);return <<<SHOWHIDE_BUTTON<script type="text/javascript">//<![CDATA[ function showhide (id, toggle) { var show = true; obj = document.getElementById(id+'pref'); if (obj) { show = (obj.value=='1'); if (toggle) { show = !show; obj.value = (show ? '1' : '0'); } } obj = document.getElementById(id+'button'); if (obj) { obj.value = (show ? '$hide' : '$show'); } obj = document.getElementsByName(id); var i_max = obj.length; for (var i=0; i<i_max; i++) { obj[i].style.display = (show ? 'block' : 'none'); } } var showhide_allowed = (document.getElementById && document.getElementsByName); if (showhide_allowed) { var html = ''; html += '<form onsubmit="return false">'; html += '<input type="button" value="$text" id="{$id}button" onClick="javascript: return showhide(\\'$id\\', true);" />'; html += '<input type="hidden" name="{$id}pref" id="{$id}pref" value="$pref" />'; html += '</form>'; document.writeln(html); }//]]></script>SHOWHIDE_BUTTON;}function hotpot_showhide_set($id) {return <<<SHOWHIDE_SET<script type="text/javascript">//<![CDATA[ if (showhide_allowed) { showhide('$id'); }//]]></script>SHOWHIDE_SET;}?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -