/** * Get the full competition overview and include user activity if specified. * * @param \Gladiator\Models\Competition $competition * @param bool $includeActivity * @return \Gladiator\Models\Competition */ public function getCompetitionOverview($competition, $includeActivity = false) { $competition = $competition->load('contest'); $competition->contest = $this->appendCampaign($competition->contest); $competition->contestants = $this->getModelUsers($competition, $includeActivity); if ($includeActivity) { $competition->activity = $this->catalogUsers($competition->contestants); $key = generate_model_flash_session_key($competition, ['includeActivity' => true]); } else { $competition->activity = null; $key = generate_model_flash_session_key($competition); } session()->flash($key, $competition); return $competition; }
/** * Get the leaderboard photos form. * * @param \Gladiator\Models\Competition $competition * @param \Gladiator\Models\Message $message * @return \Illuminate\Http\Response */ public function editLeaderboardPhotos(Competition $competition, Message $message) { $key = generate_model_flash_session_key($competition, ['includeActivity' => true]); if (session()->has($key)) { $competition = session($key); session()->reflash(); } else { $competition = $this->manager->getCompetitionOverview($competition, true); } $leaderboard = $competition->activity['active']; $topThree = $this->manager->getTopThreeReportbacks($leaderboard, ['includeUserIds' => true]); $photos = []; foreach ($topThree as $key => $user) { $photos[] = LeaderboardPhoto::where('competition_id', '=', $competition->id)->where('message_id', '=', $message->id)->where('user_id', '=', $user['user_id'])->first(); } return view('competitions.leaderboard_photos.edit', compact('competition', 'message', 'photos', 'topThree')); }
/** * Fire an event that queues a message to be sent. * * @param int $id */ public function sendMessage(Message $message) { // Get competition with activity. $competitionId = request('competition_id'); $contest = Contest::find(request('contest_id')); $contest = $this->manager->appendCampaign($contest); if ($competitionId) { $competition = Competition::find($competitionId); // Get competition with activity from flash if it is there. // Otherwise, grab it. $key = generate_model_flash_session_key($competition, ['includeActivity' => true]); if (session()->has($key)) { $competition = session($key); } else { $competition = $this->manager->getCompetitionOverview($competition, true); } } // Send test emails to authenticated user. if (request('test')) { $user = Auth::user(); $user = $this->userRepository->find($user->id); $user = $this->manager->appendReportback($user, []); $users = [$user]; } else { $users = $competition->contestants; // Only send checkin messages to users who haven't reported back. if ($message->type === 'checkin') { $users = $competition->activity['inactive']; } } $resources = ['message' => $message, 'competition' => isset($competition) ? $competition : null, 'contest' => $contest, 'users' => $users, 'test' => request('test')]; // Kick off email sending event(new QueueMessageRequest($resources)); if (!$competitionId) { return redirect()->back()->with('status', 'Fired that right the hell off!'); } return redirect()->route('competitions.message', ['competition' => $competitionId, 'contest' => request('contest_id')])->with('status', 'Fired that right the hell off!'); }