PageRenderTime 27ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/task.php

http://airscore.googlecode.com/
PHP | 429 lines | 358 code | 50 blank | 21 comment | 43 complexity | 479771b41d62f5fcfe25d6ebdd0d70f1 MD5 | raw file
Possible License(s): GPL-2.0
  1. <html>
  2. <head>
  3. <link HREF="xcstyle.css" REL="stylesheet" TYPE="text/css">
  4. </head>
  5. <body>
  6. <div id="container">
  7. <div id="vhead"><h1>airScore admin</h1></div>
  8. <?php
  9. require_once 'authorisation.php';
  10. require_once 'format.php';
  11. function waypoint($link,$tasPk, $tawPk, $num, $waypt, $type, $how, $shape, $radius)
  12. {
  13. echo "<input type=\"text\" name=\"number$tawPk\" value=\"$num\" size=2>";
  14. echo "Way ";
  15. waypoint_select($link, $tasPk, "waypoint$tawPk", $waypt);
  16. echo "Type ";
  17. output_select("waytype$tawPk", $type, array('waypoint', 'start', 'speed', 'endspeed', 'goal'));
  18. echo "How ";
  19. output_select("how$tawPk", $how, array('entry', 'exit'));
  20. echo "Shape ";
  21. output_select("shape$tawPk", $shape, array('circle', 'semicircle', 'line'));
  22. echo "Size <input type=\"text\" name=\"radius$tawPk\" size=6 value=\"$radius\">";
  23. }
  24. function update_task($link,$tasPk, $old)
  25. {
  26. $out = '';
  27. $retv = 0;
  28. // Get the old values
  29. $oldstart = $old['tasStartTime'];
  30. $oldclose = $old['tasStartCloseTime'];
  31. $oldfinish = $old['tasFinishTime'];
  32. $oldtype = $old['tasTaskType'];
  33. $sql = "select T.*, TW.* from tblTask T left outer join tblTaskWaypoint TW on T.tasPk=TW.tasPk and TW.tawType='goal' where T.tasPk=$tasPk";
  34. $result = mysql_query($sql,$link)
  35. or die('Task not associated correctly with a competition: ' . mysql_error());
  36. $row = mysql_fetch_array($result);
  37. # we should re-verify all tracks if start/finish changed!
  38. $newstart = $row['tasStartTime'];
  39. $newclose = $row['tasStartCloseTime'];
  40. $newfinish = $row['tasFinishTime'];
  41. $newtype = $row['tasTaskType'];
  42. $goal = $row['tawType'];
  43. # FIX: how about Free-bearing?
  44. if ($oldtype == 'OLC' && $newtype == 'Free')
  45. {
  46. $out = '';
  47. $retv = 0;
  48. exec(BINDIR . "task_up.pl $tasPk 0", $out, $retv);
  49. }
  50. elseif ($oldtype == 'Free' && $newtype == 'OLC')
  51. {
  52. $out = '';
  53. $retv = 0;
  54. exec(BINDIR . "task_up.pl $tasPk 3", $out, $retv);
  55. }
  56. elseif ($goal == 'goal' && ($newstart != $oldstart or $newfinish != $oldfinish or $oldtype != $newtype or $oldclose != $newclose))
  57. {
  58. $out = '';
  59. $retv = 0;
  60. exec(BINDIR . "task_up.pl $tasPk", $out, $retv);
  61. }
  62. }
  63. function update_tracks($link,$tasPk)
  64. {
  65. // Now check for pre-submitted tracks ..
  66. $query = "select traPk from tblComTaskTrack where tasPk=$tasPk";
  67. $result = mysql_query($query,$link);
  68. $tracks = array();
  69. while($row = mysql_fetch_array($result))
  70. {
  71. $tracks[] = $row['traPk'];
  72. }
  73. if (sizeof($tracks) > 0)
  74. {
  75. // Now verify the pre-submitted tracks against the task
  76. foreach ($tracks as $tpk)
  77. {
  78. #echo "Verifying effected track: $tpk<br>";
  79. $out = '';
  80. $retv = 0;
  81. exec(BINDIR . "track_verify.pl $tpk", $out, $retv);
  82. }
  83. }
  84. }
  85. $usePk = auth('system');
  86. $link = db_connect();
  87. $tasPk = intval($_REQUEST['tasPk']);
  88. $query = "select comPk from tblTask where tasPk=$tasPk";
  89. $result = mysql_query($query) or die('Task not associated with a competition: ' . mysql_error());
  90. $comPk = mysql_result($result,0,0);
  91. adminbar($comPk);
  92. $link = db_connect();
  93. if (array_key_exists('airspace', $_REQUEST))
  94. {
  95. check_admin('admin',$usePk,$comPk);
  96. $out = '';
  97. $retv = 0;
  98. exec(BINDIR . "airspace_check.pl $tasPk", $out, $retv);
  99. foreach ($out as $row)
  100. {
  101. echo $row . "<br>";
  102. }
  103. }
  104. if (array_key_exists('addair', $_REQUEST))
  105. {
  106. check_admin('admin',$usePk,$comPk);
  107. $airPk = intval($_REQUEST['airnew']);
  108. $query = "insert into tblTaskAirspace (tasPk, airPk) values ($tasPk, $airPk)";
  109. $result = mysql_query($query) or die('Failed to connect airspace to task ' . mysql_error());
  110. }
  111. if (array_key_exists('airdel', $_REQUEST))
  112. {
  113. $taPk = intval($_REQUEST['airnew']);
  114. if ($taPk > 0)
  115. {
  116. $query = "delete from tblTaskAirspace where taPk=$taPk";
  117. $result = mysql_query($query) or die('Failed to delete airspace association ' . mysql_error());
  118. }
  119. }
  120. // Update the task itself
  121. if (array_key_exists('updatetask', $_REQUEST))
  122. {
  123. #$tasPk = intval($_REQUEST['updatetask']);
  124. check_admin('admin',$usePk,$comPk);
  125. $query = "select tasStartTime, tasStartCloseTime, tasFinishTime, tasTaskType from tblTask where tasPk=$tasPk";
  126. $result = mysql_query($query)
  127. or die('Task not associated with a competition: ' . mysql_error());
  128. $old = mysql_fetch_array($result);
  129. $Name = addslashes($_REQUEST['taskname']);
  130. $Date = addslashes($_REQUEST['date']);
  131. // Task Start/Finish
  132. $TaskStart = addslashes($_REQUEST['taskstart']);
  133. if (strlen($TaskStart) < 10)
  134. {
  135. $TaskStart = $Date . ' ' . $TaskStart;
  136. }
  137. $FinishTime = addslashes($_REQUEST['taskfinish']);
  138. if (strlen($FinishTime) < 10)
  139. {
  140. $FinishTime = $Date . ' ' . $FinishTime;
  141. }
  142. // FIX: Launch Close
  143. // Start gate open/close
  144. $StartTime = addslashes($_REQUEST['starttime']);
  145. if (strlen($StartTime) < 10)
  146. {
  147. $StartTime = $Date . ' ' . $StartTime;
  148. }
  149. $StartClose = addslashes($_REQUEST['startclose']);
  150. if (strlen($StartClose) < 10)
  151. {
  152. $StartClose = $Date . ' ' . $StartClose;
  153. }
  154. $TaskType = addslashes($_REQUEST['tasktype']);
  155. $Interval = intval($_REQUEST['interval']);
  156. $regPk = addslashes($_REQUEST['region']);
  157. $departure = addslashes($_REQUEST['departure']);
  158. $arrival = addslashes($_REQUEST['arrival']);
  159. $query = "update tblTask set tasName='$Name', tasDate='$Date', tasTaskStart='$TaskStart', tasStartTime='$StartTime', tasStartCloseTime='$StartClose', tasFinishTime='$FinishTime', tasTaskType='$TaskType', regPk=$regPk, tasSSInterval=$Interval, tasDeparture='$departure', tasArrival='$arrival' where tasPk=$tasPk";
  160. $result = mysql_query($query) or die('Task add failed: ' . mysql_error());
  161. update_task($link, $tasPk, $old);
  162. #update_tracks($link,$tasPk);
  163. }
  164. $query = "select C.comPk, C.comName, T.* from tblCompetition C, tblTask T where T.tasPk=$tasPk and T.comPk=C.comPk";
  165. $result = mysql_query($query) or die('Task select failed: ' . mysql_error());
  166. $row = mysql_fetch_array($result);
  167. if ($row)
  168. {
  169. $comName = $row['comName'];
  170. $comPk = $row['comPk'];
  171. $tasName = $row['tasName'];
  172. $tasDate = $row['tasDate'];
  173. $tasTaskType = $row['tasTaskType'];
  174. if ($tasDate == substr($row['tasStartTime'], 0, 10))
  175. {
  176. $tasTaskStart = substr($row['tasTaskStart'], 11);
  177. }
  178. else
  179. {
  180. $tasTaskStart = $row['tasTaskStart'];
  181. }
  182. if ($tasDate == substr($row['tasFinishTime'], 0, 10))
  183. {
  184. $tasTaskFinish = substr($row['tasFinishTime'], 11);
  185. }
  186. else
  187. {
  188. $tasTaskFinish = $row['tasFinishTime'];
  189. }
  190. $tasStartTime = substr($row['tasStartTime'], 11);
  191. $tasStartCloseTime = substr($row['tasStartCloseTime'], 11);
  192. $tasSSInterval = $row['tasSSInterval'];
  193. $tasDeparture = $row['tasDeparture'];
  194. $tasArrival = $row['tasArrival'];
  195. $regPk = $row['regPk'];
  196. }
  197. echo "<p><h2><a href=\"task_result.php?comPk=$comPk&tasPk=$tasPk\">$comName - $tasName ($tasDate)</a></h2></p>";
  198. // Manage waypoints for task ..
  199. if (array_key_exists('add', $_REQUEST))
  200. {
  201. check_admin('admin',$usePk,$comPk);
  202. $waynum = addslashes($_REQUEST['number']);
  203. $waytype = addslashes($_REQUEST['waytype']);
  204. $how = addslashes($_REQUEST['how']);
  205. $shape = addslashes($_REQUEST['shape']);
  206. $radius = addslashes($_REQUEST['radius']);
  207. $rwppk = addslashes($_REQUEST['waypoint']);
  208. if ($waynum == '')
  209. {
  210. $sql = "SELECT max(tawNumber) as maxNum FROM tblTaskWaypoint where tasPk=$tasPk";
  211. $result = mysql_query($sql,$link);
  212. $row = mysql_fetch_array($result);
  213. $waynum = 1 + $row['maxNum'];
  214. }
  215. $query = "insert into tblTaskWaypoint (tasPk, rwpPk, tawNumber, tawType, tawHow, tawShape, tawTime, tawRadius) values ($tasPk, $rwppk, $waynum, '$waytype', '$how', '$shape', '$waytime', $radius)";
  216. //echo "$query <br>";
  217. $result = mysql_query($query) or die('Add Task waypoint failed: ' . mysql_error());
  218. // update tasDistance ...
  219. $old = array();
  220. update_task($link, $tasPk, $old);
  221. }
  222. if (array_key_exists('delete', $_REQUEST))
  223. {
  224. check_admin('admin',$usePk,$comPk);
  225. $tawPk = intval($_REQUEST['delete']);
  226. $query = "delete from tblTaskWaypoint where tawPk=$tawPk";
  227. $out = '';
  228. $retv = 0;
  229. exec(BINDIR . "task_up.pl $tasPk", $out, $retv);
  230. $result = mysql_query($query) or die('Delete TaskWaypoint failed: ' . mysql_error());
  231. }
  232. if (array_key_exists('update', $_REQUEST))
  233. {
  234. check_admin('admin',$usePk,$comPk);
  235. $tawPk = intval($_REQUEST['update']);
  236. $waypt = addslashes($_REQUEST["waypoint$tawPk"]);
  237. $waynum = addslashes($_REQUEST["number$tawPk"]);
  238. $waytype = addslashes($_REQUEST["waytype$tawPk"]);
  239. $how = addslashes($_REQUEST["how$tawPk"]);
  240. $shape = addslashes($_REQUEST["shape$tawPk"]);
  241. $radius = addslashes($_REQUEST["radius$tawPk"]);
  242. $query = "update tblTaskWaypoint set tawNumber=$waynum, rwpPk=$waypt, tawType='$waytype', tawHow='$how', tawShape='$shape', tawRadius=$radius where tawPk=$tawPk";
  243. //echo "$query <br>";
  244. $result = mysql_query($query) or die('Update TaskWaypoint failed: ' . mysql_error());
  245. $out = '';
  246. $retv = 0;
  247. exec(BINDIR . "task_up.pl $tasPk", $out, $retv);
  248. if (array_key_exists('debug', $_REQUEST))
  249. {
  250. foreach ($out as $row)
  251. {
  252. echo $row . "<br>";
  253. }
  254. }
  255. }
  256. $tasktypes = array (
  257. 'olc' => 'olc',
  258. 'RACE' => 'race',
  259. 'speedrun' => 'speedrun',
  260. 'speedrun-interval' => 'speedrun-interval',
  261. 'free' => 'free',
  262. 'free-bearing' => 'free-bearing',
  263. 'airgain' => 'airgain',
  264. 'aat' => 'aat'
  265. );
  266. echo "<form action=\"task.php?tasPk=$tasPk\" name=\"taskadmin\" method=\"post\">";
  267. echo "<p><table>";
  268. echo "<tr><td>Name:</td><td><input type=\"text\" name=\"taskname\" value=\"$tasName\" size=10></td>";
  269. echo "<td>Date:</td><td><input type=\"text\" name=\"date\" value=\"$tasDate\" size=10></td></tr>";
  270. echo "<tr><td>Region:</td><td>";
  271. $regarr = array();
  272. $sql = "SELECT * FROM tblRegion R";
  273. $result = mysql_query($sql,$link);
  274. while ($row = mysql_fetch_array($result))
  275. {
  276. $regDesc = $row['regDescription'];
  277. $regarr["$regDesc"] = $row['regPk'];
  278. }
  279. output_select('region', $regPk, $regarr);
  280. echo "</td>";
  281. echo "<td>Task Type:</td><td>";
  282. output_select('tasktype', $tasTaskType, $tasktypes);
  283. echo "</td></tr>";
  284. echo "<tr><td>Task Start:</td><td><input type=\"text\" name=\"taskstart\" value=\"$tasTaskStart\" size=10></td>";
  285. echo "<td>Task Finish:</td><td><input type=\"text\" name=\"taskfinish\" value=\"$tasTaskFinish\" size=10></td>";
  286. echo "</tr>";
  287. echo "<tr><td>Start Open:</td><td><input type=\"text\" name=\"starttime\" value=\"$tasStartTime\" size=10></td>";
  288. echo "<td>Start Close:</td><td><input type=\"text\" name=\"startclose\" value=\"$tasStartCloseTime\" size=10></td>";
  289. echo "<td>Gate Interval(s):</td><td><input type=\"text\" name=\"interval\" value=\"$tasSSInterval\" size=3></td>";
  290. echo "</tr>";
  291. echo "<tr><td>Depart Bonus:</td><td>";
  292. output_select('departure', $tasDeparture, array( 'on', 'off', 'leadout' ));
  293. echo "</td>";
  294. echo "<td>Arrival Bonus:</td><td>";
  295. output_select('arrival', $tasArrival, array( 'on', 'off' ));
  296. echo "</td></tr></table>";
  297. echo "<button type=\"submit\" name=\"updatetask\" value=\"$tasPk\">Update Task</button>";
  298. echo "<hr>";
  299. // Ok - output the waypoints nicely
  300. $count = 1;
  301. $goal = 0;
  302. $sql = "select T.*, RW.* from tblTaskWaypoint T, tblRegionWaypoint RW where T.tasPk=$tasPk and RW.rwpPk=T.rwpPk order by T.tawNumber";
  303. $result = mysql_query($sql,$link) or die('Task Waypoint Selection failed: ' . mysql_error());
  304. while ($row = mysql_fetch_array($result))
  305. {
  306. $tawPk = $row['tawPk'];
  307. $number = $row['tawNumber'];
  308. $name = $row['rwpName'];
  309. $rwpPk = $row['rwpPk'];
  310. $wtype = $row['tawType'];
  311. $how = $row['tawHow'];
  312. $shape = $row['tawShape'];
  313. $radius = $row['tawRadius'];
  314. //echo "<button type=\"submit\" name=\"update\" value=\"$tawPk\">up</button>";
  315. echo "<button type=\"submit\" name=\"update\" value=\"$tawPk\">up</button>";
  316. waypoint($link,$tasPk,$tawPk,$number,$rwpPk,$wtype,$how,$shape,$radius);
  317. echo "<button type=\"submit\" name=\"delete\" value=\"$tawPk\">del</button>";
  318. echo "<br>\n";
  319. if ($wtype == 'goal')
  320. {
  321. $goal = 1;
  322. }
  323. $count++;
  324. }
  325. $sql = "select tasDistance from tblTask where tasPk=$tasPk";
  326. $result = mysql_query($sql,$link) or die('Can\'t determine task distance: ' . mysql_error());
  327. $dist = round(floatval(mysql_result($result, 0, 0))/1000,2);
  328. echo "<p><b>Total distance: $dist kms</b><br>";
  329. if ($goal == 0 && $count > 0)
  330. {
  331. echo "<i>Warning: task has no goal, it will not score correctly.</i><br>\n";
  332. }
  333. echo "<br>";
  334. echo fis('add', 'Add Waypoint', '');
  335. waypoint($link,$tasPk,'','','','waypoint','entry','circle','400');
  336. echo "</form>";
  337. echo "<br><hr>";
  338. echo "<form action=\"task_result.php?comPk=$comPk&tasPk=$tasPk\" name=\"taskscore\" method=\"post\">";
  339. echo fis('score', 'Score Task', '');
  340. echo "</form>";
  341. echo "<form action=\"team_task_result.php?comPk=$comPk&tasPk=$tasPk\" name=\"taskscore\" method=\"post\">";
  342. echo fis('score', 'Team Score', '');
  343. echo "</form>";
  344. echo "<hr>";
  345. echo "<form action=\"task.php?tasPk=$tasPk\" name=\"taskadmin\" method=\"post\">";
  346. // List all associated airspace
  347. $airarr = array();
  348. $query = "select TA.*, A.* from tblTaskAirspace TA, tblAirspace A where TA.tasPk=$tasPk and A.airPk=TA.airPk";
  349. $result = mysql_query($query) or die('TaskAirspace select failed: ' . mysql_error());
  350. while ($row = mysql_fetch_array($result))
  351. {
  352. $taPk = $row['taPk'];
  353. echo "Class: " . $row['airClass'] . " (from: " . $row['airBase'] . "m to: " . $row['airTops'] . "m) -- " . $row['airName'];
  354. echo "<button type=\"submit\" name=\"airdel\" value=\"$taPk\">del</button><br>";
  355. }
  356. // in future limit to "nearby" airspace ..
  357. $airarr = array();
  358. $query = "select * from tblAirspace order by airName";
  359. $result = mysql_query($query) or die('Task select failed: ' . mysql_error());
  360. while ($row = mysql_fetch_array($result))
  361. {
  362. $airarr[$row['airName']] = $row['airPk'];
  363. }
  364. //output_select("air$airPk", $how, array('entry', 'exit'));
  365. $sel = fselect('airnew', '', $airarr);
  366. echo $sel;
  367. echo fis('addair', 'Add Airspace', '');
  368. echo "<br><br>";
  369. echo fis('airspace', 'Airspace Check', '');
  370. echo "</form>";
  371. echo "<hr>Bulk tracklog uploads, should be a zip file containing multiple tracks (in top directory) named: FAINum_LastName_etc.igc<br>";
  372. echo "<form enctype=\"multipart/form-data\" action=\"bulk_submit.php?tasPk=$tasPk&comPk=$comPk\" method=\"post\">";
  373. ?>
  374. <input type="hidden" name="MAX_FILE_SIZE" value="1000000000">
  375. <input name="userfile" type="file">
  376. <input type="submit" name="foo" value="Send Tracklog"></form>
  377. </div>
  378. </body>
  379. </html>