course, $USER->id)){
error( get_string( 'only_teachers', 'game'));
}
$currenttab = 'answers';
include('tabs.php');
$action = optional_param('action', "", PARAM_ALPHANUM); // action
if( $action == 'delstats')
delete_records('game_repetitions', 'gameid', $game->id, 'userid', $USER->id);
if( $action == 'computestats')
game_compute_repetitions($game);
echo ''.get_string('repetitions', 'game').': ';
echo get_string('user').': ';
game_showusers($game);
echo " wwwroot/mod/game/showanswers.php?q=$q&action=delstats\">".get_string('clearrepetitions','game').'';
echo " wwwroot/mod/game/showanswers.php?q=$q&action=computestats\">".get_string('computerepetitions','game').'';
echo '
';
game_showanswers( $game, false);
print_footer();
function game_compute_repetitions($game){
global $CFG, $USER;
delete_records('game_repetitions', 'gameid', $game->id,'userid',$USER->id);
$sql = "INSERT INTO {$CFG->prefix}game_repetitions( gameid,userid,questionid,glossaryentryid,repetitions) ".
"SELECT $game->id,$USER->id,questionid,glossaryentryid,COUNT(*) ".
"FROM {$CFG->prefix}game_queries WHERE gameid=$game->id AND userid=$USER->id GROUP BY questionid,glossaryentryid";
if( !execute_sql( $sql, false))
error('Problem on computing statistics for repetitions');
}
function game_showusers($game)
{
global $CFG, $USER;
$users = array();
$context = get_context_instance(CONTEXT_COURSE, $game->course);
if ($courseusers = get_course_users( $game->course)) {
foreach ($courseusers as $courseuser) {
$users[$courseuser->id] = fullname($courseuser, has_capability('moodle/site:viewfullnames', $context));
}
}
if ($guest = get_guest()) {
$users[$guest->id] = fullname($guest);
}
$userid = optional_param('userid',$USER->id,PARAM_INT);
?>
gamekind == 'bookquiz' and $existsbook){
showanswers_bookquiz( $game);
return;
}
switch( $game->sourcemodule){
case 'question':
showanswers_question( $game);
break;
case 'glossary':
showanswers_glossary( $game);
break;
case 'quiz':
showanswers_quiz( $game);
break;
}
}
function showanswers_appendselect( $game)
{
switch( $game->gamekind){
case 'hangman':
case 'cross':
case 'crypto':
return " AND qtype='shortanswer'";
case 'millionaire':
return " AND qtype = 'multichoice'";
case 'sudoku':
case 'bookquiz':
case 'snakes':
return " AND qtype in ('shortanswer', 'truefalse', 'multichoice')";
}
return '';
}
function showanswers_question( $game)
{
if( $game->gamekind != 'bookquiz'){
$select = ' category='.$game->questioncategoryid;
if( $game->subcategories){
$cats = question_categorylist( $game->questioncategoryid);
if( strpos( $cats, ',') > 0){
$select = ' category in ('.$cats.')';
}
}
}else
{
$select = '';
$recs = get_records_select( 'question_categories', '', '', '*', 0, 1);
foreach( $recs as $rec){
if( array_key_exists( 'course', $rec)){
$select = "course=$game->course";
}else{
$context = get_context_instance(50, $game->course);
$select = "contextid in ($context->id)";
}
break;
}
$select2 = '';
if( $recs = get_records_select( 'question_categories', $select, 'id,id')){
foreach( $recs as $rec){
$select2 .= ','.$rec->id;
}
}
$select = ' category IN ('.substr( $select2, 1).')';
}
$select .= ' AND hidden = 0 ';
$select .= showanswers_appendselect( $game);
$showcategories = ($game->gamekind == 'bookquiz');
$order = ($showcategories ? 'category,questiontext' : 'questiontext');
showanswers_question_select( $game, 'question q', $select, '*', $order, $showcategories, $game->course);
}
function showanswers_quiz( $game)
{
global $CFG;
$select = "quiz='$game->quizid' ".
" AND qzi.question=q.id".
" AND q.hidden=0".
showanswers_appendselect( $game);
$table = "question q,{$CFG->prefix}quiz_question_instances qzi";
showanswers_question_select( $game, $table, $select, "q.*", 'category,questiontext', false, $game->course);
}
function showanswers_question_select( $game, $table, $select, $fields='*', $order='questiontext', $showcategoryname=false, $courseid=0)
{
global $CFG;
if( ($questions = get_records_select( $table, $select, $order, $fields)) === false){
return;
}
$table .= ",{$CFG->prefix}game_repetitions gr";
$select .= " AND gr.questionid=q.id AND gr.glossaryentryid=0 AND gr.gameid=".$game->id;
$userid = optional_param('userid',0,PARAM_INT);
if( $userid)
$select .= " AND gr.userid=$userid";
$sql = "SELECT q.id as id,SUM(repetitions) as c FROM {$CFG->prefix}$table WHERE $select GROUP BY q.id";
$reps = get_records_sql( $sql);
$categorynames = array();
if( $showcategoryname){
$select = '';
$recs = get_records_select( 'question_categories', '', '', '*', 0, 1);
foreach( $recs as $rec){
if( array_key_exists( 'course', $rec)){
$select = "course=$courseid";
}else{
$context = get_context_instance(50, $courseid);
$select = " contextid in ($context->id)";
}
break;
}
if( ($categories = get_records_select( 'question_categories', $select, '', 'id,name'))){
foreach( $categories as $rec){
$categorynames[ $rec->id] = $rec->name;
}
}
}
echo '
'; if( $showcategoryname){ echo ' | '.get_string( 'categories', 'quiz').' | '; } echo ''.get_string( 'questions', 'quiz').' | '; echo ''.get_string( 'answers', 'quiz').' | '; echo ''.get_string( 'feedbacks', 'game').' | '; if( $reps) echo ''.get_string( 'repetitions', 'game').' | '; echo "|||||
'.(++$line); echo ' | '; if( $showcategoryname){ echo ''; if( array_key_exists( $question->category, $categorynames)){ echo $categorynames[ $question->category]; }else{ echo ' '; } echo ' | '; } echo ''; echo "wwwroot/question/question.php?inpopup=1&id=$question->id&courseid=$courseid\" target=\"_blank\">wwwroot/pix/t/edit.gif\" alt=\"Edit\" /> "; echo $question->questiontext.' | '; switch( $question->qtype){ case 'shortanswer': $recs = get_records_select( 'question_answers', "question=$question->id", 'fraction DESC', 'id,answer,feedback'); if( $recs == false){ $rec = false; }else{ foreach( $recs as $rec) break; } echo "$rec->answer | "; if( $rec->feedback == '') $rec->feedback = ' '; echo "$rec->feedback | "; break; case 'multichoice': case 'truefalse': $recs = get_records_select( 'question_answers', "question=$question->id"); $feedback = ''; echo '';
$i = 0;
foreach( $recs as $rec){
if( $i++ > 0)
echo ' '; if( $rec->fraction == 1){ echo " $rec->answer"; if( $rec->feedback == '') $feedback .= ' '; else $feedback .= "$rec->feedback "; }else { echo " $rec->answer"; if( $rec->feedback == '') $feedback .= ' '; else $feedback .= " "; } } echo ' | ';
if( $feedback == '')
$feedback = ' ';
echo "$feedback | "; break; default: echo "$question->qtype | "; if( $feedback == '') $feedback = ' '; echo "$feedback | "; break; } //Show repetitions if( $reps){ if( array_key_exists( $question->id, $reps)){ $rep = $reps[ $question->id]; echo ''; } echo " |
'; echo ' | '.get_string( 'questions', 'quiz').' | '; echo ''.get_string( 'answers', 'quiz').' | '; if( $reps != false) echo ''.get_string( 'repetitions', 'game').' | '; echo "|
'.(++$line); echo ' | '; echo ''.$question->definition.' | '; echo ''.$question->concept.' | '; if( $reps != false){ if( array_key_exists( $question->id, $reps)) { $rep = $reps[ $question->id]; echo ''; } echo " |