private function parseCreationForm(array &$data) { $game = array(); if (isset($_POST['name']) && preg_match("/^([a-zA-Z0-9]+[a-zA-Z0-9' -]+[a-zA-Z0-9']+)?\$/", $_POST['name'])) { $game['name'] = $_POST['name']; } if (isset($_POST['players']) && preg_match("/[2-6]{1}/", $_POST['players'])) { $game['players'] = $_POST['players']; } $data['game'] = $game; // colors $colors = array(); $iter = ModelColor::iterator(); while ($iter->hasNext()) { $_Color = $iter->next(); $color = array(); $color['id'] = $_Color->getId(); $color['name'] = $_Color->getName(); $color['color'] = $_Color->getColor(); $colors[] = $color; } $data['colors'] = $colors; return $data; }
/** * @return array(int id => dict(id = int, color = string)) */ public function getFreeColors() { $colors_taken = array(); $output = array(); // array with taken colors $iter = ModelIsInGameInfo::iterator(null, $this->id); while ($iter->hasNext()) { $colors_taken[] = $iter->next()->getIdColor(); } $iter = ModelColor::iterator(); while ($iter->hasNext()) { $_Color = $iter->next(); if (in_array($_Color->getId(), $colors_taken)) { continue; } $output[$_Color->getId()] = array('id' => $_Color->getId(), 'color' => $_Color->getName()); } return $output; }
/** * joins the user in given game * * @param $id_user int * @param $id_game int * @param $id_color int * @throws NullPointerException * @throws JoinUserException * @return ModelIsInGameInfo */ public static function joinGame($id_user, $id_game, $id_color = null) { $id_user = intval($id_user); $id_game = intval($id_game); if ($id_color !== null) { $id_color = intval($id_color); } // check if user and game exist $user = ModelUser::getUser($id_user); $game = ModelGame::getGame($id_game); if ($game->getFreeSlots() <= 0) { throw new JoinUserException('Game is full.'); } // check if user is in the game $iter = ModelUser::iterator($id_game); while ($iter->hasNext()) { if ($iter->next() === $user) { throw new JoinUserException('User allready in this game.'); } } // check if color is free if ($id_color !== null && !$game->checkIfColorIsFree($id_color)) { $id_color = null; } // get first free color if ($id_color === null) { $color_iter = ModelColor::iterator(); while ($color_iter->hasNext()) { $color = $color_iter->next(); if (!$game->checkIfColorIsFree($color->getId())) { continue; } $id_color = $color->getId(); break; } } if ($id_color === null) { throw new JoinUserException('No free color found.'); } // insert player $dict = array(); $dict[':id_user'] = $id_user; $dict[':id_game'] = $id_game; $dict[':id_color'] = $id_color; DataSource::Singleton()->epp('join_game', $dict); // set user notification rules ModelInGamePhaseInfo::getInGamePhaseInfo($id_user, $id_game); return self::getIsInGameInfo($id_user, $id_game); }