/**
  * 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);
     }
 }
Example #6
0
 /**
  * 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);
 }
Example #11
0
 /**
  * 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;
 }