function game_view_capability_attempt($game, $context, $course, $available, $cm)
{
    global $CFG, $USER;
    $unfinished = false;
    // Get this user's attempts.
    if ($USER->username == 'guest') {
        $attempts = array();
        $mygrade = array();
    } else {
        $attempts = game_get_user_attempts($game->id, $USER->id);
        if ($unfinishedattempt = game_get_user_attempt_unfinished($game->id, $USER->id)) {
            $attempts[] = $unfinishedattempt;
            $unfinished = true;
        }
        $mygrade = game_get_best_grade($game, $USER->id);
    }
    $numattempts = count($attempts);
    // Get some strings.
    $strattempt = get_string("attempt", "game");
    $strtimetaken = get_string("timetaken", "game");
    $strtimecompleted = get_string("timecompleted", "game");
    $strgrade = get_string("grade");
    $strmarks = get_string('marks', 'game');
    $strfeedback = get_string('feedback', 'game');
    // Print table with existing attempts
    if ($attempts) {
        // Work out which columns we need, taking account what data is available in each attempt.
        list($someoptions, $alloptions) = game_get_combined_reviewoptions($game, $attempts, $context);
        $gradecolumn = $someoptions->scores && $game->grade;
        //$markcolumn = $gradecolumn && ($game->grade != $game->grade);
        $overallstats = $alloptions->scores;
        $feedbackcolumn = game_has_feedback($game->id);
        $overallfeedback = $feedbackcolumn && $alloptions->overallfeedback;
        // prepare table header
        $table->head = array($strattempt, $strtimecompleted);
        $table->align = array("center", "left");
        $table->size = array("", "");
        /*			
                    if ( $markcolumn) {
                        $table->head[] = "$strmarks / $game->grade";
                        $table->align[] = 'right';
                        $table->size[] = '';
                    }
        */
        if ($gradecolumn) {
            $table->head[] = "{$strgrade} / {$game->grade}";
            $table->align[] = 'center';
            $table->size[] = '';
        }
        if ($feedbackcolumn) {
            $table->head[] = $strfeedback;
            $table->align[] = 'left';
            $table->size[] = '';
        }
        if (isset($game->showtimetaken)) {
            $table->head[] = $strtimetaken;
            $table->align[] = 'center';
            $table->size[] = '';
        }
        // One row for each attempt
        foreach ($attempts as $attempt) {
            $attemptoptions = game_get_reviewoptions($game, $attempt, $context);
            $row = array();
            // Add the attempt number, making it a link, if appropriate.
            $row[] = make_review_link('#' . $attempt->attempt, $game, $attempt);
            // prepare strings for time taken and date completed
            $timetaken = '';
            $datecompleted = '';
            if ($attempt->timefinish > 0) {
                // attempt has finished
                $timetaken = format_time($attempt->timefinish - $attempt->timestart);
                $datecompleted = userdate($attempt->timefinish);
            } else {
                if ($available) {
                    // The attempt is still in progress.
                    $timetaken = format_time(time() - $attempt->timestart);
                    $datecompleted = '';
                } else {
                    if ($game->timeclose) {
                        // The attempt was not completed but is also not available any more becuase the game is closed.
                        $timetaken = format_time($game->timeclose - $attempt->timestart);
                        $datecompleted = userdate($game->timeclose);
                    } else {
                        // Something wheird happened.
                        $timetaken = '';
                        $datecompleted = '';
                    }
                }
            }
            $row[] = $datecompleted;
            // Ouside the if because we may be showing feedback but not grades.
            $attemptgrade = game_score_to_grade($attempt->score, $game);
            /*
                            if ($markcolumn) {
                                if ($attemptoptions->scores) {
                                    $row[] = make_review_link(round($attempt->score * $game->grade, $game->decimalpoints), $game, $attempt);
                                } else {
                                    $row[] = '';
                                }
                            }
            */
            if ($gradecolumn) {
                if ($attemptoptions->scores) {
                    // highlight the highest grade if appropriate
                    if ($overallstats && !is_null($mygrade) && $attemptgrade == $mygrade && $game->grademethod == GAME_GRADEMETHOD_HIGHEST) {
                        $formattedgrade = "<span class='highlight'>{$attemptgrade}</span>";
                    } else {
                        $formattedgrade = $attemptgrade;
                    }
                    $row[] = make_review_link($formattedgrade, $game, $attempt);
                } else {
                    $row[] = '';
                }
            }
            if ($feedbackcolumn) {
                if ($attemptoptions->overallfeedback) {
                    $row[] = game_feedback_for_grade($attemptgrade, $game->id);
                } else {
                    $row[] = '';
                }
            }
            if (isset($game->showtimetaken)) {
                $row[] = $timetaken;
            }
            $table->data[] = $row;
        }
        // End of loop over attempts.
        print_table($table);
    }
    // Print information about the student's best score for this game if possible.
    $moreattempts = $unfinished || $numattempts < $game->attempts || $game->attempts == 0;
    if (!$moreattempts) {
        print_heading(get_string("nomoreattempts", "game"));
    }
    if ($numattempts && !is_null($mygrade)) {
        if ($overallstats) {
            if ($available && $moreattempts) {
                $GAME_GRADE_METHOD = array(GAME_GRADEMETHOD_HIGHEST => get_string("gradehighest", "game"), GAME_GRADEMETHOD_AVERAGE => get_string("gradeaverage", "game"), GAME_GRADEMETHOD_FIRST => get_string("attemptfirst", "game"), GAME_GRADEMETHOD_LAST => get_string("attemptlast", "game"));
                $a = new stdClass();
                $a->method = $GAME_GRADE_METHOD[$game->grademethod];
                $a->mygrade = $mygrade;
                $a->gamegrade = $game->grade;
                print_heading(get_string('gradesofar', 'game', $a));
            } else {
                print_heading(get_string('yourfinalgradeis', 'game', "{$mygrade} / {$game->grade}"));
            }
        }
        if ($overallfeedback) {
            echo '<p class="gamegradefeedback">' . game_feedback_for_grade($mygrade, $game->id) . '</p>';
        }
    }
    // Print a button to start/continue an attempt, if appropriate.
    //if (!$game->questions) {
    //   print_heading( get_string("noquestions", "game"));
    //} else
    if ($available && $moreattempts) {
        game_view_capability_attempt_showinfo($game, $course, $cm, $unfinished, $numattempts);
    } else {
        print_continue($CFG->wwwroot . '/course/view.php?id=' . $course->id);
    }
}
$showall = optional_param('showall', 0, PARAM_BOOL);
if (!($attempt = get_record("game_attempts", "id", $attempt))) {
    error("No such attempt ID exists");
}
if (!($game = get_record("game", "id", $attempt->gameid))) {
    error("The game with id {$attempt->gameid} belonging to attempt {$attempt} is missing");
}
game_compute_attempt_layout($game, $attempt);
if (!($course = get_record("course", "id", $game->course))) {
    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))) {
    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 = get_context_instance(CONTEXT_MODULE, $cm->id);
$coursecontext = get_context_instance(CONTEXT_COURSE, $cm->course);
$isteacher = isteacher($game->course, $USER->id);
$options = game_get_reviewoptions($game, $attempt, $context);
$popup = $isteacher ? 0 : $game->popup;
// Controls whether this is shown in a javascript-protected window.
/*if (!has_capability('mod/game:viewreports', $context)) {
      if (!$attempt->timefinish) {
          redirect('attempt.php?q='.$game->id);
      }
      // If not even responses are to be shown in review then we
      // don't allow any review
      if (!($game->review & GAME_REVIEW_RESPONSES)) {
          if (empty($popup)) {