diff --git a/public/static/js/maps.js b/public/static/js/maps.js index 35c4e33..d8f7a9f 100644 --- a/public/static/js/maps.js +++ b/public/static/js/maps.js @@ -69,7 +69,7 @@ printTimeForHuman: function (time) { const minutes = Math.floor(time / 60); const seconds = time % 60; - var time_str = ''; + var time_str = ''; if (minutes == 1) { time_str += '1 minute'; @@ -141,9 +141,7 @@ if (document.getElementById('challengeButton')) { document.getElementById('challengeButton').onclick = function () { MapGuesser.showModal('challenge'); - document.getElementById('createNewChallengeButton').href = '/challenge/new/' + this.dataset.mapId; document.getElementById('playMode').style.visibility = 'hidden'; - var timeLimit = document.getElementById('timeLimit').value; document.getElementById('timeLimitLabel').innerText = 'Time limit of ' + Util.printTimeForHuman(timeLimit); }; diff --git a/src/Controller/LoginController.php b/src/Controller/LoginController.php index 5536d23..fcf24be 100644 --- a/src/Controller/LoginController.php +++ b/src/Controller/LoginController.php @@ -36,6 +36,8 @@ class LoginController private UserPlayedPlaceRepository $userPlayedPlaceRepository; + private string $redirectUrl; + public function __construct(IRequest $request) { $this->request = $request; @@ -44,15 +46,19 @@ class LoginController $this->userConfirmationRepository = new UserConfirmationRepository(); $this->userPasswordResetterRepository = new UserPasswordResetterRepository(); $this->userPlayedPlaceRepository = new UserPlayedPlaceRepository(); + $this->redirectUrl = $this->request->session()->has('redirect_after_login') ? + $this->request->session()->get('redirect_after_login') : + \Container::$routeCollection->getRoute('index')->generateLink(); } public function getLoginForm() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } - return new HtmlContent('login/login'); + return new HtmlContent('login/login', ['redirectUrl' => '/' . $this->redirectUrl]); } public function getGoogleLoginRedirect(): IRedirect @@ -76,7 +82,8 @@ class LoginController public function getSignupForm() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } if ($this->request->session()->has('tmp_user_data')) { @@ -98,7 +105,8 @@ class LoginController public function getSignupWithGoogleForm() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } if (!$this->request->session()->has('google_user_data')) { @@ -109,13 +117,14 @@ class LoginController $user = $this->userRepository->getByEmail($userData['email']); - return new HtmlContent('login/google_signup', ['found' => $user !== null, 'email' => $userData['email']]); + return new HtmlContent('login/google_signup', ['found' => $user !== null, 'email' => $userData['email'], 'redirectUrl' => '/' . $this->redirectUrl]); } public function getRequestPasswordResetForm() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } return new HtmlContent('login/password_reset_request', ['email' => $this->request->query('email')]); @@ -129,7 +138,8 @@ class LoginController public function getResetPasswordForm() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } $token = $this->request->query('token'); @@ -141,12 +151,13 @@ class LoginController $user = $this->userRepository->getById($resetter->getUserId()); - return new HtmlContent('login/reset_password', ['success' => true, 'token' => $token, 'email' => $user->getEmail()]); + return new HtmlContent('login/reset_password', ['success' => true, 'token' => $token, 'email' => $user->getEmail(), 'redirectUrl' => '/' . $this->redirectUrl]); } public function login(): IContent { if ($this->request->user() !== null) { + $this->deleteRedirectUrl(); return new JsonContent(['success' => true]); } @@ -198,13 +209,15 @@ class LoginController $this->request->setUser($user); + $this->deleteRedirectUrl(); return new JsonContent(['success' => true]); } public function loginWithGoogle() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } if ($this->request->query('state') !== $this->request->session()->get('oauth_state')) { @@ -242,7 +255,8 @@ class LoginController $this->request->setUser($user); - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } public function logout(): IRedirect @@ -255,7 +269,8 @@ class LoginController public function signup(): IContent { if ($this->request->user() !== null) { - return new JsonContent(['redirect' => ['target' => '/' . \Container::$routeCollection->getRoute('home')->generateLink()]]); + $this->deleteRedirectUrl(); + return new JsonContent(['redirect' => ['target' => '/' . $this->redirectUrl]]); } $user = $this->userRepository->getByEmail($this->request->post('email')); @@ -274,7 +289,8 @@ class LoginController $this->request->setUser($user); - $data = ['redirect' => ['target' => '/' . \Container::$routeCollection->getRoute('index')->generateLink()]]; + $this->deleteRedirectUrl(); + $data = ['redirect' => ['target' => '/' . $this->redirectUrl]]; } else { $data = [ 'error' => [ @@ -355,6 +371,7 @@ class LoginController public function signupWithGoogle(): IContent { if ($this->request->user() !== null) { + $this->deleteRedirectUrl(); return new JsonContent(['success' => true]); } @@ -384,6 +401,7 @@ class LoginController $this->request->session()->delete('google_user_data'); $this->request->setUser($user); + $this->deleteRedirectUrl(); return new JsonContent(['success' => true]); } @@ -404,7 +422,8 @@ class LoginController public function activate() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } $confirmation = $this->userConfirmationRepository->getByToken(substr($this->request->query('token'), 0, 32)); @@ -426,13 +445,15 @@ class LoginController $this->request->setUser($user); - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } public function cancel() { if ($this->request->user() !== null) { - return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY); + $this->deleteRedirectUrl(); + return new Redirect($this->redirectUrl, IRedirect::TEMPORARY); } $confirmation = $this->userConfirmationRepository->getByToken(substr($this->request->query('token'), 0, 32)); @@ -461,9 +482,10 @@ class LoginController public function requestPasswordReset(): IContent { if ($this->request->user() !== null) { + $this->deleteRedirectUrl(); return new JsonContent([ 'redirect' => [ - 'target' => '/' . \Container::$routeCollection->getRoute('home')->generateLink() + 'target' => '/' . $this->redirectUrl ] ]); } @@ -538,9 +560,10 @@ class LoginController public function resetPassword(): IContent { if ($this->request->user() !== null) { + $this->deleteRedirectUrl(); return new JsonContent([ 'redirect' => [ - 'target' => '/' . \Container::$routeCollection->getRoute('home')->generateLink() + 'target' => '/' . $this->redirectUrl ] ]); } @@ -581,6 +604,7 @@ class LoginController $this->request->setUser($user); + $this->deleteRedirectUrl(); return new JsonContent(['success' => true]); } @@ -641,4 +665,9 @@ class LoginController ]); $mail->send(); } + + private function deleteRedirectUrl(): void + { + $this->request->session()->delete('redirect_after_login'); + } } diff --git a/views/login/google_signup.php b/views/login/google_signup.php index 1cb0149..e056e58 100644 --- a/views/login/google_signup.php +++ b/views/login/google_signup.php @@ -5,7 +5,7 @@ @section(main)