📄 default.php
字号:
<?PHP // $Id: default.php,v 1.13.4.2 2008/03/06 07:34:04 gbateson Exp $/////////////////////////////////////////////////////////////////////// Default class for report plugins////// Doesn't do anything on it's own -- it needs to be extended./// This class displays quiz reports. Because it is called from/// within /mod/quiz/report.php you can assume that the page header/// and footer are taken care of.////// This file can refer to itself as report.php to pass variables/// to itself - all these will also be globally available. You must/// pass "id=$cm->id" or q=$quiz->id", and "mode=reportname".////////////////////////////////////////////////////////////////////// Included by ../report.phpclass hotpot_default_report { function display($hotpot, $cm, $course, $users, $attempts, $questions, $options) { /// This function just displays the report // it is replaced by the "display" functions in the scripts in the "report" folder return true; } function add_question_headings(&$questions, &$table, $align='center', $size=50, $wrap=false, $fontsize=0) { $count = count($questions); for ($i=0; $i<$count; $i++) { $table->head[] = get_string('questionshort', 'hotpot', $i+1); if (isset($table->align)) { $table->align[] = $align; } if (isset($table->size)) { $table->size[] = $size; } if (isset($table->wrap)) { $table->wrap[] = $wrap; } if (isset($table->fontsize)) { $table->fontsize[] = $fontsize; } } } function set_legend(&$table, &$q, &$value, &$question) { // $q is the question number // $value is the value (=text) of the answer // check the legend is required if (isset($table->legend) && isset($value)) { // create question details array, if necessary if (empty($table->legend[$q])) { $table->legend[$q] = array( 'name' => hotpot_get_question_name($question), 'answers' => array() ); } // search for this $value in answers array for this $q(uestion) $i_max = count($table->legend[$q]['answers']); for ($i=0; $i<$i_max; $i++) { if ($table->legend[$q]['answers'][$i]==$value) { break; } } // add $value to answers array, if it was not there if ($i==$i_max) { $table->legend[$q]['answers'][$i] = $value; } // convert $value to alphabetic index (A, B ... AA, AB ...) $value = $this->dec_to_ALPHA($i); } } function create_legend_table(&$tables, &$table) { if (isset($table->legend)) { $legend->width = '*'; $legend->tablealign = '*'; $legend->border = isset($table->border) ? $table->border : NULL; $legend->cellpadding = isset($table->cellpadding) ? $table->cellpadding : NULL; $legend->cellspacing = isset($table->cellspacing) ? $table->cellspacing : NULL; $legend->tableclass = isset($table->tableclass) ? $table->tableclass : NULL; $legend->caption = get_string('reportlegend', 'hotpot'); $legend->align = array('right', 'left'); $legend->statheadercols = array(0); $legend->stat = array(); // put the questions in order ksort($table->legend); foreach($table->legend as $q=>$question) { $legend->stat[] = array( get_string('questionshort', 'hotpot', $q+1), $question['name'] ); foreach($question['answers'] as $a=>$answer) { $legend->stat[] = array( $this->dec_to_ALPHA($a), $answer ); } } unset($table->legend); $tables[] = $legend; } } function dec_to_ALPHA($dec) { if ($dec < 26) { return chr(ord('A') + $dec); } else { return $this->dec_to_ALPHA(intval($dec/26)-1).$this->dec_to_ALPHA($dec % 26); } } function remove_column(&$table, $target_col) { if (is_array($table)) { unset($table[$target_col]); $table = array_values($table); } else if (is_object($table)) { $vars = get_object_vars($table); foreach ($vars as $name=>$value) { switch ($name) { case 'data' : case 'stat' : case 'foot' : $skipcol = array(); $cells = &$table->$name; $row_max = count($cells); for ($row=0; $row<$row_max; $row++) { $col = 0; $col_max = count($cells[$row]); $current_col = 0; while ($current_col<$target_col && $col<$col_max) { if (empty($skipcol[$current_col])) { $cell = $cells[$row][$col++]; if (is_object($cell)) { if (isset($cell->rowspan) && is_numeric($cell->rowspan) && ($cell->rowspan>0)) { // skip cells below this one $skipcol[$current_col] = $cell->rowspan-1; } if (isset($cell->colspan) && is_numeric($cell->colspan) && ($cell->colspan>0)) { // skip cells to the right of this one for ($c=1; $c<$cell->colspan; $c++) { if (empty($skipcol[$current_col+$c])) { $skipcol[$current_col+$c] = 1; } else { $skipcol[$current_col+$c] ++; } } } } } else { $skipcol[$current_col]--; } $current_col++; } if ($current_col==$target_col && $col<$col_max) { $this->remove_column($cells[$row], $col); } } // end for $row break; case 'head' : case 'align' : case 'class' : case 'fontsize' : case 'size' : case 'wrap' : $this->remove_column($table->$name, $target_col); break; case 'statheadercols' : $array = &$table->$name; $count = count($array); for ($i=0; $i<$count; $i++) { if ($array[$i]>=$target_col) { $array[$i] --; } } break; } // end switch } // end foreach } // end if } // end function function expand_spans(&$table, $zone) { // expand multi-column and multi-row cells in a specified $zone of a $table // do nothing if this $zone is empty if (empty($table->$zone)) return; // shortcut to rows in this $table $zone $rows = &$table->{$zone}; // loop through the rows foreach ($rows as $row=>$cells) { // check this is an array if (is_array($cells)) { // loop through the cells in this row foreach ($cells as $col=>$cell) { if (is_object($cell)) { if (isset($cell->rowspan) && is_numeric($cell->rowspan) && ($cell->rowspan>1)) { // fill in cells below this one $new_cell = array($cell->text); for ($r=1; $r<$cell->rowspan; $r++) { array_splice($rows[$row+$r], $col, 0, $new_cell); } } if (isset($cell->colspan) && is_numeric($cell->colspan) && ($cell->colspan>1)) { // fill in cells to the right of this one $new_cells = array(); for ($c=1; $c<$cell->colspan; $c++) { $new_cells[] = $cell->text; } array_splice($rows[$row], $col, 0, $new_cells); } // replace $cell object with plain text $rows[$row][$col] = $cell->text; } } } } }//////////////////////////////////////////////////// print a report in html, text or Excel format/////////////////////////////////////////////////// the stuff to print is contained in $table// which has the following properties:// $table->border border width for the table// $table->cellpadding padding on each cell// $table->cellspacing spacing between cells// $table->tableclass class for table// $table->width table width// $table->align is an array of column alignments// $table->class is an array of column classes// $table->size is an array of column sizes// $table->wrap is an array of column wrap/nowrap switches// $table->fontsize is an array of fontsizes// $table->caption is a caption (=title) for the report// $table->head is an array of headings (all TH cells)// $table->data[] is an array of arrays containing the data (all TD cells)// if a row is given as "hr", a "tabledivider" is inserted// if a cell is a string, it is assumed to be the cell content// a cell can also be an object, thus:// $cell->text : the content of the cell// $cell->rowspan : the row span of this cell// $cell->colspan : the column span of this cell// if rowspan or colspan are specified, neighboring cells are shifted accordingly// $table->stat[] is an array of arrays containing the statistics rows (TD and TH cells)// $table->foot[] is an array of arrays containing the footer rows (all TH cells)// $table->statheadercols is an array of column numbers which are headers///////////////////////////////////////////// print a report function print_report(&$course, &$hotpot, &$tables, &$options) { switch ($options['reportformat']) { case 'txt': $this->print_text_report($course, $hotpot, $tables, $options); break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -