2 changed files with 0 additions and 411 deletions
			
			
		| @ -1,80 +0,0 @@ | |||
| <?php | |||
| // This file is part of Moodle - http://moodle.org/ | |||
| // | |||
| // Moodle is free software: you can redistribute it and/or modify | |||
| // it under the terms of the GNU General Public License as published by | |||
| // the Free Software Foundation, either version 3 of the License, or | |||
| // (at your option) any later version. | |||
| // | |||
| // Moodle is distributed in the hope that it will be useful, | |||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| // GNU General Public License for more details. | |||
| // | |||
| // You should have received a copy of the GNU General Public License | |||
| // along with Moodle.  If not, see <http://www.gnu.org/licenses/>. | |||
| 
 | |||
| // This script uses installed report plugins to print game reports. | |||
| 
 | |||
| require_once("../../config.php"); | |||
| require_once($CFG->dirroot.'/mod/game/locallib.php'); | |||
| 
 | |||
| //require_login($course->id, false); | |||
| 
 | |||
| require_once($CFG->dirroot.'/mod/game/headergame.php'); | |||
| //require_once($CFG->dirroot.'/mod/game/report/reportlib.php'); | |||
| /* | |||
| $id = optional_param('id', 0, PARAM_INT);    // Course Module ID. | |||
| $q = optional_param('q', 0, PARAM_INT);     // Game ID. | |||
| 
 | |||
| 
 | |||
| if ($id) { | |||
|     if (! $cm = get_coursemodule_from_id('game', $id)) { | |||
|         print_error( "There is no coursemodule with id $id"); | |||
|     } | |||
| 
 | |||
|     if (! $course = $DB->get_record('course', array( 'id' => $cm->course))) { | |||
|         print_error( 'Course is misconfigured'); | |||
|     } | |||
| 
 | |||
|     if (! $game = $DB->get_record( 'game', array( 'id' => $cm->instance))) { | |||
|         print_error( "The game with id $cm->instance corresponding to this coursemodule $id is missing"); | |||
|     } | |||
| } else { | |||
|     if (! $game = $DB->get_record( 'game', array( 'id' => $q))) { | |||
|         print_error( "There is no game with id $q"); | |||
|     } | |||
|     if (! $course = $DB->get_record( 'course', array( 'id' => $game->course))) { | |||
|         print_error( "The course with id $game->course that the game with id $a belongs to is missing"); | |||
|     } | |||
|     if (! $cm = get_coursemodule_from_instance( 'game', $game->id, $course->id)) { | |||
|         print_error( "The course module for the game with id $q is missing"); | |||
|     } | |||
| } | |||
| */ | |||
| 
 | |||
| $context = game_get_context_module_instance( $cm->id); | |||
| require_capability('mod/game:viewreports', $context); | |||
| 
 | |||
| //add_to_log($course->id, "game", "report", "report.php?id=$cm->id", "$game->id", "$cm->id"); | |||
| 
 | |||
| // Open the selected game report and display it. | |||
| $mode = optional_param('mode', 'overview', PARAM_ALPHA);        // Report mode. | |||
| 
 | |||
| $mode = clean_param( $mode, PARAM_SAFEDIR); | |||
| 
 | |||
| if (! is_readable("report/$mode/report.php")) { | |||
|     print_error("Report not known ($mode)"); | |||
| } | |||
| 
 | |||
| require("report/default.php");  // Parent class. | |||
| require("report/$mode/report.php"); | |||
| 
 | |||
| $report = new game_overview_report(); | |||
| 
 | |||
| if (! $report->display( $game, $cm, $course)) {             // Run the report! | |||
|     print_error( 'Error occurred during pre-processing!'); | |||
| } | |||
| 
 | |||
| // Print footer. | |||
| echo $OUTPUT->footer($course); | |||
| @ -1,331 +0,0 @@ | |||
| <?php | |||
| // This file is part of Moodle - http://moodle.org/ | |||
| // | |||
| // Moodle is free software: you can redistribute it and/or modify | |||
| // it under the terms of the GNU General Public License as published by | |||
| // the Free Software Foundation, either version 3 of the License, or | |||
| // (at your option) any later version. | |||
| // | |||
| // Moodle is distributed in the hope that it will be useful, | |||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| // GNU General Public License for more details. | |||
| // | |||
| // You should have received a copy of the GNU General Public License | |||
| // along with Moodle.  If not, see <http://www.gnu.org/licenses/>. | |||
| 
 | |||
| // This page prints a review of a particular game attempt. | |||
| 
 | |||
| require_once("../../config.php"); | |||
| require_once("locallib.php"); | |||
| require_once("../../lib/questionlib.php"); | |||
| 
 | |||
| $attempt = required_param('attempt', PARAM_INT);    // A particular attempt ID for review. | |||
| $page = optional_param('page', 0, PARAM_INT); // The required page. | |||
| $showall = optional_param('showall', 0, PARAM_BOOL); | |||
| 
 | |||
| if (! $attempt = $DB->get_record('game_attempts', array( 'id' => $attempt))) { | |||
|     print_error("No such attempt ID exists"); | |||
| } | |||
| if (! $game = $DB->get_record('game', array( 'id' => $attempt->gameid))) { | |||
|     print_error("The game with id $attempt->gameid belonging to attempt $attempt is missing"); | |||
| } | |||
| 
 | |||
| game_compute_attempt_layout( $game, $attempt); | |||
| 
 | |||
| if (! $course = $DB->get_record('course', array( 'id' => $game->course))) { | |||
|     print_error("The course with id $game->course that the game with id $game->id belongs to is missing"); | |||
| } | |||
| if (! $cm = get_coursemodule_from_instance("game", $game->id, $course->id)) { | |||
|     print_error("The course module for the game with id $game->id is missing"); | |||
| } | |||
| 
 | |||
| $grade = game_score_to_grade( $attempt->score, $game); | |||
| $feedback = game_feedback_for_grade( $grade, $attempt->gameid); | |||
| 
 | |||
| require_login( $course->id, false, $cm); | |||
| $context = game_get_context_module_instance( $cm->id); | |||
| $coursecontext = game_get_context_course_instance( $cm->course); | |||
| 
 | |||
| $isteacher = has_capability('mod/game:manage', $context); | |||
| 
 | |||
| $options = game_get_reviewoptions( $game, $attempt, $context); | |||
| $popup = $isteacher ? 0 : $game->popup; // Controls whether this is shown in a javascript-protected window. | |||
| 
 | |||
| //add_to_log($course->id, "game", "review", "review.php?id=$cm->id&attempt=$attempt->id", "$game->id", "$cm->id"); | |||
| 
 | |||
| // Print the page header. | |||
| 
 | |||
| $strgames = get_string('modulenameplural', 'game'); | |||
| $strreview  = get_string('review', 'game'); | |||
| $strscore  = get_string('score', "game"); | |||
| $strgrade  = get_string('grade'); | |||
| $strbestgrade  = get_string('bestgrade', 'quiz'); | |||
| $strtimetaken     = get_string('timetaken', 'game'); | |||
| $strtimecompleted = get_string('completedon', 'game'); | |||
| 
 | |||
| $strupdatemodule = has_capability('moodle/course:manageactivities', | |||
|     $coursecontext) ? update_module_button($cm->id, $course->id, get_string('modulename', 'game')) : ''; | |||
| 
 | |||
| $strgames = get_string("modulenameplural", "game"); | |||
| $strgame  = get_string("modulename", "game"); | |||
| 
 | |||
