public function run(Request $request)
{
$token = $this->session->get(self::TOKEN_SESSION_KEY);
$userId = $this->session->get(self::USER_ID_SESSION_KEY);
if (!$token instanceof AccessToken) {
return new RedirectResponse($this->router->generate('authenticate'));
}
$apiClient = $this->getApiClient($token);
$selectedUsers = [];
$message = null;
$errors = [];
if ($request->isMethod('POST')) {
$selectedUsers = $request->request->get('users');
$message = $request->request->get('message');
$errors = $this->validate($selectedUsers, $message);
if (count($errors) < 1) {
$associatedUsers = (new Rudolph())->associateUsers($selectedUsers);
$hash = md5(serialize($associatedUsers));
$secretSanta = new SecretSanta($hash, $associatedUsers, $userId, str_replace('```', '', $message));
(new SecretDispatcher($apiClient))->dispatchRemainingMessages($secretSanta);
$request->getSession()->set($this->getSecretSantaSessionKey($secretSanta->getHash()), $secretSanta);
return new RedirectResponse($this->router->generate('finish', ['hash' => $secretSanta->getHash()]));
}
}
try {
$userExtractor = new UserExtractor($apiClient);
$users = $userExtractor->extractAll();
$content = $this->twig->render('run.html.twig', ['users' => $users, 'selectedUsers' => $selectedUsers, 'message' => $message, 'errors' => $errors]);
return new Response($content);
} catch (\RuntimeException $e) {
return new RedirectResponse($this->router->generate('authenticate'));
}
}