From 62251b1062f003e2d3ef9882eaafa38bd75077df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Vigh?= Date: Tue, 18 May 2021 19:55:05 +0200 Subject: [PATCH] MAPG-235 created error handling for challenge access without login --- public/static/js/game.js | 70 +++++++------------------------ src/Controller/GameController.php | 13 +++++- 2 files changed, 28 insertions(+), 55 deletions(-) diff --git a/public/static/js/game.js b/public/static/js/game.js index 0bb29de..eba1b40 100644 --- a/public/static/js/game.js +++ b/public/static/js/game.js @@ -1,6 +1,6 @@ 'use strict'; -const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2}); +const GameType = Object.freeze({ 'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2 }); (function () { var Game = { @@ -215,8 +215,8 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2}); } }, - getGameIdentifier: function() { - switch(Game.type) { + getGameIdentifier: function () { + switch (Game.type) { case GameType.SINGLE: return '/game/' + mapId; case GameType.MULTI: @@ -303,7 +303,7 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2}); Game.showSummary(); document.getElementById('continueButton').style.display = 'none'; - + } else { Game.panoId = this.response.place.panoId; @@ -317,7 +317,7 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2}); }); }, - transitToResultMap: function() { + transitToResultMap: function () { // TODO: refactor - it is necessary for mobile if (window.getComputedStyle(document.getElementById('guess')).visibility === 'hidden') { document.getElementById('showGuessButton').click(); @@ -353,7 +353,7 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2}); }, loadHistory: function (history) { - if(!history) + if (!history) return; Game.history = history; @@ -385,9 +385,9 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2}); Game.addGuessPositionToResultMap(round.result.guessPosition, null, true); } Game.scoreSum += round.result.score; - - if(round.allResults !== undefined) { + + if (round.allResults !== undefined) { for (var j = 0; j < round.allResults.length; ++j) { var result = round.allResults[j]; if (result.guessPosition) { @@ -514,7 +514,11 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2}); break; case 'game_not_found': - MapGuesser.showModalWithContent('Error', 'The game room was not found by this ID. Please check the link.'); + MapGuesser.showModalWithContent('Error', 'The game was not found by this ID. Please check the link.'); + break; + + case 'anonymous_user': + MapGuesser.showModalWithContent('Error', 'You have to login to join a challenge!'); break; default: @@ -580,7 +584,7 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2}); }, showResultMap: function (result, resultBounds) { - + Game.transitToResultMap(); Game.map.fitBounds(resultBounds); @@ -637,48 +641,6 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2}); Game.pov = this.response.place.pov; } - // if(this.response.history) { - - // // game finished - // // delete everything but the last round - // for (var i = 0; i < Game.rounds.length -1; ++i) { - // var round = Game.rounds[i]; - - // if (round.realMarker) { - // round.realMarker.setMap(null); - // } - // for (var j = 0; j < round.guessMarkers.length; ++j) { - // var guessMarker = round.guessMarkers[j]; - // guessMarker.marker.setMap(null); - // guessMarker.line.setMap(null); - // if (guessMarker.info) { - // guessMarker.info.close(); - // } - // } - // } - - // // Game.rounds = []; - - // for (var i = 0; i < this.response.history.length; ++i) { - // var round = this.response.history[i]; - // Game.rounds[i] = { position: round.position, guessPosition: round.result.guessPosition, realMarker: null, guessMarkers: [] }; - // Game.addPositionToResultMap(true); - // if (round.result.guessPosition) { - // Game.addGuessPositionToResultMap(round.result.guessPosition, null, true); - // } - // Game.scoreSum += round.result.score; - - // for (var j = 0; j < round.allResults.length; ++j) { - // var result = round.allResults[j]; - // if (result.guessPosition) { - // Game.addGuessPositionToResultMap(result.guessPosition, result, true); - // } - // } - // } - - // } - - }, data); }, @@ -995,9 +957,9 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2}); document.getElementById("compass").style.transform = "translateY(-50%) rotate(" + heading + "deg)"; }); - if(roomId !== null) { + if (roomId !== null) { Game.type = GameType.MULTI; - } else if(challengeToken !== null) { + } else if (challengeToken !== null) { Game.type = GameType.CHALLENGE; } diff --git a/src/Controller/GameController.php b/src/Controller/GameController.php index 9585622..a4d0210 100644 --- a/src/Controller/GameController.php +++ b/src/Controller/GameController.php @@ -97,7 +97,7 @@ class GameController } public function getChallenge(): IContent - { + { $challengeToken = $this->request->query('challengeToken'); return new HtmlContent('game', ['challengeToken' => $challengeToken]); @@ -239,8 +239,19 @@ class GameController $challengeToken_str = $this->request->query('challengeToken'); $session = $this->request->session(); $userId = $session->get('userId'); + + if (!isset($userId)) + { + return new JsonContent(['error' => 'anonymous_user']); + } + $challenge = $this->challengeRepository->getByTokenStr($challengeToken_str); + if (!isset($challenge)) + { + return new JsonContent(['error' => 'game_not_found']); + } + if(!$this->userInChallengeRepository->isUserParticipatingInChallenge($userId, $challenge)) { // new player is joining $userInChallenge = new UserInChallenge();