| require( "headergame.php"); | |||
| /* | |||
| if (function_exists( 'build_navigation')) { | |||
|     $navigation = build_navigation('', $cm); | |||
|     echo $OUTPUT->heading("$course->shortname: $game->name", "$course->shortname: $game->name", $navigation, | |||
|     "", "", true, update_module_button($cm->id, $course->id, $strgame), | |||
|     navmenu($course, $cm)); | |||
| } else { | |||
|     if ($course->category) { | |||
|         $navigation = "<a href=\"{$CFG->wwwroot}/course/view.php?id=$course->id\">$course->shortname</a> ->"; | |||
|     } else { | |||
|         $navigation = ''; | |||
|     } | |||
| 
 | |||
|     echo $OUTPUT->heading("$course->shortname: $game->name", "$course->fullname", | |||
|         "$navigation <a href=index.php?id=$course->id>$strgames</a> -> $game->name", | |||
|         "", "", true, update_module_button($cm->id, $course->id, $strgame), | |||
|         navmenu($course, $cm)); | |||
| } | |||
| */ | |||
| echo '<div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>'; // For overlib. | |||
| 
 | |||
| // Print heading and tabs if this is part of a preview. | |||
| if ($attempt->userid == $USER->id) { | |||
|     // This is the report on a preview. | |||
|     $currenttab = 'preview'; | |||
| } else { | |||
|     $currenttab = 'reports'; | |||
|     $mode = ''; | |||
| } | |||
| 
 | |||
| require('tabs.php'); | |||
| 
 | |||
| // Load all the questions and states needed by this script. | |||
| // Load the questions needed by page. | |||
| $pagelist = $showall ? game_questions_in_game( $attempt->layout) : game_questions_on_page( $attempt->layout, $page); | |||
| $a = explode( ',', $pagelist); | |||
| $pagelist = ''; | |||
| foreach ($a as $item) { | |||
|     if (substr( $item, 0, 1)) { | |||
|         if (substr( $item, -1) != 'G') { | |||
|             $pagelist .= ','.$item; | |||
|         } | |||
|     } | |||
| } | |||
| 
 | |||
| $pagelist = substr( $pagelist, 1); | |||
| 
 | |||
| if ($pagelist != '') { | |||
|     $sql = "SELECT q.*, i.id AS instance,i.id as iid,". | |||
|         "i.score AS score,i.studentanswer". | |||
|         "  FROM {question} q,". | |||
|         "       {game_queries} i". | |||
|         " WHERE i.attemptid = '$attempt->id' AND q.id = i.questionid AND (i.sourcemodule='question' or i.sourcemodule = 'quiz')". | |||
|         "   AND q.id IN ($pagelist)"; | |||
| 
 | |||
|     if (!$questions = $DB->get_records_sql( $sql)) { | |||
|         print_error('No questions found'); | |||
|     } | |||
| } else { | |||
|     $questions = array(); | |||
| } | |||
| 
 | |||
| // Load the question type specific information. | |||
| if (!get_question_options( $questions)) { | |||
|     print_error('Could not load question options'); | |||
| } | |||
| 
 | |||
| $states = game_compute_states( $game, $questions); | |||
| // Print infobox. | |||
| 
 | |||
| $timelimit = 0; | |||
| $overtime = 0; | |||
| 
 | |||
| if ($attempt->timefinish) { | |||
|     if ($timetaken = ($attempt->timefinish - $attempt->timestart)) { | |||
|         if ($timelimit && $timetaken > ($timelimit + 60)) { | |||
|             $overtime = $timetaken - $timelimit; | |||
|             $overtime = format_time($overtime); | |||
|         } | |||
|         $timetaken = format_time($timetaken); | |||
|     } else { | |||
|         $timetaken = "-"; | |||
|     } | |||
| } else { | |||
|     $timetaken = get_string('unfinished', 'game'); | |||
| } | |||
| 
 | |||
| $table->align  = array("right", "left"); | |||
| if ($attempt->userid <> $USER->id) { | |||
|     $student = $DB->get_record('user', array( 'id' => $attempt->userid)); | |||
|     $picture = print_user_picture($student->id, $course->id, $student->picture, false, true); | |||
|     $table->data[] = array($picture, | |||
|         '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$student->id.'&course='. | |||
|         $course->id.'">'.fullname($student, true).'</a>'); | |||
| } | |||
| 
 | |||
