OnlineGames.php 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <?php
  2. /* Games.php */
  3. $hostname = 'localhost';
  4. $username = 'narKampen';
  5. $pass = 'IfRLzj2HJBXA9eei';
  6. $database = 'narKampen';
  7. $conn = new mysqli($hostname, $username, $pass, $database);
  8. if (!$conn) {
  9. die("Connection Failed. ". mysqli_connect_error());
  10. }
  11. mysqli_set_charset($conn,'utf8');
  12. $userId = $conn->real_escape_string(isset($_POST['userId'])?$_POST['userId']:"");
  13. $callFunction = $conn->real_escape_string(isset($_POST['f'])?$_POST['f']:"");
  14. $gameId = $conn->real_escape_string(isset($_POST['gameId'])?$_POST['gameId']:"");
  15. $userName = $conn->real_escape_string(isset($_POST['userName'])?$_POST['userName']:"");
  16. $userId = $conn->query("SELECT id FROM users where username = '$userName'")->fetch_assoc()['id'];
  17. if ($callFunction === "list"){
  18. /* OLD SQL
  19. $sql = "SELECT game.*, users.username as playerToAct FROM game " .
  20. "LEFT JOIN users on currentPlayer = users.id " .
  21. "WHERE game.id IN (SELECT gameId FROM gamePlayers WHERE playerId = $userId) " .
  22. "AND game.status != 'FINISHED' ".
  23. "ORDER BY FIELD(PlayerToAct, '$userName') DESC, lastPlayedDate DESC";
  24. */
  25. $sql = "SELECT game.*, users.id as userId, users.username as username, gamePlayers.userLockedQuestions, gamePlayers.status playerStatus, gamePlayers.playerRound FROM game " .
  26. "INNER JOIN gamePlayers ON gamePlayers.gameId = game.id " .
  27. "INNER JOIN users ON users.id = playerId " .
  28. "WHERE game.id IN (SELECT gameId FROM gamePlayers WHERE playerId = $userId) " .
  29. "AND game.status NOT IN ('FINISHED') " .
  30. "ORDER BY FIELD(currentPlayer, $userId) DESC, lastPlayedDate DESC";
  31. $result = $conn->query($sql);
  32. if ($result->num_rows > 0) {
  33. $returnArray = array();
  34. $i = 0;
  35. while ($data = $result->fetch_assoc()) {
  36. foreach ($data as $key => $value) {
  37. $returnArray[$i][$key] = $value;
  38. }
  39. $i++;
  40. }
  41. echo json_encode($returnArray);
  42. } else {
  43. echo "No games found for user";
  44. }
  45. } else if ($callFunction === "decline"){
  46. $sql = "UPDATE gamePlayers SET status = 'DECLINED' WHERE gameId = $gameId AND playerId = (SELECT id from users WHERE username = '$userName')";
  47. $result = $conn->query($sql);
  48. if (!$result) {
  49. echo "UPDATE player status failed " . $conn->error;
  50. } else {
  51. $sql = "SELECT count(*) as c FROM gamePlayers WHERE gameId = $gameId AND status NOT LIKE 'DECLINED'";
  52. $result = $conn->query($sql);
  53. if ($result !== false) {
  54. while ($data = $result->fetch_assoc()) {
  55. if ($data['c'] == 1) { // Alla utom den som startade spelet har nekat, ta bort spelet från game
  56. $sql = "DELETE FROM game WHERE id = $gameId";
  57. $result = $conn->query($sql);
  58. if (!$result) {
  59. echo "UPDATE game status failed " . $conn->error;
  60. }
  61. }
  62. }
  63. }
  64. }
  65. } else if ($callFunction === "accept") {
  66. $sql = "UPDATE gamePlayers SET status = 'ACCEPTED' WHERE gameId = $gameId AND playerId = $userId";
  67. $result = $conn->query($sql);
  68. if (!$result) {
  69. echo $conn->error;
  70. } else {
  71. $sql = "SELECT * FROM gamePlayers WHERE gameId = $gameId";
  72. $result = $conn->query($sql);
  73. $done = true;
  74. $playerIds = array();
  75. while ($data = $result->fetch_assoc()) {
  76. if ($data['status'] != "ACCEPTED") {
  77. $done = false;
  78. } else {
  79. $playerIds[] = $data['playerId'];
  80. }
  81. }
  82. if ($done) {
  83. $sql = "UPDATE game SET status = 'ACTIVE' WHERE id = $gameId";
  84. $result = $conn->query($sql);
  85. if (!$result) {
  86. echo "updating game status active failed " . $conn->error;
  87. }
  88. $questionSql = "SELECT id FROM questions " .
  89. "INNER JOIN questionToCategory ON questionToCategory.questionId = questions.id " .
  90. "WHERE questionToCategory.categoryId IN (SELECT categoryId FROM `gameCategories` where gameId = $gameId) " .
  91. "ORDER BY RAND() " .
  92. "LIMIT 1";
  93. $questionIdResult = $conn->query($questionSql);
  94. $data = $questionIdResult->fetch_assoc();
  95. $values = "";
  96. foreach ($playerIds AS $playerId) {
  97. $values .= "($gameId, $playerId, " . $data['id'] . "),";
  98. }
  99. $values = rtrim($values, ",");
  100. $insertRandomStartQuestion = "INSERT INTO usersLockedQuestions (gameId, playerId, questionId) VALUES $values";
  101. $result = $conn->query($insertRandomStartQuestion);
  102. if (!$result) {
  103. echo "Something wrong with inserting starting question error: " . $conn->error;
  104. }
  105. }
  106. }
  107. } else if ($callFunction === "SetLastPlayed") {
  108. $sql = "UPDATE game SET lastPlayedDate = NOW() WHERE id = $gameId";
  109. $result = $conn->query($sql);
  110. if (!$result) {
  111. echo "Updating lastPlayedDate failed " . $conn->error;
  112. }
  113. } else if ($callFunction === "SetQuestionsLost") {
  114. $questionsLost = $_POST['questionsLost'];
  115. $sql = "UPDATE gamePlayers SET questionsLost = $questionsLost WHERE gameId = $gameId AND playerId = $userId";
  116. $result = $conn->query($sql);
  117. if (!$result) {
  118. echo "Updating questionsLost resulted in error: " . $conn->error;
  119. }
  120. } else if ($callFunction === "DeleteGame") {
  121. $sql = "DELETE FROM game WHERE id = $gameId";
  122. $result = $conn->query($sql);
  123. if (!$result) {
  124. echo "Failed to delete game with id $gameId - error: " . $conn->error;
  125. }
  126. $sql = "DELETE FROM gamePlayers WHERE gameId = $gameId";
  127. $result = $conn->query($sql);
  128. if (!$result) {
  129. echo "Failed to delete gamePlayers with id $gameId - error: " . $conn->error;
  130. }
  131. } else if ($callFunction === "CurrentPlayer") {
  132. $sql = "SELECT username from users WHERE id = (SELECT currentPlayer FROM game WHERE id = $gameId)";
  133. $result = $conn->query($sql);
  134. if (!$result) {
  135. echo "Failed to get current player for game with id $gameId";
  136. } else {
  137. if ($result->num_rows > 0) {
  138. $returnArray = array();
  139. $i = 0;
  140. while ($data = $result->fetch_assoc()) {
  141. $currentPlayer = $data['username'];
  142. }
  143. echo $currentPlayer;
  144. }
  145. }
  146. } else if ($callFunction === "SetCurrentPlayer") {
  147. $currentPlayer = $_POST['userName'];
  148. $sql = "UPDATE game SET currentPlayer = $userId WHERE id = $gameId";
  149. $result = $conn->query($sql);
  150. if (!$result) {
  151. echo "Failed to update current player for game with id $gameId - error: " . $conn->error;
  152. }
  153. } else if ($callFunction === "GetPlayerPoints") {
  154. $sql = "SELECT userLockedQuestions FROM game WHERE gameId = $gameId AND playerId = $userId";
  155. $result = $conn->query($sql);
  156. $data = $result->fetch_assoc();
  157. echo $data['userLockedQuestions'];
  158. } else if ($callFunction === "SetFinishedDate") {
  159. $finishedDate = $_POST['finishedDate'];
  160. $sql = "UPDATE game SET finishedDate = '$finishedDate' WHERE id = $gameId";
  161. $result = $conn->query($sql);
  162. if (!$result) {
  163. echo "Failed to update current player for game with id $gameId - error: " . $conn->error;
  164. }
  165. } else if ($callFunction === "SetRound") {
  166. $round = $_POST['round'];
  167. $sql = "UPDATE game SET round = '$round' WHERE id = $gameId";
  168. $result = $conn->query($sql);
  169. if (!$result) {
  170. echo "Failed to update current player for game with id $gameId - error: " . $conn->error;
  171. }
  172. } else if ($callFunction === "SetPlayerRound") {
  173. $player = $_POST['player'];
  174. $sql = "UPDATE gamePlayers SET playerRound = playerRound + 1 WHERE playerId = (Select id FROM users WHERE username = '" . $player . "' AND gameId = $gameId";
  175. $conn->query($sql);
  176. } else if ($callFunction === "GetRound") {
  177. $sql = "SELECT round FROM game WHERE id = $gameId";
  178. $result = $conn->query($sql);
  179. $data = $result->fetch_assoc();
  180. echo $data['round'];
  181. } else if ($callFunction === "GetPlayers") {
  182. $sql = "SELECT username, userLockedQuestions, playerRound FROM gamePlayers INNER JOIN users ON users.id = gamePlayers.playerId WHERE gameId = $gameId";
  183. $result = $conn->query($sql);
  184. $returnArray = array();
  185. $i = 0;
  186. while ($data = $result->fetch_assoc()) {
  187. foreach ($data as $key => $value) {
  188. $returnArray[$i][$key] = $value;
  189. }
  190. $i++;
  191. }
  192. echo json_encode($returnArray);
  193. } else if ($callFunction === "GetQuestionsLost") {
  194. $userName = $conn->real_escape_string($_POST['userName']);
  195. $sql = "SELECT questionsLost FROM gamePlayers WHERE gameId = $gameId AND playerId = $userId";
  196. $result = $conn->query($sql);
  197. $data = $result->fetch_assoc();
  198. echo $data['questionsLost'];
  199. } else if ($callFunction === "GetWinCondition") {
  200. $sql = "SELECT winNumber FROM game WHERE id = $gameId";
  201. $result = $conn->query($sql);
  202. $data = $result->fetch_assoc();
  203. echo $data['winNumber'];
  204. } else if ($callFunction === "SavePlayerQuestions") {
  205. $userName = $conn->real_escape_string($_POST['userName']);
  206. $questionIds = $conn->real_escape_string($_POST['questionsToSave']);
  207. $questionIdArray = explode(",",$questionIds);
  208. $values = "";
  209. foreach($questionIdArray as $qId) {
  210. $values .= "($userId, $qId, $gameId),";
  211. }
  212. $values = rtrim($values, ',');
  213. $sql = "INSERT INTO usersLockedQuestions (playerId, questionId, gameId) VALUES $values ON DUPLICATE KEY UPDATE playerId = '$userId', gameId = $gameId";
  214. $result = $conn->query($sql);
  215. if (!$result) {
  216. echo "ERROR while svaing player questions for game $gameId and player $userName, id $userId with error " . $conn->error . " from sql $sql";
  217. }
  218. $sql = "UPDATE gamePlayers SET userLockedQuestions = (SELECT count(*) FROM usersLockedQuestions WHERE gameId = $gameId AND playerId = '$userId') WHERE playerId = (SELECT id FROM users WHERE username = '$userName' AND gameId = $gameId)";
  219. $conn->query($sql);
  220. } else if ($callFunction === "UpdatePlayerToken") {
  221. $messageToken = $_POST['token'];
  222. $userId = $_POST['userId'];
  223. $updateTokenSql = "UPDATE users SET messageToken = '$messageToken' WHERE id = " . $userId;
  224. $conn->query($updateTokenSql);
  225. } else if ($callFunction === "GameFinished") {
  226. $setFinishedStatusSql = "UPDATE game SET status = 'FINISHED' WHERE id = $gameId";
  227. $conn->query($setFinishedStatusSql);
  228. }
  229. $conn->close();
  230. ?>