public function index() { $request = RequestWrapper::$request; $target = $request->get('player'); $target_id = $request->get('player_id'); if ($target_id) { $target_player_obj = Player::find($target_id); } else { $target_player_obj = Player::findByName($target); } if ($target_player_obj === null) { $template = 'no-player.tpl'; $viewed_name_for_title = null; $parts = array(); } else { $attack_error = 'You must become a ninja first.'; $clan = Clan::findByMember($target_player_obj); $combat_skills = null; $display_clan_options = false; $items = null; $same_clan = false; $self = false; $targeted_skills = null; $template = 'player.tpl'; $viewed_name_for_title = $target_player_obj->name(); $viewing_player_obj = Player::find(SessionFactory::getSession()->get('player_id')); $kills_today = query_item('SELECT sum(killpoints) FROM levelling_log WHERE _player_id = :player_id AND killsdate = CURRENT_DATE AND killpoints > 0', [':player_id' => $target_player_obj->id()]); $rank_spot = query_item('SELECT rank_id FROM rankings WHERE player_id = :player_id limit 1', [':player_id' => $target_player_obj->id()]); if ($viewing_player_obj !== null) { $viewers_clan = Clan::findByMember($viewing_player_obj); $self = $viewing_player_obj->id() === $target_player_obj->id(); $params = ['required_turns' => 0, 'ignores_stealth' => true]; $AttackLegal = new AttackLegal($viewing_player_obj, $target_player_obj, $params); $AttackLegal->check(false); $attack_error = $AttackLegal->getError(); if (!$attack_error && !$self) { // They're not dead or otherwise unattackable. // Pull the items and some necessary data about them. $inventory = new Inventory($viewing_player_obj); $items = $inventory->counts(); $skillDAO = new SkillDAO(); if (!$viewing_player_obj->isAdmin()) { $combat_skills = $skillDAO->getSkillsByTypeAndClass($viewing_player_obj->_class_id, 'combat', $viewing_player_obj->level); $targeted_skills = $skillDAO->getSkillsByTypeAndClass($viewing_player_obj->_class_id, 'targeted', $viewing_player_obj->level); } else { $combat_skills = $skillDAO->all('combat'); $targeted_skills = $skillDAO->all('targeted'); } } if ($clan && $viewers_clan) { $same_clan = $clan->id == $viewers_clan->id; $display_clan_options = !$self && $same_clan && $viewing_player_obj->isClanLeader(); } } $parts = ['viewing_player_obj' => $viewing_player_obj, 'target_player_obj' => $target_player_obj, 'combat_skills' => $combat_skills, 'targeted_skills' => $targeted_skills, 'self' => $self, 'rank_spot' => $rank_spot, 'kills_today' => $kills_today, 'status_list' => Player::getStatusList($target_player_obj->id()), 'clan' => $clan, 'items' => $items, 'account' => Account::findByChar($target_player_obj), 'same_clan' => $same_clan, 'display_clan_options' => $display_clan_options, 'attack_error' => $attack_error]; } $parts['authenticated'] = SessionFactory::getSession()->get('authenticated', false); $title = 'Ninja' . ($viewed_name_for_title ? ": {$viewed_name_for_title}" : ' Profile'); return new StreamedViewResponse($title, $template, $parts, ['quickstat' => 'player']); }
/** * Display the combat/action events and mark them as read when displayed. * * @return Response */ public function index() { $char = Player::find(SessionFactory::getSession()->get('player_id')); $events = $this->getEvents($char->id(), 300); $this->readEvents($char->id()); // mark events as viewed. $parts = ['events' => $events, 'has_clan' => (bool) Clan::findByMember($char), 'char' => $char]; return new StreamedViewResponse('Events', 'events.tpl', $parts, ['quickstat' => 'player']); }
/** * The standard homepage * * @return Response */ private function game() { // Get the actual values of the vars. $ninja = Player::find(SessionFactory::getSession()->get('player_id')); $playerInfo = $ninja->data(); $clan = $ninja ? Clan::findByMember($ninja) : null; $unreadCount = Message::where(['send_to' => $ninja->id(), 'unread' => 1])->count(); // Assign these vars to the template. $parts = ['main_src' => '/intro', 'body_classes' => 'main-body', 'version' => 'NW Version 1.7.5 2010.12.05', 'ninja' => $ninja, 'player_info' => $playerInfo, 'clan' => $clan, 'unread_message_count' => $unreadCount]; return new StreamedViewResponse('Live by the Shuriken', 'index.tpl', $parts, ['is_index' => true]); }
/** * @return Response */ public function index(Container $p_dependencies) { $request = RequestWrapper::$request; $session = SessionFactory::getSession(); $options = ['blaze' => (bool) $request->get('blaze'), 'deflect' => (bool) $request->get('deflect'), 'duel' => (bool) $request->get('duel'), 'evade' => (bool) $request->get('evasion'), 'attack' => !(bool) $request->get('duel')]; $target = Player::find($request->get('target')); $attacker = Player::find($session->get('player_id')); $skillListObj = new Skill(); $ignores_stealth = false; $required_turns = 0; foreach (array_filter($options) as $type => $value) { $ignores_stealth = $ignores_stealth || $skillListObj->getIgnoreStealth($type); $required_turns += $skillListObj->getTurnCost($type); } $params = ['required_turns' => $required_turns, 'ignores_stealth' => $ignores_stealth]; try { $rules = new AttackLegal($attacker, $target, $params); $attack_is_legal = $rules->check(); $error = $rules->getError(); } catch (\InvalidArgumentException $e) { $attack_is_legal = false; $error = 'Could not determine valid target'; } if (!$attack_is_legal) { // Take away at least one turn even on attacks that fail. $attacker->turns = $attacker->turns - 1; $attacker->save(); $parts = ['target' => $target, 'attacker' => $attacker, 'error' => $error]; return new StreamedViewResponse('Battle Status', 'attack_mod.tpl', $parts, ['quickstat' => 'player']); } else { return $this->combat($attacker, $target, $required_turns, $options); } }
function tearDown() { // Delete test user. TestAccountCreateAndDestroy::purge_test_accounts($this->test_ninja_name); $session = SessionFactory::getSession(); $session->invalidate(); }
function tearDown() { TestAccountCreateAndDestroy::destroy(); RequestWrapper::inject(new Request([])); $session = SessionFactory::getSession(); $session->invalidate(); }
public function tearDown() { RequestWrapper::destroy(); $session = SessionFactory::getSession(); $session->invalidate(); parent::tearDown(); }
public function index() { $session = SessionFactory::getSession(); $session->clear(); $session->invalidate(); return new RedirectResponse('/logout/loggedout'); }
public function tearDown() { TestAccountCreateAndDestroy::destroy(); $session = SessionFactory::getSession(); $session->invalidate(); parent::tearDown(); }
public function tearDown() { RequestWrapper::inject(new Request([])); TestAccountCreateAndDestroy::purge_test_accounts(); $session = SessionFactory::getSession(); $session->invalidate(); }
function tearDown() { removeItem($this->char->id(), self::ITEM); TestAccountCreateAndDestroy::destroy(); RequestWrapper::inject(new Request([])); $session = SessionFactory::getSession(); $session->invalidate(); }
public function testShouldRedirectIfAuthenticated() { $session = SessionFactory::getSession(); $session->set('authenticated', true); $controller = new LoginController(); $res = $controller->index($this->m_dependencies); $this->assertInstanceOf(RedirectResponse::class, $res); }
public function tearDown() { $this->deleteClan($this->clan->id); RequestWrapper::destroy(); TestAccountCreateAndDestroy::purge_test_accounts(); $session = SessionFactory::getSession(); $session->invalidate(); parent::tearDown(); }
public function tearDown() { $this->inventory->remove(self::ITEM); TestAccountCreateAndDestroy::destroy(); RequestWrapper::inject(new Request([])); $session = SessionFactory::getSession(); $session->invalidate(); parent::tearDown(); }
public function tearDown() { $this->char = null; $this->char2 = null; TestAccountCreateAndDestroy::destroy(); RequestWrapper::inject(new Request([])); $session = SessionFactory::getSession(); $session->invalidate(); }
/** * Pull & display the chats and a chat send if logged in * * @return Response */ public function index() { $request = RequestWrapper::$request; $view_all = $request->get('view_all'); $chatlength = max(self::DEFAULT_LIMIT, (int) $request->get('chatlength')); $chatlength = min(self::MAX_CHATS, max(self::MIN_CHATS, $chatlength)); $chats = $this->getChats($view_all ? null : $chatlength); $parts = ['field_size' => self::FIELD_SIZE, 'target' => $_SERVER['PHP_SELF'], 'chats' => $chats, 'error' => $request->get('error'), 'more_chats_to_see' => !$view_all && $chatlength < $this->getChatCount(), 'authenticated' => SessionFactory::getSession()->get('authenticated', false)]; return $this->render($parts); }
public function testViewingOfPlayerProfileMyselfViewingOwnProfile() { $viewing_char_id = $this->char->id(); $request = new Request(['player_id' => $viewing_char_id]); RequestWrapper::inject($request); $sess = SessionFactory::getSession(); $sess->set('player_id', $this->char->id()); $player = new PlayerController(); $player_outcome = $player->index(); $this->assertNotEmpty($player_outcome); }
/** * @TODO Document me! */ private function configure() { $char = Player::find(SessionFactory::getSession()->get('player_id')); $peers = $char ? $this->getNearbyPeers($char->id()) : []; $active_ninjas = Player::findActive(5, true); $char_info = $char ? $char->data() : []; $other_npcs = NpcFactory::npcsData(); $npcs = NpcFactory::customNpcs(); $enemy_list = $char ? $this->getCurrentEnemies($char->id()) : []; $recent_attackers = $char ? $this->getRecentAttackers($char) : []; return ['logged_in' => (bool) $char, 'enemy_list' => $enemy_list, 'char_name' => $char ? $char->name() : '', 'npcs' => $npcs, 'other_npcs' => $other_npcs, 'char_info' => $char_info, 'active_ninjas' => $active_ninjas, 'recent_attackers' => $recent_attackers, 'enemy_list' => $enemy_list, 'peers' => $peers]; }
public function testWorkDoesNothingWithNegativeWorkRequest() { // Note that this had to have an active logged in character to not just get an ignored result of "0" gold. $this->char = TestAccountCreateAndDestroy::char(); SessionFactory::getSession()->set('player_id', $this->char->id()); $request = new Request([], ['worked' => -999]); RequestWrapper::inject($request); $work = new WorkController(); $work_response = $work->requestWork(); $earned_gold = $work_response['parts']['earned_gold']; $this->assertEquals("0", $earned_gold); }
public function testDeleteWithEmptyPassword() { RequestWrapper::inject(new Request(['passw' => ''])); $session = SessionFactory::getSession(); $failure_count = $session->get('delete_attempts'); $controller = new AccountController(); $response = $controller->deleteAccount(); $reflection = new \ReflectionProperty(get_class($response), 'data'); $reflection->setAccessible(true); $response_data = $reflection->getValue($response); $this->assertNotEmpty($response_data['error']); $this->assertGreaterThan($failure_count, $session->get('delete_attempts')); }
public function testWorkDoesNothingWithNegativeWorkRequest() { // Note that this had to have an active logged in character to not just get an ignored result of "0" gold. $this->char = TestAccountCreateAndDestroy::char(); SessionFactory::getSession()->set('player_id', $this->char->id()); $request = new Request([], ['worked' => -999]); RequestWrapper::inject($request); $work = new WorkController(); $response = $work->requestWork($this->m_dependencies); $reflection = new \ReflectionProperty(get_class($response), 'data'); $reflection->setAccessible(true); $response_data = $reflection->getValue($response); $earned_gold = $response_data['earned_gold']; $this->assertEquals("0", $earned_gold); }
public function testAttackWhenDead() { $attacker = Player::find(SessionFactory::getSession()->get('player_id')); $attacker->death(); $attacker->save(); $char_id_2 = TestAccountCreateAndDestroy::char_id_2(); $params = ['target' => $char_id_2]; $request = Request::create('/attack', 'GET', $params); RequestWrapper::inject($request); $response = $this->controller->index($this->m_dependencies); $this->assertInstanceOf(StreamedViewResponse::class, $response); $reflection = new \ReflectionProperty(get_class($response), 'data'); $reflection->setAccessible(true); $response_data = $reflection->getValue($response); $this->assertNotEmpty($response_data['error']); }
/** * Create new post */ public function create() { try { $create_role = $this->hasCreateRole($this->pc); } catch (InvalidArgumentException $e) { $error = "Sorry, you must be logged in to create a news post."; return new RedirectResponse('/news/?error=' . rawurlencode($error)); } if (!$create_role) { $error = 'Sorry, you do not have permission to create a news post.'; return new RedirectResponse('/news/?error=' . rawurlencode($error)); } $title = 'Make New Post'; $error = (bool) RequestWrapper::getPostOrGet('error'); $parts = ['error' => $error, 'heading' => $title, 'authenticated' => SessionFactory::getSession()->get('authenticated', false)]; return new StreamedViewResponse($title, 'news.create.tpl', $parts); }
/** * Send out error information, about as much as possible */ public static function sendErrorEmail($p_errorMsg) { $session = SessionFactory::getSession(); if ($session->has('account_id')) { $p_errorMsg .= "Error Occured for accountID " . $session->get('account_id') . "\r\n"; } if ($session->has('player_id')) { $p_errorMsg .= "Error Occured for playerID " . $session->get('player_id') . "\r\n"; } $p_errorMsg .= 'REQUEST_URI: ' . (isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : null) . "\r\n"; $p_errorMsg .= 'REFERER: ' . (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null) . "\r\n"; $p_errorMsg .= 'METHOD: ' . (isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : null) . "\r\n"; if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST') { $p_errorMsg .= 'POST_DATA: ' . print_r($_POST, true) . "\r\n"; } $headers = "MIME-Version: 1.0\r\n" . "Content-Type: text/plain; charset=ISO-8859-15\r\n" . "To: " . ALERTS_EMAIL . "\r\n" . "From: " . SYSTEM_EMAIL . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail(ALERTS_EMAIL, 'Ninjawars: Error' . substr($p_errorMsg, 0, 170), $p_errorMsg, $headers); }
/** * Displays a template wrapped in the header and footer as needed. */ public function displayPage($template, $title = null, $local_vars = array(), $options = null) { // Updates the quickstat via javascript if requested. $quickstat = isset($options['quickstat']) ? $options['quickstat'] : null; $quickstat = $quickstat ? $quickstat : (isset($local_vars['quickstat']) ? $local_vars['quickstat'] : null); $body_classes = isset($options['body_classes']) ? $options['body_classes'] : (isset($local_vars['body_classes']) ? $local_vars['body_classes'] : null); $is_index = isset($options['is_index']) ? $options['is_index'] : false; $user_id = SessionFactory::getSession()->get('player_id'); $player = Player::find($user_id); $public_char_info = $player ? $player->publicData() : []; // Char info to pass to javascript. $this->assign($local_vars); $this->assign('logged_in', $user_id); $this->assign('user_id', $user_id); $this->assign('title', $title); $this->assign('quickstat', $quickstat); $this->assign('is_index', $is_index); $this->assign('json_public_char_info', $public_char_info ? json_encode($public_char_info) : null); $this->assign('body_classes', $body_classes); $this->assign('main_template', $template); $this->display('full_template.tpl'); }
/** * Update the information of a viewing observer, or player. */ function update_activity_info() { // ******************** Usage Information of the browser ********************* Request::setTrustedProxies(Constants::$trusted_proxies); $request = Request::createFromGlobals(); $remoteAddress = '' . $request->getClientIp(); $userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? substr($_SERVER['HTTP_USER_AGENT'], 0, 250) : NULL; // Truncated at 250 char. $referer = isset($_SERVER['HTTP_REFERER']) ? substr($_SERVER['HTTP_REFERER'], 0, 250) : ''; // Truncated at 250 char. // ************** Setting anonymous and player usage information DatabaseConnection::getInstance(); $session = SessionFactory::getSession(); if (!$session->has('online')) { // *** Completely new session, update latest activity log. *** if ($remoteAddress) { // *** Delete prior to trying to re-insert into the people online. *** $statement = DatabaseConnection::$pdo->prepare('DELETE FROM ppl_online WHERE ip_address = :ip OR session_id = :sessionID'); $statement->bindValue(':ip', $remoteAddress); $statement->bindValue(':sessionID', $session->getId()); $statement->execute(); } // *** Update viewer data. *** $statement = DatabaseConnection::$pdo->prepare('INSERT INTO ppl_online (session_id, activity, ip_address, refurl, user_agent) VALUES (:sessionID, now(), :ip, :referer, :userAgent)'); $statement->bindValue(':sessionID', $session->getId()); $statement->bindValue(':ip', $remoteAddress); $statement->bindValue(':referer', $referer); $statement->bindValue(':userAgent', $userAgent); $statement->execute(); $session->set('online', true); } else { // *** An already existing session. *** $statement = DatabaseConnection::$pdo->prepare('UPDATE ppl_online SET activity = now(), member = :member WHERE session_id = :sessionID'); $statement->bindValue(':sessionID', $session->getId()); $statement->bindValue(':member', is_logged_in(), PDO::PARAM_BOOL); $statement->execute(); } }
protected function tearDown() { RequestWrapper::destroy(); $session = SessionFactory::getSession(); $session->invalidate(); }
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use NinjaWars\core\RouteNotFoundException; use NinjaWars\core\Router; use NinjaWars\core\environment\RequestWrapper; use NinjaWars\core\data\GameLog; use NinjaWars\core\data\Player; use NinjaWars\core\extensions\SessionFactory; // setup our runtime environment require_once LIB_ROOT . 'environment/bootstrap.php'; try { $container = new Container(); $container['current_player'] = function ($c) { return Player::find(SessionFactory::getSession()->get('player_id')); }; $container['session'] = function ($c) { return SessionFactory::getSession(); }; // Update the activity of the page viewer in the database. RequestWrapper::init(); GameLog::updateActivityInfo(RequestWrapper::$request, SessionFactory::getSession()); // get the request information to parse the route $response = Router::route(Request::createFromGlobals(), $container); if ($response instanceof Response) { $response->send(); } else { throw new \RuntimeException('Route returned something other than a Response'); } } catch (RouteNotFoundException $e) { Router::respond404(); }
/** */ public function testDojoChangeClassNotLoggedInDoesNotError() { $session = SessionFactory::getSession(); $session->invalidate(); $this->assertNotEmpty($this->controller->changeClass($this->m_dependencies)); }
/** * Get the current account_id from the session, if any * @return int|null */ public function getAccountId() { return SessionFactory::getSession()->get('account_id'); }