public function send(User $recipient, Group $group, GroupRegistration $registration, $queued = true, $contentBody = null) { // Since this email is queued, we need to get pivot data now and include it with $players // because once it actually gets processed $players won't be an object making it more // difficult to fetch this data $players = []; $grades = []; $shirtSizes = []; foreach ($registration->players($group->program) as $player) { $player->full_name = $player->full_name; $grades[$player->id] = $registration->grade($player->id); $shirtSizes[$player->id] = $registration->shirtSize($player->id); $players[] = $player; } // setting this value so that it's available in the toArray() so queued mail can use it $recipient->full_name = $recipient->full_name; $view = 'emails.group-welcome-email'; $viewData = ['groupId' => $group->id, 'guardian' => $recipient, 'players' => $players, 'grades' => $grades, 'shirtSizes' => $shirtSizes, 'hasEmailBody' => is_null($contentBody) ? $group->settings->hasRegistrationEmailContents() : true, 'emailBody' => is_null($contentBody) ? $group->settings->registrationEmailContents() : $contentBody]; $callBack = function (Message $message) use($group, $recipient) { $message->to($recipient->email, $recipient->full_name)->subject($group->name . ' Registration'); }; if ($queued) { Mail::queue($view, $viewData, $callBack); } else { Mail::send($view, $viewData, $callBack); } }
/** * @test */ public function sixthGradersCanBeAddedToBeginnerOrTeen() { GroupRegistration::$gradesWithProgramChoice = [6]; $this->visit('/register/players')->see('David Webb')->select('6', 'player[1][grade]')->press('Continue')->seePageIs('/register/program')->see('David Webb')->select(Program::BEGINNER, 'player[1]')->press('Continue'); // assert the player is classified as beginner $beginner = Program::findOrFail(Program::BEGINNER); /** @var GroupRegistration $registration */ $registration = Session::seasonalGroupRegistration(); $this->arrayHasKey(1, $registration->playerInfo($beginner)); }
/** * @return mixed */ public function postPlayers(PlayerRegistrationRequest $request, GroupRegistration $registration) { // map the POSTed data to the season data required foreach ($request->get('player') as $playerId => $playerData) { if (isset($playerData['register']) && $playerData['register'] == 1) { $registration->addPlayer($playerId, $playerData['grade'], $playerData['shirtSize']); } } // if they followed a link to get to the registration // auto-associate them with this group $familiarGroup = Session::getGroupToRegisterWith(); if ($familiarGroup !== null) { $registration->addGroup($familiarGroup); } // save in session so we can show this info on // the summary page Session::setSeasonalGroupRegistration($registration); // sometimes parents can override the program selection if ($registration->requiresProgramSelection()) { return redirect('/register/program'); } return redirect('/register/summary'); }
public function register(Season $season, User $guardian, GroupRegistration $registration) { DB::beginTransaction(); foreach ($registration->groups() as $group) { foreach ($registration->playerInfo($group->program) as $playerId => $playerData) { $playerData['group_id'] = $group->id; $season->players()->attach($playerId, $playerData); } // Since this email is queued, we need to get pivot data now and include it with $players // because once it actually gets processed $players won't be an object making it more // difficult to fetch this data $players = []; $grades = []; $shirtSizes = []; foreach ($registration->players($group->program) as $player) { $player->full_name = $player->full_name; $grades[$player->id] = $registration->grade($player->id); $shirtSizes[$player->id] = $registration->shirtSize($player->id); $players[] = $player; } // setting this value so that it's available in the toArray() so queued mail can use it $guardian->full_name = $guardian->full_name; /** @var User $user */ foreach ($group->users()->with('roles')->get() as $user) { if ($user->isA(Role::HEAD_COACH) && $user->settings->shouldBeNotifiedWhenUserJoinsGroup()) { Mail::queue('emails.group-registration-notification', ['groupId' => $group->id, 'guardian' => $guardian, 'players' => $players, 'grades' => $grades, 'shirtSizes' => $shirtSizes], function (Message $message) use($group, $user, $players) { $message->to($user->email, $user->full_name)->subject('New ' . $group->name . ' Registration' . (count($players) > 1 ? 's' : '')); }); } } $this->registrationConfirmation->send($guardian, $group, $registration); } DB::commit(); event('players.registered.with.group', [$group, $guardian]); return $group; }
/** * @param GroupRegistration $seasonalGroupRegistration */ public function setSeasonalGroupRegistration(GroupRegistration $seasonalGroupRegistration) { $this->set(self::SEASONAL_GROUP_REGISTRATION, $seasonalGroupRegistration->toArray()); }
/** * Seed 2 players for each Group. * * @param Group $group */ public function addGroup(Group $group) { parent::addGroup($group); $this->addPlayer(self::TEST_PLAYER_ID_1, $group->program->min_grade, 'SM'); $this->addPlayer(self::TEST_PLAYER_ID_2, $group->program->max_grade, 'M'); }