コード例 #1
1
 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']);
 }
コード例 #2
1
 /**
  * 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']);
 }
コード例 #3
1
 /**
  * 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]);
 }
コード例 #4
0
 /**
  * @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);
     }
 }
コード例 #5
0
 function tearDown()
 {
     // Delete test user.
     TestAccountCreateAndDestroy::purge_test_accounts($this->test_ninja_name);
     $session = SessionFactory::getSession();
     $session->invalidate();
 }
コード例 #6
0
 function tearDown()
 {
     TestAccountCreateAndDestroy::destroy();
     RequestWrapper::inject(new Request([]));
     $session = SessionFactory::getSession();
     $session->invalidate();
 }
コード例 #7
0
 public function tearDown()
 {
     RequestWrapper::destroy();
     $session = SessionFactory::getSession();
     $session->invalidate();
     parent::tearDown();
 }
コード例 #8
0
 public function index()
 {
     $session = SessionFactory::getSession();
     $session->clear();
     $session->invalidate();
     return new RedirectResponse('/logout/loggedout');
 }
コード例 #9
0
 public function tearDown()
 {
     TestAccountCreateAndDestroy::destroy();
     $session = SessionFactory::getSession();
     $session->invalidate();
     parent::tearDown();
 }
コード例 #10
0
 public function tearDown()
 {
     RequestWrapper::inject(new Request([]));
     TestAccountCreateAndDestroy::purge_test_accounts();
     $session = SessionFactory::getSession();
     $session->invalidate();
 }
コード例 #11
0
 function tearDown()
 {
     removeItem($this->char->id(), self::ITEM);
     TestAccountCreateAndDestroy::destroy();
     RequestWrapper::inject(new Request([]));
     $session = SessionFactory::getSession();
     $session->invalidate();
 }
コード例 #12
0
 public function testShouldRedirectIfAuthenticated()
 {
     $session = SessionFactory::getSession();
     $session->set('authenticated', true);
     $controller = new LoginController();
     $res = $controller->index($this->m_dependencies);
     $this->assertInstanceOf(RedirectResponse::class, $res);
 }
コード例 #13
0
 public function tearDown()
 {
     $this->deleteClan($this->clan->id);
     RequestWrapper::destroy();
     TestAccountCreateAndDestroy::purge_test_accounts();
     $session = SessionFactory::getSession();
     $session->invalidate();
     parent::tearDown();
 }
コード例 #14
0
 public function tearDown()
 {
     $this->inventory->remove(self::ITEM);
     TestAccountCreateAndDestroy::destroy();
     RequestWrapper::inject(new Request([]));
     $session = SessionFactory::getSession();
     $session->invalidate();
     parent::tearDown();
 }
コード例 #15
0
 public function tearDown()
 {
     $this->char = null;
     $this->char2 = null;
     TestAccountCreateAndDestroy::destroy();
     RequestWrapper::inject(new Request([]));
     $session = SessionFactory::getSession();
     $session->invalidate();
 }
コード例 #16
0
ファイル: ChatController.php プロジェクト: BitLucid/ninjawars
 /**
  * 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);
 }
コード例 #17
0
 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);
 }
コード例 #18
0
 /**
  * @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];
 }
コード例 #19
0
 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);
 }
コード例 #20
0
 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'));
 }
コード例 #21
0
 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);
 }
コード例 #22
0
 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']);
 }
コード例 #23
0
ファイル: NewsController.php プロジェクト: BitLucid/ninjawars
 /**
  * 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);
 }
コード例 #24
0
 /**
  * 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);
 }
コード例 #25
0
ファイル: NWTemplate.php プロジェクト: BitLucid/ninjawars
 /**
  * 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');
 }
コード例 #26
0
ファイル: lib_header.php プロジェクト: NinjaWars/ninjawars
/**
 * 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();
    }
}
コード例 #27
0
 protected function tearDown()
 {
     RequestWrapper::destroy();
     $session = SessionFactory::getSession();
     $session->invalidate();
 }
コード例 #28
0
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();
}
コード例 #29
0
 /**
  */
 public function testDojoChangeClassNotLoggedInDoesNotError()
 {
     $session = SessionFactory::getSession();
     $session->invalidate();
     $this->assertNotEmpty($this->controller->changeClass($this->m_dependencies));
 }
コード例 #30
0
 /**
  * Get the current account_id from the session, if any
  * @return int|null
  */
 public function getAccountId()
 {
     return SessionFactory::getSession()->get('account_id');
 }