<?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/>.

/**
 * Export game to printable HTML format.
 *
 * @package    mod_game
 * @copyright  2007 Vasilis Daloukas
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
require_once("../../config.php");
require_once("lib.php");
require_once("locallib.php");

$id = required_param('id', PARAM_INT); // Course Module ID.
$gameid = required_param('gameid', PARAM_INT);

$game = $DB->get_record('game', [ 'id' => $gameid]);

require_login($game->course);

$context = game_get_context_module_instance($id);
require_capability('mod/game:view', $context);

if (!$course = $DB->get_record('course', ['id' => $game->course])) {
    throw new moodle_exception('game_error', 'game', 'invalidcourseid');
}

if (!$cm = get_coursemodule_from_instance('game', $game->id, $course->id)) {
    throw new moodle_exception('game_error', 'game', 'invalidcoursemodule');
}

game_print($cm, $game, $context, $course);

/**
 * Print
 *
 * @package mod_game
 *
 * @param stdClass $cm
 * @param stdClass $game
 * @param stdClass $context
 * @param stdClass $course
 */
function game_print($cm, $game, $context, $course) {
    if ($game->gamekind == 'cross') {
        game_print_cross($cm, $game, $context, $course);
    } else if ($game->gamekind == 'cryptex') {
        game_print_cryptex($cm, $game, $context, $course);
    }
}

/**
 * Prints a cross.
 *
 * @package mod_game
 *
 * @param stdClass $cm
 * @param stdClass $game
 * @param stdClass $context
 * @param stdClass $course
 */
function game_print_cross($cm, $game, $context, $course) {
    require("cross/play.php");

    $attempt = game_getattempt($game, $crossrec);
    if ($attempt === false) {
        return;
    }

    $g = '';
    $onlyshow = true;
    $showsolution = false;
    $endofgame = false;
    $print = true;
    $checkbutton = false;
    $showhtmlsolutions = false;
    $showhtmlprintbutton = false;
    $showstudentguess = false;

?>
<html  dir="ltr" lang="el" xml:lang="el" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Print</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <?php
    game_cross_play(
        $cm,
        $game,
        $attempt,
        $crossrec,
        $g,
        $onlyshow,
        $showsolution,
        $endofgame,
        $print,
        $checkbutton,
        $showhtmlsolutions,
        $showhtmlprintbutton,
        $showstudentguess,
        $context,
        $course
    );
}

/**
 * Prints a cryptex.
 *
 * @package mod_game
 *
 * @param stdClass $cm
 * @param stdClass $game
 * @param stdClass $context
 * @param stdClass $course
 */
function game_print_cryptex($cm, $game, $context, $course) {
    global $DB;

    require('cross/cross_class.php');
    require('cross/crossdb_class.php');
    require("cryptex/play.php");

    $attempt = game_getattempt($game, $crossrec);
    if ($attempt === false) {
        return;
    }

    $updateattempt = false;
    $onlyshow = true;
    $showsolution = false;
    $showhtmlprintbutton = false;
    $print = true;
    $crossm = $DB->get_record_select('game_cross', "id=$attempt->id");

    ?>
<html  dir="ltr" lang="el" xml:lang="el" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Print</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <?php
    game_cryptex_play(
        $cm,
        $game,
        $attempt,
        $crossrec,
        $crossm,
        $updateattempt,
        $onlyshow,
        $showsolution,
        $context,
        $print,
        $showhtmlprintbutton,
        $course
    );
}
