public function process()
 {
     $user = user::getInstance();
     $db = db::getInstance();
     include './models/game.class.php';
     include './models/grid.class.php';
     // récupérer le gameid
     $this->gameid = isset($_REQUEST['gameid']) ? intval($_REQUEST['gameid']) : false;
     if ($this->gameid === false) {
         trigger_error('Game not found', E_USER_ERROR);
     }
     // lecture de l'objet game
     $game = new game();
     $game->read($this->gameid);
     // création d'une nouvelle grille
     $gridtype = GRIDTYPE_ALLWORDS;
     $grid = new grid();
     $gridid = $grid->create($gridtype);
     // ajout de la grille au game
     $game->assign_grid($gridid);
     $game->start_grid($gridid);
     // enrichissement du retour json
     $res = $grid->get();
     $res->gameid = $this->gameid;
     $res->gametype = GAMETYPE_PRACTICE_ALLWORDS;
     header('Content-Type: application/json');
     echo json_encode($res);
     die;
 }
 public function process()
 {
     $db = db::getInstance();
     $user = user::getInstance();
     include './models/game.class.php';
     // récupérer le gameid si il existe
     $game = false;
     $this->gameid = isset($_REQUEST['gameid']) ? intval($_REQUEST['gameid']) : false;
     if ($this->gameid !== false) {
         $game = new game();
         if (!$game->read($this->gameid)) {
             $this->gameid = false;
             trigger_error('Game not found!', E_USER_ERROR);
         }
         if (!isset($game->userids[$user->id])) {
             $this->gameid = false;
             trigger_error('Not your game!', E_USER_ERROR);
         }
     }
     /*// fermer toute grille en cours pour cet utilisateur
     		$sql = 'UPDATE gamesstatus
     					SET gridstatus = ' . intval(GRIDSTATUS_FINISHED) . '
     					WHERE userid = ' . intval($user->id) . '
     						AND gridstatus = ' . intval(GRIDSTATUS_STARTED);
     		$db->query($sql);*/
     // déterminer le type de partie à partir du mode
     $gametype = false;
     switch ($this->mode) {
         case 'game.launch.practice.allwords':
             $gametype = GAMETYPE_PRACTICE_ALLWORDS;
             break;
         case 'game.launch.practice.longest':
             $gametype = GAMETYPE_PRACTICE_LONGEST;
             break;
         case 'game.launch.practice.constraints':
             $gametype = GAMETYPE_PRACTICE_CONSTRAINTS;
             break;
         case 'game.launch.practice.full':
             $gametype = GAMETYPE_PRACTICE_FULL;
             break;
     }
     // créer une nouvelle partie
     if (!$this->gameid) {
         $userids = array($user->id);
         $game = new game();
         $this->gameid = $game->create($userids, $gametype, $user->get_lang());
     }
     return $this->display();
 }
    public function process()
    {
        $db = db::getInstance();
        $user = user::getInstance();
        include './models/game.class.php';
        include './models/grid.class.php';
        // récupérer le gameid
        $this->gameid = isset($_REQUEST['gameid']) ? intval($_REQUEST['gameid']) : false;
        if ($this->gameid === false) {
            trigger_error('Game not found', E_USER_ERROR);
        }
        // lecture de l'objet game
        $game = new game();
        $game->read($this->gameid);
        // lire les grilles terminées pour trouver le prochain type de grille
        $sql = 'SELECT COUNT(gridid) AS count_gridid
					FROM gamesstatus
					WHERE gameid = ' . intval($this->gameid) . '
						AND userid = ' . intval($user->id) . '
						AND gridstatus = ' . intval(GRIDSTATUS_FINISHED);
        $result = $db->query($sql);
        $grid_count = ($row = $result->fetch_assoc()) ? intval($row['count_gridid']) : 0;
        // déterminer le prochain type de grille
        switch ($grid_count) {
            case 0:
                $gridtype = GRIDTYPE_ALLWORDS;
                break;
            case 1:
                $gridtype = GRIDTYPE_LONGEST;
                break;
            case 2:
                $gridtype = GRIDTYPE_CONSTRAINTS;
                break;
        }
        // création d'une nouvelle grille
        $grid = new grid();
        $gridid = $grid->create($gridtype);
        // ajout de la grille au game
        $game->assign_grid($gridid);
        $game->start_grid($gridid);
        $res = $grid->get();
        $res->gameid = $this->gameid;
        $res->gametype = GAMETYPE_PRACTICE_FULL;
        header('Content-Type: application/json');
        echo json_encode($res);
        die;
    }
    public function process()
    {
        $db = db::getInstance();
        $user = user::getInstance();
        include './models/game.class.php';
        include './models/grid.class.php';
        // récupérer le gameid
        $this->gameid = isset($_REQUEST['gameid']) ? intval($_REQUEST['gameid']) : false;
        if ($this->gameid === false) {
            trigger_error('Game not found', E_USER_ERROR);
        }
        // lecture de l'objet game
        $game = new game();
        $game->read($this->gameid);
        // lire les grilles terminées pour trouver le prochain type de grille
        $grid_counts = array();
        $last_grid = 0;
        $sql = 'SELECT userid, COUNT(gridid) AS count_gridid
					FROM gamesstatus
					WHERE gameid = ' . intval($this->gameid) . '
						AND gridstatus = ' . intval(GRIDSTATUS_FINISHED) . '
					GROUP BY userid';
        $result = $db->query($sql);
        while ($row = $result->fetch_assoc()) {
            $grid_counts[intval($row['userid'])] = intval($row['count_gridid']);
            if (intval($row['count_gridid']) > $last_grid && intval($row['userid']) != $user->id) {
                $last_grid = intval($row['count_gridid']);
            }
        }
        if (isset($grid_counts[$user->id])) {
            if ($grid_counts && $last_grid < intval($grid_counts[$user->id])) {
                trigger_error('Wait for the other!', E_USER_ERROR);
            }
            $grid_count = $grid_counts ? intval($grid_counts[$user->id]) : 0;
        } else {
            $grid_count = 0;
        }
        // déterminer le prochain type de grille
        $gridtype = false;
        switch ($grid_count) {
            case 0:
                $gridtype = GRIDTYPE_ALLWORDS;
                break;
            case 1:
                $gridtype = GRIDTYPE_LONGEST;
                break;
            case 2:
                $gridtype = GRIDTYPE_CONSTRAINTS;
                break;
            default:
                trigger_error('Game over!', E_USER_ERROR);
                break;
        }
        // vérifier si l'autre adversaire est en train de créer une grille
        $sql = ' SELECT *
					FROM gamesusers
					WHERE gameid = ' . intval($this->gameid);
        $result = $db->query($sql);
        $row = $result->fetch_assoc();
        $request = $row['request'];
        // lire les grilles existantes pour ce type de grille
        $sql = 'SELECT *
					FROM gamesstatus gs, grids g
					WHERE gs.gameid = ' . intval($this->gameid) . '
						AND gs.userid = ' . intval($user->id) . '
						AND gs.gridstatus = ' . intval(GRIDSTATUS_ASSIGNED) . '
						AND g.gridid = gs.gridid
						AND g.gridtype = ' . intval($gridtype);
        $result = $db->query($sql);
        $gridid = ($row = $result->fetch_assoc()) ? intval($row['gridid']) : false;
        if ($request == 1) {
            // lire les grilles existantes pour ce type de grille
            $sql = 'SELECT *
						FROM gamesstatus gs, grids g
						WHERE gs.gameid = ' . intval($this->gameid) . '
							AND gs.userid = ' . intval($user->id) . '
							AND gs.gridstatus = ' . intval(GRIDSTATUS_ASSIGNED) . '
							AND g.gridid = gs.gridid
							AND g.gridtype = ' . intval($gridtype);
            $result = $db->query($sql);
            $gridid = ($row = $result->fetch_assoc()) ? intval($row['gridid']) : false;
            while ($gridid === false) {
                // lire les grilles existantes pour ce type de grille
                $sql = 'SELECT *
							FROM gamesstatus gs, grids g
							WHERE gs.gameid = ' . intval($this->gameid) . '
								AND gs.userid = ' . intval($user->id) . '
								AND gs.gridstatus = ' . intval(GRIDSTATUS_ASSIGNED) . '
								AND g.gridid = gs.gridid
								AND g.gridtype = ' . intval($gridtype);
                $result = $db->query($sql);
                $gridid = ($row = $result->fetch_assoc()) ? intval($row['gridid']) : false;
            }
        }
        if ($gridid === false) {
            if ($request == 0) {
                $sql = 'UPDATE gamesusers
							SET request = 1
							WHERE gameid = ' . intval($this->gameid);
                $db->query($sql);
                // création d'une nouvelle grille
                $grid = new grid();
                $gridid = $grid->create($gridtype);
                // ajout de la grille au game
                $game->assign_grid($gridid);
                $game->start_grid($gridid);
            }
        } else {
            $grid = new grid();
            $grid->read($gridid, $game->gamelang, $gridtype);
            $game->start_grid($gridid);
            $sql = 'UPDATE gamesusers
						SET request = 0
						WHERE gameid = ' . intval($this->gameid);
            $db->query($sql);
        }
        $res = $grid->get();
        $res->gameid = $this->gameid;
        $res->gametype = GAMETYPE_BATTLE;
        header('Content-Type: application/json');
        echo json_encode($res);
        die;
    }
    public function process()
    {
        $user = user::getInstance();
        $db = db::getInstance();
        include './models/game.class.php';
        /*// fermer toute grille en cours pour cet utilisateur
        		$sql = 'UPDATE gamesstatus
        					SET gridstatus = ' . intval(GRIDSTATUS_FINISHED) . '
        					WHERE userid = ' . intval($user->id) . '
        						AND gridstatus = ' . intval(GRIDSTATUS_STARTED);
        		$db->query($sql);*/
        // lire l'invitation
        $invitid = isset($_REQUEST['invitid']) ? intval($_REQUEST['invitid']) : 0;
        $gameid = isset($_REQUEST['gameid']) ? intval($_REQUEST['gameid']) : 0;
        // lire sur invitid
        if ($invitid) {
            $sql = 'SELECT *
						FROM invitations
						WHERE invitid = ' . intval($invitid);
            $result = $db->query($sql);
            $data = ($row = $result->fetch_assoc()) ? $row : false;
            if ($data === false) {
                trigger_error('No invitation', E_USER_ERROR);
            }
            // invitation reçue
            if (intval($data['touserid']) === $user->id) {
                $gametype = GAMETYPE_BATTLE;
                $userids = array($user->id, intval($row['fromuserid']));
                $game = new game();
                $this->gameid = $game->create($userids, $gametype, $user->get_lang());
                $sql = 'UPDATE invitations
							SET gameid = ' . $this->gameid . '
							WHERE invitid = ' . intval($invitid);
                $db->query($sql);
            } else {
                $this->gameid = $row['gameid'];
                $sql = 'DELETE FROM invitations
							WHERE invitid = ' . intval($invitid);
                $db->query($sql);
            }
        } else {
            $this->gameid = intval($gameid);
            $game = new game();
            if (!$game->read($this->gameid)) {
                trigger_error('No game!', E_USER_ERROR);
            }
        }
        // lire les grilles terminées pour trouver le prochain type de grille
        $grid_counts = array();
        $last_grid = 0;
        $sql = 'SELECT userid, COUNT(gridid) AS count_gridid
					FROM gamesstatus
					WHERE gameid = ' . intval($this->gameid) . '
						AND gridstatus = ' . intval(GRIDSTATUS_FINISHED) . '
					GROUP BY userid';
        $result = $db->query($sql);
        while ($row = $result->fetch_assoc()) {
            $grid_counts[intval($row['userid'])] = intval($row['count_gridid']);
            if (intval($row['count_gridid']) > $last_grid && intval($row['userid']) != $user->id) {
                $last_grid = intval($row['count_gridid']);
            }
        }
        if (isset($grid_counts[$user->id])) {
            if ($grid_counts && $last_grid < intval($grid_counts[$user->id])) {
                redirect('game.result&gameid=' . intval($this->gameid));
                exit;
                trigger_error('Wait for the other!', E_USER_ERROR);
            }
        }
        return $this->display();
    }