| if (count($attempts = $DB->get_records('game_attempts', array( 'gameid' => $game->id, | |||
|     'userid' => $attempt->userid), 'attempt ASC')) > 1) { | |||
|     // Print list of attempts. | |||
|     $attemptlist = ''; | |||
|     foreach ($attempts as $at) { | |||
|         $attemptlist .= ($at->id == $attempt->id) ? '<strong>'.$at->attempt.'</strong>, ' : '<a href="review.php?attempt='. | |||
|         $at->id.($showall ? '&showall=true' : '').'">'.$at->attempt.'</a>, '; | |||
|     } | |||
|     $table->data[] = array(get_string('attempts', 'game').':', trim($attemptlist, ' ,')); | |||
| } | |||
| 
 | |||
| $table->data[] = array(get_string('startedon', 'game').':', userdate($attempt->timestart)); | |||
| if ($attempt->timefinish) { | |||
|     $table->data[] = array("$strtimecompleted:", userdate($attempt->timefinish)); | |||
|     $table->data[] = array("$strtimetaken:", $timetaken); | |||
| } | |||
| 
 | |||
| // If the student is allowed to see their score. | |||
| if ($options->scores) { | |||
|     if ($game->grade) { | |||
|         if ($overtime) { | |||
|             $result->sumgrades = "0"; | |||
|             $result->grade = "0.0"; | |||
|         } | |||
| 
 | |||
|         $a = new stdClass; | |||
|         $percentage = round($attempt->score * 100, 0); | |||
|         $a->grade = game_score_to_grade( $attempt->score, $game); | |||
|         $a->maxgrade = $game->grade; | |||
|         $table->data[] = array("$strscore:", "{$a->grade}/{$game->grade} ($percentage %)"); | |||
|     } | |||
| } | |||
| 
 | |||
| if ($options->overallfeedback && $feedback) { | |||
|     $table->data[] = array(get_string('feedback', 'game'), $feedback); | |||
| } | |||
| 
 | |||
| if ($isteacher and $attempt->userid == $USER->id) { | |||
|     // The teacher is at the end of a preview. Print button to start new preview. | |||
|     unset($buttonoptions); | |||
|     $buttonoptions['q'] = $game->id; | |||
|     $buttonoptions['forcenew'] = true; | |||
|     echo '<div class="controls">'; | |||
|     print_single_button($CFG->wwwroot.'/mod/game/attempt.php', $buttonoptions, get_string('startagain', 'game')); | |||
|     echo '</div>'; | |||
| } else { | |||
|     // Print number of the attempt. | |||
|     print_heading(get_string('reviewofattempt', 'game', $attempt->attempt)); | |||
| } | |||
| print_table($table); | |||
| 
 | |||
| // Print javascript button to close the window, if necessary. | |||
| if (!$isteacher) { | |||
|     include('attempt_close_js.php'); | |||
| } | |||
| 
 | |||
| // Print the navigation panel if required. | |||
| $numpages = game_number_of_pages( $attempt->layout); | |||
| if ($numpages > 1 and !$showall) { | |||
|     print_paging_bar($numpages, $page, 1, 'review.php?attempt='.$attempt->id.'&'); | |||
|     echo '<div class="controls"><a href="review.php?attempt='.$attempt->id.'&showall=true">'; | |||
|     print_string('showall', 'game'); | |||
|     echo '</a></div>'; | |||
| } | |||
| 
 | |||
| // Print all the questions. | |||
| if ($pagelist) { | |||
|     game_print_questions( $pagelist, $attempt, $questions, $options, $states, $game); | |||
| } | |||
| 
 | |||
| // Print the navigation panel if required. | |||
| if ($numpages > 1 and !$showall) { | |||
|     print_paging_bar($numpages, $page, 1, 'review.php?attempt='.$attempt->id.'&'); | |||
| } | |||
| 
 | |||
