MAPG-235 created error handling for challenge access without login

This commit is contained in:
Balázs Vigh 2021-05-18 19:55:05 +02:00
parent 069c6b37c8
commit 62251b1062
2 changed files with 28 additions and 55 deletions

View File

@ -1,6 +1,6 @@
'use strict'; 'use strict';
const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2}); const GameType = Object.freeze({ 'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2 });
(function () { (function () {
var Game = { var Game = {
@ -215,8 +215,8 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
} }
}, },
getGameIdentifier: function() { getGameIdentifier: function () {
switch(Game.type) { switch (Game.type) {
case GameType.SINGLE: case GameType.SINGLE:
return '/game/' + mapId; return '/game/' + mapId;
case GameType.MULTI: case GameType.MULTI:
@ -303,7 +303,7 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
Game.showSummary(); Game.showSummary();
document.getElementById('continueButton').style.display = 'none'; document.getElementById('continueButton').style.display = 'none';
} else { } else {
Game.panoId = this.response.place.panoId; 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 // TODO: refactor - it is necessary for mobile
if (window.getComputedStyle(document.getElementById('guess')).visibility === 'hidden') { if (window.getComputedStyle(document.getElementById('guess')).visibility === 'hidden') {
document.getElementById('showGuessButton').click(); document.getElementById('showGuessButton').click();
@ -353,7 +353,7 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
}, },
loadHistory: function (history) { loadHistory: function (history) {
if(!history) if (!history)
return; return;
Game.history = history; 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.addGuessPositionToResultMap(round.result.guessPosition, null, true);
} }
Game.scoreSum += round.result.score; Game.scoreSum += round.result.score;
if(round.allResults !== undefined) {
if (round.allResults !== undefined) {
for (var j = 0; j < round.allResults.length; ++j) { for (var j = 0; j < round.allResults.length; ++j) {
var result = round.allResults[j]; var result = round.allResults[j];
if (result.guessPosition) { if (result.guessPosition) {
@ -514,7 +514,11 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
break; break;
case 'game_not_found': 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; break;
default: default:
@ -580,7 +584,7 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
}, },
showResultMap: function (result, resultBounds) { showResultMap: function (result, resultBounds) {
Game.transitToResultMap(); Game.transitToResultMap();
Game.map.fitBounds(resultBounds); Game.map.fitBounds(resultBounds);
@ -637,48 +641,6 @@ const GameType = Object.freeze({'SINGLE': 0, 'MULTI': 1, 'CHALLENGE': 2});
Game.pov = this.response.place.pov; 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); }, 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)"; document.getElementById("compass").style.transform = "translateY(-50%) rotate(" + heading + "deg)";
}); });
if(roomId !== null) { if (roomId !== null) {
Game.type = GameType.MULTI; Game.type = GameType.MULTI;
} else if(challengeToken !== null) { } else if (challengeToken !== null) {
Game.type = GameType.CHALLENGE; Game.type = GameType.CHALLENGE;
} }

View File

@ -97,7 +97,7 @@ class GameController
} }
public function getChallenge(): IContent public function getChallenge(): IContent
{ {
$challengeToken = $this->request->query('challengeToken'); $challengeToken = $this->request->query('challengeToken');
return new HtmlContent('game', ['challengeToken' => $challengeToken]); return new HtmlContent('game', ['challengeToken' => $challengeToken]);
@ -239,8 +239,19 @@ class GameController
$challengeToken_str = $this->request->query('challengeToken'); $challengeToken_str = $this->request->query('challengeToken');
$session = $this->request->session(); $session = $this->request->session();
$userId = $session->get('userId'); $userId = $session->get('userId');
if (!isset($userId))
{
return new JsonContent(['error' => 'anonymous_user']);
}
$challenge = $this->challengeRepository->getByTokenStr($challengeToken_str); $challenge = $this->challengeRepository->getByTokenStr($challengeToken_str);
if (!isset($challenge))
{
return new JsonContent(['error' => 'game_not_found']);
}
if(!$this->userInChallengeRepository->isUserParticipatingInChallenge($userId, $challenge)) { if(!$this->userInChallengeRepository->isUserParticipatingInChallenge($userId, $challenge)) {
// new player is joining // new player is joining
$userInChallenge = new UserInChallenge(); $userInChallenge = new UserInChallenge();