Exemplo n.º 1
0
 public function index()
 {
     $games = $this->game->with(['servers' => function ($query) {
         $query->active();
     }])->get();
     $page_title = Lang::get('navigation.main.items.chatlogs.title');
     $chat = $this->chat->with('player', 'server')->orderBy('logDate', 'desc');
     // If the show spam checkbox was not checked then exclude it
     if (!Input::has('showspam')) {
         $chat = $chat->excludeSpam();
     }
     // Check if user hit the submit button
     if ($this->hasInput()) {
         // Filtering by dates
         if (Input::has('StartDateTime') && Input::has('EndDateTime')) {
             $startDate = Carbon::parse(Input::get('StartDateTime'))->setTimezone(new \DateTimeZone('UTC'));
             $endDate = Carbon::parse(Input::get('EndDateTime'))->setTimezone(new \DateTimeZone('UTC'));
             $chat = $chat->whereBetween('logDate', [$startDate, $endDate]);
         }
         // Specific keywords the user has typed. Each word separated by a comma.
         // This can add significant time to fetching the results
         if (Input::has('keywords')) {
             $keywords = array_map('trim', explode(',', Input::get('keywords')));
             if (MainHelper::hasFulltextSupport('tbl_chatlog', 'logMessage')) {
                 $chat = $chat->whereRaw('MATCH(logMessage) AGAINST(? IN BOOLEAN MODE)', [implode(' ', $keywords)]);
             } else {
                 $chat = $chat->where(function ($query) use($keywords) {
                     foreach ($keywords as $keyword) {
                         $query->orWhere('logMessage', 'LIKE', '%' . $keyword . '%');
                     }
                 });
             }
         }
         // Player names the user has typed. Partal names can be provided. Must be seprated
         // by a comma to search multiple players.
         if (Input::has('players')) {
             $players = array_map('trim', explode(',', Input::get('players')));
             $playerIds = $this->player->where(function ($query) use($players) {
                 foreach ($players as $player) {
                     $query->orWhere('SoldierName', 'LIKE', sprintf('%s%%', $player));
                 }
             });
             $playerIds = $playerIds->lists('PlayerID');
             $chat = $chat->whereIn('logPlayerID', $playerIds);
         }
         if (Input::has('pid')) {
             if (Input::get('pid') > 0 && is_numeric(Input::get('pid'))) {
                 $chat = $chat->where('logPlayerID', Input::get('pid'));
             }
         }
         // Filter based on server if one is selected
         if (Input::has('server') && is_numeric(Input::get('server')) && Input::get('server') > 0) {
             $chat = $chat->where('ServerID', Input::get('server'));
         }
     }
     // Return paginated results
     $chat = $chat->simplePaginate(60);
     return View::make('chatlogs', compact('games', 'chat', 'page_title'));
 }