| // Print javascript button to close the window, if necessary. | |||
| if (!$isteacher) { | |||
|     require('attempt_close_js.php'); | |||
| } | |||
| 
 | |||
| if (empty($popup)) { | |||
|     echo $OUTPUT->footer($course); | |||
| } | |||
| 
 | |||
| function game_compute_states( $game, $questions) { | |||
|     global $QTYPES; | |||
| 
 | |||
|     // Restore the question sessions to their most recent states creating new sessions where required. | |||
|     $states = array(); | |||
|     foreach ($questions as $question) { | |||
|         $state = new StdClass; | |||
| 
 | |||
|         $cmoptions->course = $game->course; | |||
|         $cmoptions->optionflags->optionflags = 0; | |||
|         $cmoptions->id = 0; | |||
|         $cmoptions->shuffleanswers = 1; | |||
| 
 | |||
|         $state->last_graded = new StdClass; | |||
|         $state->last_graded->event = QUESTION_EVENTOPEN; | |||
| 
 | |||
|         $state->raw_grade = 0; | |||
| 
 | |||
|         $attempt = 0; | |||
|         if (!$QTYPES[$question->qtype]->create_session_and_responses( $question, $state, $cmoptions, $attempt)) { | |||
|             print_error( 'game_compute_states: problem'); | |||
|         } | |||
| 
 | |||
|         $state->event = QUESTION_EVENTOPEN; | |||
|         $state->manualcomment = ''; | |||
| 
 | |||
|         $state->responses = array( '' => $question->studentanswer); | |||
|         $state->attempt = $question->iid; | |||
| 
 | |||
|         $states[ $question->id] = $state; | |||
|     } | |||
|     return $states; | |||
| } | |||
| 
 | |||
| function game_print_questions( $pagelist, $attempt, $questions, $options, $states, $game) { | |||
|     global $QTYPES; | |||
| 
 | |||
|     $pagequestions = explode(',', $pagelist); | |||
|     $number = game_first_questionnumber( $attempt->layout, $pagelist); | |||
|     foreach ($pagequestions as $i) { | |||
|         if (!isset($questions[$i])) { | |||
|             echo $OUTPUT->box_start('center', '90%'); | |||
|             echo '<strong><font size="+1">' . $number . '</font></strong><br />'; | |||
|             notify(get_string('errormissingquestion', 'quiz', $i)); | |||
|             echo $OUTPUT->box_end(); | |||
|             $number++; // Just guessing that the missing question would have lenght 1. | |||
|             continue; | |||
|         } | |||
|         $options->validation = QUESTION_EVENTVALIDATE === $states[$i]->event; | |||
|         $options->history = false; | |||
|         unset( $options->questioncommentlink); | |||
| 
 | |||
|         // Print the question. | |||
|         if ($i > 0) { | |||
|             echo "<br />\n"; | |||
|         } | |||
| 
 | |||
|         $questions[$i]->maxgrade = 0; | |||
| 
 | |||
|         $options->correct_responses = 0; | |||
|         $options->feedback = 0; | |||
|         $options->readonly = 0; | |||
| 
 | |||
|         unset( $cmoptions); | |||
|         $cmoptions->course = $game->course; | |||
|         $cmoptions->optionflags->optionflags = 0; | |||
|         $cmoptions->id = 0; | |||
|         $cmoptions->shuffleanswers = 1; | |||
|         $attempt = 0; | |||
|         $question = $questions[ $i]; | |||
|         if (!$QTYPES[$question->qtype]->create_session_and_responses( $question, $state, $cmoptions, $attempt)) { | |||
|             print_error( 'game_sudoku_showquestions_quiz: problem'); | |||
|         } | |||
|         $cmoptions->optionflags = 0; | |||
|         print_question( $question, $states[$i], $number, $cmoptions, $options); | |||
|         $number += $questions[$i]->length; | |||
|     } | |||
| } | |||
					Loading…
					
					
				
		Reference in new issue