📄 report.php
字号:
case HOTPOT_TEXTOYS_RHUBARB : $type = "Rhubarb"; break; case HOTPOT_TEXTOYS_SEQUITUR : $type = "Sequitur"; break; default: $type = $blank; } } return $type; } function set_head(&$options, &$table, $zone, $exercisetype='', $details=array(), $questioncount=0) { if (empty($table->head)) { $table->head = array(); } switch ($zone) { case 'exercise': array_push($table->head, get_string('reportcoursename', 'hotpot'), get_string('reportsectionnumber', 'hotpot'), get_string('reportexercisenumber', 'hotpot'), get_string('reportexercisename', 'hotpot'), get_string('reportexercisetype', 'hotpot'), get_string('reportnumberofquestions', 'hotpot') ); break; case 'user': array_push($table->head, get_string('reportstudentid', 'hotpot'), get_string('reportlogindate', 'hotpot'), get_string('reportlogintime', 'hotpot'), get_string('reportlogofftime', 'hotpot') ); break; case 'attempt': array_push($table->head, get_string('reportattemptnumber', 'hotpot'), get_string('reportattemptstart', 'hotpot'), get_string('reportattemptfinish', 'hotpot') ); break; case 'click': array_push($table->head, get_string('reportclicknumber', 'hotpot'), get_string('reportclicktime', 'hotpot'), get_string('reportclicktype', 'hotpot') ); break; case 'details': foreach($details as $detail) { if ($exercisetype=='JQuiz' && $detail=='clues') { $detail = 'showanswer'; } $detail = get_string("report$detail", 'hotpot'); for ($i=0; $i<$questioncount; $i++) { $str = get_string('questionshort', 'hotpot', $i+1); if ($i==0 || $options['reportformat']!='htm') { $str = "$detail $str"; } $table->head[] = $str; } } break; case 'totals': $reportpercentscore =get_string('reportpercentscore', 'hotpot'); if (!function_exists('clean_getstring_data')) { // Moodle 1.4 (and less) $reportpercentscore = str_replace('%', '%%', $reportpercentscore); } array_push($table->head, get_string('reportthisclick', 'hotpot', get_string('reportquestionstried', 'hotpot')), get_string('reportsofar', 'hotpot', get_string('reportquestionstried', 'hotpot')), get_string('reportthisclick', 'hotpot', get_string('reportright', 'hotpot')), get_string('reportthisclick', 'hotpot', get_string('reportwrong', 'hotpot')), get_string('reportthisclick', 'hotpot', get_string('reportnottried', 'hotpot')), get_string('reportsofar', 'hotpot', get_string('reportright', 'hotpot')), get_string('reportsofar', 'hotpot', get_string('reportwrong', 'hotpot')), get_string('reportsofar', 'hotpot', get_string('reportnottried', 'hotpot')), get_string('reportthisclick', 'hotpot', get_string('reportanswers', 'hotpot')), get_string('reportthisclick', 'hotpot', get_string('reporthints', 'hotpot')), get_string('reportthisclick', 'hotpot', get_string($exercisetype=='JQuiz' ? 'reportshowanswer' : 'reportclues', 'hotpot')), get_string('reportthisclick', 'hotpot', get_string('reportevents', 'hotpot')), get_string('reportsofar', 'hotpot', get_string('reporthints', 'hotpot')), get_string('reportsofar', 'hotpot', get_string($exercisetype=='JQuiz' ? 'reportshowanswer' : 'reportclues', 'hotpot')), get_string('reportthisclick', 'hotpot', get_string('reportrawscore', 'hotpot')), get_string('reportthisclick', 'hotpot', get_string('reportmaxscore', 'hotpot')), get_string('reportthisclick', 'hotpot', $reportpercentscore), get_string('reportsofar', 'hotpot', get_string('reportrawscore', 'hotpot')), get_string('reportsofar', 'hotpot', get_string('reportmaxscore', 'hotpot')), get_string('reportsofar', 'hotpot', $reportpercentscore), get_string('reporthotpotscore', 'hotpot') ); break; } // end switch } function set_align_and_wrap(&$table) { $count = count($table->head); for ($i=0; $i<$count; $i++) { if ($i==0 || $i==1 || $i==2 || $i==4 || $i==5 || $i>=7) { // numeric (and short text) columns $table->align[] = 'center'; $table->wrap[] = ''; } else { // text columns $table->align[] = 'left'; $table->wrap[] = 'nowrap'; } } } function set_data_exercise(&$cm, &$course, &$hotpot, &$questions, &$questionids, &$questioncount, &$blank) { // get exercise details (course name, section number, activity number, quiztype and question count) $record = get_record("course_sections", "id", $cm->section); $this->data['exercise'] = array( 'course' => $course->shortname, 'section' => empty($record) ? $blank : $record->section+1, 'number' => empty($record) ? $blank : array_search($cm->id, explode(',', $record->sequence))+1, 'name' => $hotpot->name, 'type' => $this->get_exercisetype($questions, $questionids, $blank), 'questioncount' => $questioncount ); } function set_data_user(&$options, &$course, &$user) { global $CFG; // shortcut to first attempt record (which also hold user info) $attempt = &$user->attempts[0]; $idnumber = $attempt->idnumber; if (empty($idnumber)) { $idnumber = fullname($attempt); } if ($options['reportformat']=='htm') { $idnumber = '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$attempt->userid.'&course='.$course->id.'">'.$idnumber.'</a>'; } $this->data['user'] = array( 'idnumber' => $idnumber, ); } function set_data_attempt(&$attempt, &$strftimedate, &$strftimetime, &$blank) { global $CFG; $records = get_records_sql_menu(" SELECT userid, MAX(time) AS logintime FROM {$CFG->prefix}log WHERE userid=$attempt->userid AND action='login' AND time<$attempt->timestart GROUP BY userid "); if (empty($records)) { $logindate = $blank; $logintime = $blank; } else { $logintime = $records[$attempt->userid]; $logindate = trim(userdate($logintime, $strftimedate)); $logintime = trim(userdate($logintime, $strftimetime)); } $records = get_records_sql_menu(" SELECT userid, MIN(time) AS logouttime FROM {$CFG->prefix}log WHERE userid=$attempt->userid AND action='logout' AND time>$attempt->cr_timefinish GROUP BY userid "); if (empty($records)) { $logouttime = $blank; } else { $logouttime = $records[$attempt->userid]; $logouttime = trim(userdate($logouttime, $strftimetime)); } $this->data['attempt'] = array( 'logindate' => $logindate, 'logintime' => $logintime, 'logouttime' => $logouttime, 'number' => $attempt->attempt, 'start' => trim(userdate($attempt->timestart, $strftimetime)), 'finish' => trim(userdate($attempt->cr_timefinish, $strftimetime)), ); } function set_data_click($number, $time, $exercisetype, $click) { $types = array(); foreach (array_keys($click['types']) as $type) { if ($exercisetype=='JQuiz' && $type=='clues') { $type = 'showanswer'; } else { // remove final 's' $type = substr($type, 0, strlen($type)-1); } // $types[] = get_string($type, 'hotpot'); $types[] = $type; } $this->data['click'] = array( 'number' => $number, 'time' => $time, 'type' => empty($types) ? '??' : implode(',', $types) ); } function set_data_totals(&$click, &$clicks, &$questioncount, &$blank, &$attempt) { $count= array( 'click' => array( 'correct' => count($click['correct']), 'wrong' => count($click['wrong']), 'answers' => count($click['answers']), 'hints' => array_sum($click['hints']), 'clues' => array_sum($click['clues']), 'events' => array_sum($click['events']), 'score' => array_sum($click['score']), 'maxscore' => array_sum($click['weighting']), ), 'clicks' => array( 'correct' => count($clicks['correct']), 'wrong' => count($clicks['wrong']), 'answers' => count($clicks['answers']), 'hints' => array_sum($clicks['hints']), 'clues' => array_sum($clicks['clues']), 'score' => array_sum($clicks['score']), 'maxscore' => array_sum($clicks['weighting']), ) ); foreach ($count as $period=>$values) { $count[$period]['nottried'] = $questioncount - ($values['correct'] + $values['wrong']); $count[$period]['percent'] = empty($values['maxscore']) ? $blank : round(100 * $values['score'] / $values['maxscore'], 0); // blank out zero click values if ($period=='click') { foreach ($values as $detail=>$value) { if ($detail=='answers' || $detail=='hints' || $detail=='clues' || $detail=='events') { if (empty($value)) { $count[$period][$detail] = $blank; } } } } } $this->data['totals'] = array( $count['click']['answers'], // "q's tried" $count['clicks']['answers'], // "q's tried so far" $count['click']['correct'], // "right" $count['click']['wrong'], // "wrong" $count['click']['nottried'], // "not tried" $count['clicks']['correct'], // "right so far" $count['clicks']['wrong'], // "wrong so far" $count['clicks']['nottried'], // "not tried so far" $count['click']['answers'], // "answers", $count['click']['hints'], // "hints", $count['click']['clues'], // "clues", $count['click']['events'], // "answers", $count['clicks']['hints'], // "hints so far", $count['clicks']['clues'], // "clues so far", $count['click']['score'], // 'raw score', $count['click']['maxscore'], // 'max score', $count['click']['percent'], // '% score' $count['clicks']['score'], // 'raw score, $count['clicks']['maxscore'], // 'max score, $count['clicks']['percent'], // '% score $attempt->score // 'hotpot score' ); } function update_event_count(&$click, $detail, $q) { if ($detail=='checks' || $detail=='hints' || $detail=='clues') { $click['types'][$detail] = true; } if ($detail=='answers' || $detail=='hints' || $detail=='clues') { $click['events'][$q] = isset($click['events'][$q]) ? $click['events'][$q]+1 : 1; } if ($detail=='answers') { $click['changes'][$q] = isset($click['changes'][$q]) ? $click['changes'][$q]+1 : 1; } } function set_data(&$cells, $zone) { foreach ($this->data[$zone] as $name=>$value) { $cells[] = $value; } }} // end class?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -