⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 report.php

📁 很棒的在线教学系统
💻 PHP
字号:
<?php  // $Id: report.php,v 1.6.8.2 2008/03/06 07:34:05 gbateson Exp $/// Overview report: displays a big table of all the attemptsclass hotpot_report extends hotpot_default_report {	function display(&$hotpot, &$cm, &$course, &$users, &$attempts, &$questions, &$options) {		global $CFG;		// create the table		$tables = array();		$this->create_scores_table($hotpot, $course, $users, $attempts, $questions, $options, $tables);		$this->print_report($course, $hotpot, $tables, $options);		return true;	}	function create_scores_table(&$hotpot, &$course, &$users, &$attempts, &$questions, &$options, &$tables) {		global $CFG;		$download = ($options['reportformat']=='htm') ? false : true;		$is_html = ($options['reportformat']=='htm');		$blank = ($download ? '' : '&nbsp;');		$no_value = ($download ? '' : '-');		$allow_review = true;		// start the table		unset($table);		$table->border = 1;		$table->head = array();		$table->align = array();		$table->size = array();		// picture column, if required		if ($is_html) {			$table->head[] = '&nbsp;';			$table->align[] = 'center';			$table->size[] = 10;		}		// name, grade and attempt number		array_push($table->head,			get_string("name"),			hotpot_grade_heading($hotpot, $options),			get_string("attempt", "quiz")		);		array_push($table->align, "left", "center", "center");		array_push($table->size, '', '', '');		// question headings		$this->add_question_headings($questions, $table);		// penalties and raw score		array_push($table->head,			get_string('penalties', 'hotpot'),			get_string('score', 'quiz')		);		array_push($table->align, "center", "center");		array_push($table->size, '', '');		$table->data = array();		$q = array(			'grade'     => array('count'=>0, 'total'=>0),			'penalties' => array('count'=>0, 'total'=>0),			'score'     => array('count'=>0, 'total'=>0),		);		foreach ($users as $user) {			// shortcut to user info held in first attempt record			$u = &$user->attempts[0];			$picture = '';			$name = fullname($u);			if ($is_html) {				$picture = print_user_picture($u->userid, $course->id, $u->picture, false, true);				$name = '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$u->userid.'&amp;course='.$course->id.'">'.$name.'</a>';			}			if (isset($user->grade)) {				$grade = $user->grade;				$q['grade']['count'] ++;				if (is_numeric($grade)) {					$q['grade']['total'] += $grade;				}			} else {				$grade = $no_value;			}			$attemptcount = count($user->attempts);			if ($attemptcount>1) {				$text = $name;				$name = NULL;				$name->text = $text;				$name->rowspan = $attemptcount;				$text = $grade;				$grade = NULL;				$grade->text = $text;				$grade->rowspan = $attemptcount;			}			$data = array();			if ($is_html) {				if ($attemptcount>1) {					$text = $picture;					$picture = NULL;					$picture->text = $text;					$picture->rowspan = $attemptcount;				}				$data[] = $picture;			}			array_push($data, $name, $grade);			foreach ($user->attempts as $attempt) {				// set flag if this is best grade				$is_best_grade = ($is_html && $attempt->score==$user->grade);				// get attempt number				$attemptnumber= $attempt->attempt;				if ($is_html && $allow_review) {					$attemptnumber = '<a href="review.php?hp='.$hotpot->id.'&amp;attempt='.$attempt->id.'">'.$attemptnumber.'</a>';				}				if ($is_best_grade) {					$score = '<span class="highlight">'.$attemptnumber.'</span>';				}				$data[] = $attemptnumber;				// get responses to questions in this attempt by this user				foreach ($questions as $id=>$question) {					if (!isset($q[$id])) {						$q[$id] = array('count'=>0, 'total'=>0);					}					if (isset($attempt->responses[$id])) {						$score = $attempt->responses[$id]->score;						if (is_numeric($score)) {							$q[$id]['count'] ++;							$q[$id]['total'] += $score;							if ($is_best_grade) {								$score = '<span class="highlight">'.$score.'</span>';							}						} else if (empty($score)) {							$score = $no_value;						}					} else {						$score = $no_value;					}					$data[] = $score;				} // foreach $questions				if (isset($attempt->penalties)) {					$penalties = $attempt->penalties;					if (is_numeric($penalties)) {						$q['penalties']['count'] ++;						$q['penalties']['total'] += $penalties;					}					if ($is_best_grade) {						$penalties = '<span class="highlight">'.$penalties.'</span>';					}				} else {					$penalties = $no_value;				}				$data[] = $penalties;				if (isset($attempt->score)) {					$score = $attempt->score;					if (is_numeric($score)) {						$q['score']['total'] += $score;						$q['score']['count'] ++;					}					if ($is_best_grade) {						$score = '<span class="highlight">'.$score.'</span>';					}				} else {					$score = $no_value;				}				$data[] = $score;				// append data for this attempt				$table->data[] = $data;				// reset data array for next attempt, if any				$data = array();			} // end foreach $attempt			$table->data[] = 'hr';		} // end foreach $user		// remove final 'hr' from data rows		array_pop($table->data);		// add averages to foot of table		$averages = array();		if ($is_html) {			$averages[] = $blank;		}		array_push($averages, get_string('average', 'hotpot'));		$col = count($averages);		if (empty($q['grade']['count'])) {			// remove score $col from $table			$this->remove_column($table, $col);		} else {			$precision = ($hotpot->grademethod==HOTPOT_GRADEMETHOD_AVERAGE || $hotpot->grade<100) ? 1 : 0;			$averages[] = round($q['grade']['total'] / $q['grade']['count'], $precision);			$col++;		}		// skip the attempt number column		$averages[$col++] = $blank;		foreach ($questions as $id=>$question) {			if (empty($q[$id]['count'])) {				// remove this question $col from $table				$this->remove_column($table, $col);			} else {				$averages[$col++] = round($q[$id]['total'] / $q[$id]['count']);			}		}		if (empty($q['penalties']['count'])) {			// remove penalties $col from $table			$this->remove_column($table, $col);		} else {			$averages[$col++] = round($q['penalties']['total'] / $q['penalties']['count']);		}		if (empty($q['score']['count'])) {			// remove score $col from $table			$this->remove_column($table, $col);		} else {			$averages[$col++] = round($q['score']['total'] / $q['score']['count']);		}		$table->foot = array($averages);		$tables[] = &$table;	}} // end class?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -