OnlineGames.php 9.3 KB

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