snippets.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. <?php
  2. ini_set('display_errors', 1);
  3. ini_set('display_startup_errors', 1);
  4. error_reporting(E_ALL);
  5. // This file contains HTML snippets for the several possible forms
  6. $pdo = null;
  7. try {
  8. $pdo = new PDO("sqlite:" . "${db_path}/slork.sqlite");
  9. } catch (PDOException $e) {
  10. // handle the exception here
  11. }
  12. $snippets = [];
  13. if ( $screen == 0 ) {
  14. // Select all maintainers
  15. $query = <<<QUERY
  16. SELECT maintainer.maintainer, player.value
  17. FROM maintainer
  18. JOIN player ON maintainer.maintainer = player.player
  19. WHERE player.property = 'name';
  20. QUERY;
  21. $all_maintainers = [];
  22. $rows = $pdo->query($query);
  23. if ( $rows ) {
  24. foreach ($rows as $row) {
  25. $all_maintainers[$row['maintainer']] = $row['value'];
  26. }
  27. }
  28. print( "<pre>" );
  29. print_r( $all_maintainers );
  30. print( "</pre>" );
  31. $snippets[0] = <<<HTML
  32. <form>
  33. <!-- This form adds a new maintainer -->
  34. <div class="form-group">
  35. <label for="newAPIKey">Add a new maintainer ...</label>
  36. <input type="hidden" name="action" value="i">
  37. <input type="password" class="form-control" name="api" id="newAPIKey" aria-describedby="newAPIKey" placeholder="Enter API key">
  38. <small id="newAPIKey" class="form-text text-muted">Assuming you are new here, add your Torn API key</small>
  39. </div>
  40. <button type="submit" class="btn btn-primary">Submit</button>
  41. </form>
  42. <div><p>&nbsp;</p><hr><p>&nbsp;</p></div>
  43. <!-- This part selects an existing maintainer -->
  44. <form>
  45. <div class="form-group">
  46. <label for="existingMaintainer">... or select an existing maintainer</label>
  47. <input type="hidden" name="action" value="m">
  48. <select class="form-control" name="maintainer" id="existingMaintainer">
  49. <option></option><!-- Empty option -->
  50. HTML;
  51. foreach ($all_maintainers as $maintainer_key => $maintainer_value) {
  52. $snippets[0] .= "\t\t\t\t<option value=\"$maintainer_key\">$maintainer_value [$maintainer_key]</option>\n";
  53. }
  54. $snippets[0] .= <<<HTML
  55. </select>
  56. </div>
  57. <button type="submit" class="btn btn-primary">Submit</button>
  58. </form>
  59. HTML;
  60. }
  61. if ( $screen == 2 ) {
  62. // New player
  63. $snippets[2] = <<<HTML
  64. <form id="player-new">
  65. <div class="form-group">
  66. <label for="player-new">Add new player ...</label>
  67. <input type="hidden" name="maintainer" value="$maintainer[0]" form="player-new">
  68. <input type="number" name="player" form="player-new">
  69. <button class="btn btn-primary" name="action" value="p" form="player-new">New</button>
  70. </div>
  71. </form>
  72. <div>
  73. <p>&nbsp;</p><hr><p>&nbsp;</p>
  74. </div>
  75. HTML;
  76. // Let maintainer select (or delete) a player
  77. $query = <<<SQL
  78. SELECT player, value FROM player
  79. WHERE maintainer = ?
  80. AND property = 'name'
  81. -- AND player != ?
  82. ;
  83. SQL;
  84. $stmt = $pdo->prepare($query);
  85. $stmt->execute( [$maintainer[0]] );
  86. $rows = $stmt->fetchAll();
  87. /*
  88. print("<pre>");
  89. print( "\$rows:\n" );
  90. print_r($rows);
  91. print("</pre>");
  92. */
  93. $players_id = array();
  94. foreach ($rows as $row) {
  95. $players_id[] = array($row['player'], $row['value'] . " [" . $row['player'] . "]");
  96. }
  97. $snippets[2] .= "... or edit existing player";
  98. foreach ($players_id as $player) {
  99. $snippets[2] .= <<<HTML
  100. <div>
  101. <form id="player_edit_${player[0]}">
  102. <ul class="list-group list-group-flush">
  103. HTML;
  104. $snippets[2] .= "\n\t\t\t\t\t\t<li class=\"w-100 p-3 list-group-item\">$player[1]";
  105. $snippets[2] .= "<input type=\"hidden\" name=\"player\" value=\"$player[0]\" form=\"player_edit_${player[0]}\"></td><td>";
  106. $snippets[2] .= "<input type=\"hidden\" name=\"maintainer\" value=\"$maintainer[0]\" form=\"player_edit_${player[0]}\">";
  107. $snippets[2] .= "<button class=\"btn btn-primary float-right btn-sm\" name=\"action\" value=\"e\" form=\"player_edit_${player[0]}\">Edit</button>";
  108. $snippets[2] .= "<button class=\"btn btn-danger float-right btn-sm\" name=\"action\" value=\"r\" form=\"player_edit_${player[0]}\">Remove</button>\n\t\t\t\t\t</li>";
  109. $snippets[2] .= <<<HTML
  110. \n </ul>
  111. </form>
  112. </div>
  113. HTML;
  114. }
  115. $snippets[2] .= <<<HTML
  116. <div>
  117. <p>&nbsp;</p>
  118. <a href="./index.php"><button class="btn btn-info">Ready</button></a>
  119. </div>
  120. HTML;
  121. }
  122. if ( $screen == 3 ) {
  123. // Edit properties of player
  124. // Provided is $_REQUEST['player']
  125. // $maintainer[id, 'name'] is also available in this section
  126. $player = $_REQUEST['player'];
  127. $query = <<<QUERY
  128. SELECT player_properties.property, player.value
  129. FROM player_properties
  130. JOIN player ON player_properties.player = player.player
  131. WHERE player_properties.player = ?
  132. AND player_properties.maintainer = ?
  133. AND player.property = 'name';
  134. QUERY;
  135. $stmt = $pdo->prepare( $query );
  136. $stmt->execute( [$player, $maintainer[0]] );
  137. //$rows = $stmt->fetchAll();
  138. $player_properties = [];
  139. $name = '?';
  140. foreach ($stmt as $key => $value) {
  141. // @TODO This is one row now since we store it in a JSON string
  142. /*
  143. print( "<pre>" );
  144. print( "[\$key, \$value]" );
  145. print_r( [$key, $value] );
  146. print( "</pre>" );
  147. */
  148. $player_properties[] = json_decode( $value['property'] );
  149. if ($key == 'name') {
  150. $name = $value['value'];
  151. }
  152. }
  153. $query = <<<QUERY
  154. SELECT property, parent FROM properties;
  155. QUERY;
  156. $stmt = $pdo->query( $query );
  157. $properties = [];
  158. foreach ($stmt as $row) {
  159. $properties[] = $row['property'];
  160. }
  161. $snippets[3] = '';
  162. /*
  163. print("<pre>");
  164. print_r($player_properties);
  165. print_r($properties);
  166. print_r( [$player, $maintainer[0]] );
  167. print("</pre>\n");
  168. */
  169. $snippets[3] = <<<HTML
  170. <!--
  171. <div>
  172. <p>&nbsp;</p>
  173. <hr>
  174. <p>&nbsp;</p>
  175. </div>
  176. -->
  177. <form id="player-edit">
  178. <div class="form-group">
  179. <label for="player-edit">Select properties for player ${name} [${player}]</label>
  180. <select class="selectpicker" multiple form="player-edit" name="properties[]">
  181. <option>ALL</option>
  182. <option>NONE</option>
  183. HTML;
  184. $snippets[3] .= "\n";
  185. /*
  186. print("<pre>" );
  187. print("\$player_properties:\n");
  188. print_r( $player_properties );
  189. print( "</pre>" );
  190. */
  191. foreach ( $properties as $property ) {
  192. $selected = '';
  193. if ( in_array( $property, $player_properties[0] ) ) {
  194. $selected = ' selected';
  195. }
  196. $snippets[3] .= "\t\t\t\t<option${selected}>${property}</option>\n";
  197. };
  198. $snippets[3] .= <<<HTML
  199. </select>
  200. <input type="hidden" name="action" value="s">
  201. <input type="hidden" name="maintainer" value="${maintainer[0]}">
  202. <input type="hidden" name="player" value="${player}">
  203. </div>
  204. <button class="btn-save btn btn-primary btn-sm">Save</button>
  205. </form>
  206. <div>
  207. <p>&nbsp;</p>
  208. <a href="./index.php?action=m&maintainer=${maintainer[0]}"><button class="btn btn-info">Ready</button></a>
  209. </div>
  210. HTML;
  211. }
  212. if ($screen == 4) {
  213. $query = <<<QUERY
  214. "SELECT value FROM player WHERE maintainer = ? AND player = ? AND property = 'name';
  215. QUERY;
  216. $stmt = $pdo->prepare($query);
  217. $player = $_REQUEST['player'];
  218. $maintainer = $_REQUEST['maintainer'];
  219. $stmt->execute( [$maintainer, $player] );
  220. $row = $stmt->fetchAll()[0];
  221. $snippets[4] = <<<HTML
  222. <form id="player_delete_${player}">
  223. <label for="player_delete_${player}">Are you sure you want to delete ${row['value']} ${player}?</label>
  224. <input type="hidden" name="player" value="$player" form="player_delete_${player}"></td><td>
  225. <input type="hidden" name="maintainer" value="$maintainer" form="player_delete_${player}">
  226. <button class="btn btn-danger float-right btn-sm" name="action" value="x" form="player_delete_${player}">Remove</button>\n\t\t\t\t\t</li>
  227. </form>
  228. <div>
  229. <p>&nbsp;</p>
  230. <a href="./index.php?action=m&maintainer=${maintainer}"><button class="btn btn-info">Ready</button></a>
  231. </div>
  232. HTML;
  233. }