/** * Store a newly created resource in storage. * * @param Gladiator\Http\Requests\UserRequest $request * @return \Illuminate\Http\Response */ public function store(UserRequest $request) { $account = $this->registrar->findUserAccount($request->all()); if ($account instanceof User) { $user = $account; } else { $credentials = $request->all(); $credentials['id'] = $account->id; unset($credentials['term']); $user = $this->registrar->createUser((object) $credentials); } Log::debug('Gladiator\\Http\\Controllers\\Api\\UsersController -- Storing user', ['user' => $user]); $contest = Contest::with(['waitingRoom', 'competitions'])->where('campaign_id', '=', $request['campaign_id'])->where('campaign_run_id', '=', $request['campaign_run_id'])->firstOrFail(); $roomAssignment = $user->waitingRooms()->find($contest->waitingRoom->id); if ($roomAssignment) { // @TODO: maybe add more detail to response to indicate user already in a room? return $this->item($user); } $contest->waitingRoom->users()->attach($user->id); $contest = $this->manager->appendCampaign($contest); // Fire off welcome Email $params = ['type' => 'welcome', 'key' => 0, 'contest_id' => $contest->id]; $this->manager->sendEmail($user, $contest, $params); // @TODO: maybe add more detail to response to indicate which room user was added to? return $this->item($user); }
/** * Run the database seeds. * * @return void */ public function run() { $contests = Contest::all(); $messages = $this->repository->getMessagesFromSettings(); foreach ($contests as $contest) { if (!$contest->messages->count()) { $this->repository->createMessagesForContestFromSettings($contest, $messages); } } }
/** * Bootstrap the application services. * * @return void */ public function boot() { // Create a new waiting room when a Contest is saved. Contest::created(function ($contest) { $waitingRoom = new WaitingRoom(); $waitingRoom->contest_id = $contest->getKey(); // Default sign up period of one week. $waitingRoom->signup_start_date = Carbon::now(); $waitingRoom->signup_end_date = Carbon::now()->addWeeks(1)->endOfDay(); $waitingRoom->save(); }); }
/** * Get a collection of contests * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function index(Request $request) { $campaignRunId = $request->query('campaign_run_id'); // @TODO: below is temporary fix until Phoenix GET request updates run_nid param to run_id. // We want to aim to not have any proprietary Drupal id names :P if (!$campaignRunId) { $campaignRunId = $request->query('run_nid'); } if (isset($campaignRunId)) { $contest = Contest::with('waitingRoom')->where('campaign_run_id', $campaignRunId)->firstOrFail(); return $this->item($contest); } return $this->collection(Contest::all()); }
/** * Run the database seeds. * * @return void */ public function run() { // Get the first contest created. $contest = Contest::find(1); // Create three random competions for it. $numCompetitions = 3; for ($i = 0; $i < $numCompetitions; $i++) { $competition = new Competition(); $competition->contest_id = $contest->getKey(); $competition->competition_start_date = Carbon::now()->addWeeks(1)->startOfDay(); $competition->competition_end_date = Carbon::now()->addWeeks(3)->endOfDay(); $contest->competitions()->save($competition); } }
/** * Execute the console command. * * @return mixed */ public function handle() { $contest = $this->argument('contest'); $messages = $this->repository->buildMessagesFromDefaults(); if ($contest) { $contest = Contest::findOrFail($contest); $this->repository->updateMessagesForContest($contest, $messages); return $this->comment(PHP_EOL . 'All set! Messages for Contest ID #' . $contest->id . ' have been updated. If any messages were missing, they were added as well!' . PHP_EOL); } else { $contests = Contest::all(); foreach ($contests as $contest) { $this->repository->updateMessagesForContest($contest, $messages); } return $this->comment(PHP_EOL . 'All set! Messages for all Contests have been updated. If any messages for a Contest were missing, they were added as well!' . PHP_EOL); } }
/** * 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!'); }
/** * Split the waiting room. * * @param \Illuminate\Http\Request $request * @param \Gladiator\Models\WaitingRoom $room * @return \Illuminate\Http\Response */ public function split(SplitRequest $request, WaitingRoom $room) { $split = $room->getSplit($request->competition_max); $contest = Contest::find($room->contest_id); $room->saveSplit($contest, $split, $request); return redirect()->route('contests.show', $room->contest_id)->with('status', 'Waiting Room has been split!'); }
/** * Download the CSV export of all users. * * @param \Gladiator\Models\Contest $contest * @return \League\Csv\ $csv */ public function export(Contest $contest) { $csv = $contest->getCSVExport(); $csv->output('contest' . $contest->id . '.csv'); }
/** * Create a new message. * * @param \Gladiator\Models\Contest $contest * @param array $data * @return \Gladiator\Models\Message */ public function create($contest, $data) { $message = new Message($data); return $contest->messages()->save($message); }
/** * Collect Contest information with Waiting Room and Competitions. * * @param string|\Gladiator\Models\Contest $data * @return \Gladiator\Models\Contest */ public function collectContestInfo($data) { if ($data instanceof Contest) { $contest = $data->with('waitingRoom.users', 'competitions.users')->firstOrFail(); } else { $contest = Contest::with('waitingRoom.users', 'competitions.users')->findOrFail($data); } return $contest; }