PageRenderTime 76ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/competition.php

http://airscore.googlecode.com/
PHP | 326 lines | 271 code | 39 blank | 16 comment | 23 complexity | 482a74dd066eae12225dcd6e8e84cc19 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 'authorisation.php';
  10. require 'format.php';
  11. $comPk = intval($_REQUEST['comPk']);
  12. adminbar($comPk);
  13. $usePk = auth('system');
  14. $link = db_connect();
  15. $query = "select comName from tblCompetition where comPk=$comPk";
  16. $result = mysql_query($query) or die('Task add failed: ' . mysql_error());
  17. $comName = mysql_result($result,0);
  18. echo "<p><h2><a href=\"comp_result.php?comPk=$comPk\">Competition - $comName</a></h2></p>";
  19. // Add a task
  20. if (array_key_exists('add', $_REQUEST))
  21. {
  22. $Name = addslashes($_REQUEST['taskname']);
  23. $Date = addslashes($_REQUEST['date']);
  24. $TaskStart = addslashes($_REQUEST['taskstart']);
  25. $TaskFinish = addslashes($_REQUEST['taskfinish']);
  26. $StartOpen = addslashes($_REQUEST['starttime']);
  27. $StartClose = addslashes($_REQUEST['startclose']);
  28. $TaskType = addslashes($_REQUEST['tasktype']);
  29. $Interval = intval($_REQUEST['interval']);
  30. $regPk = addslashes($_REQUEST['region']);
  31. $depart = addslashes($_REQUEST['departure']);
  32. $arrival = addslashes($_REQUEST['arrival']);
  33. check_admin('admin',$usePk,$comPk);
  34. $query = "insert into tblTask (comPk, tasName, tasDate, tasTaskStart, tasFinishTime, tasStartTime, tasStartCloseTime, tasSSInterval, tasTaskType, regPk, tasDeparture, tasArrival) values ($comPk, '$Name', '$Date', '$Date $TaskStart', '$Date $TaskFinish', '$Date $StartOpen', '$Date $StartClose', $Interval, '$TaskType', $regPk, '$depart', '$arrival')";
  35. $result = mysql_query($query) or die('Task add failed: ' . mysql_error());
  36. // Get the task we just inserted
  37. $tasPk = mysql_insert_id();
  38. // Now check for pre-submitted tracks ..
  39. // FIX: check for task / track date match!
  40. // $query = "select traPk from tblComTaskTrack where comPk=$comPk and tasPk is null";
  41. $query = "select CTT.traPk from tblComTaskTrack CTT, tblTask T, tblTrack TR, tblCompetition C where CTT.comPk=$comPk and C.comPk=CTT.comPk and T.tasPk=$tasPk and CTT.traPk=TR.traPk and CTT.tasPk is null and TR.traStart > date_sub(T.tasDate, interval C.comTimeOffset hour) and TR.traStart < date_add(T.tasDate, interval (24-C.comTimeOffset) hour)";
  42. $result = mysql_query($query,$link);
  43. $tracks = array();
  44. while($row = mysql_fetch_array($result))
  45. {
  46. $tracks[] = $row['traPk'];
  47. }
  48. if (sizeof($tracks) > 0)
  49. {
  50. // Give them a task number
  51. $sql = "update tblComTaskTrack set tasPk=$tasPk where comPk=$comPk and traPk in (" . implode(",",$tracks) . ")";
  52. $result = mysql_query($sql,$link);
  53. // Now verify the pre-submitted tracks against the task
  54. foreach ($tracks as $tpk)
  55. {
  56. echo "Verifying pre-submitted track: $tpk<br>";
  57. $out = '';
  58. $retv = 0;
  59. exec(BINDIR . "track_verify.pl $tpk", $out, $retv);
  60. }
  61. }
  62. }
  63. // Delete a task
  64. if (array_key_exists('delete', $_REQUEST))
  65. {
  66. $id = intval($_REQUEST['delete']);
  67. check_admin('admin',$usePk,$comPk);
  68. if ($id > 0)
  69. {
  70. $query = "delete from tblTask where tasPk=$id";
  71. $result = mysql_query($query) or die('Task delete failed: ' . mysql_error());
  72. $query = "delete from tblComTaskTrack where tasPk=$id";
  73. $result = mysql_query($query) or die('Task CTT delete failed: ' . mysql_error());
  74. $query = "delete from tblTaskWaypoint where tasPk=$id";
  75. $result = mysql_query($query) or die('Task TW delete failed: ' . mysql_error());
  76. $query = "delete from tblTaskResult where tasPk=$id";
  77. $result = mysql_query($query) or die('Task TR delete failed: ' . mysql_error());
  78. echo "Task Removed\n";
  79. }
  80. else
  81. {
  82. echo "Unable to remove task: $id\n";
  83. }
  84. }
  85. // Update the competition
  86. if (array_key_exists('update', $_REQUEST))
  87. {
  88. check_admin('admin',$usePk,$comPk);
  89. $comname = addslashes($_REQUEST['comname']);
  90. $datefrom = addslashes($_REQUEST['datefrom']);
  91. $dateto = addslashes($_REQUEST['dateto']);
  92. $location = addslashes($_REQUEST['location']);
  93. $director = addslashes($_REQUEST['director']);
  94. $sanction = addslashes($_REQUEST['sanction']);
  95. $comptype = addslashes($_REQUEST['comptype']);
  96. $comcode = addslashes($_REQUEST['code']);
  97. $timeoffset = floatval($_REQUEST['timeoffset']);
  98. $overallscore = addslashes($_REQUEST['overallscore']);
  99. $overallparam = floatval($_REQUEST['overallparam']);
  100. $teamscoring = addslashes($_REQUEST['teamscoring']);
  101. $teamsize = intval($_REQUEST['teamsize']);
  102. $teamover = addslashes($_REQUEST['teamover']);
  103. $compclass = addslashes($_REQUEST['compclass']);
  104. $query = "update tblCompetition set comName='$comname', comLocation='$location', comDateFrom='$datefrom', comDateTo='$dateto', comMeetDirName='$director', comTimeOffset=$timeoffset, comType='$comptype', comCode='$comcode', comOverallScore='$overallscore', comOverallParam=$overallparam, comTeamScoring='$teamscoring', comTeamSize=$teamsize, comTeamOver='$teamover', comClass='$compclass' where comPk=$comPk";
  105. # FIX: re-optimise tracks if change from Free to OLC and vice versa
  106. $result = mysql_query($query) or die('Competition update failed: ' . mysql_error());
  107. }
  108. // Add/update the formula
  109. if (array_key_exists('upformula', $_REQUEST))
  110. {
  111. $forPk = intval($_REQUEST['forPk']) + 0;
  112. $formula = addslashes($_REQUEST['formula']);
  113. $version = addslashes($_REQUEST['version']);
  114. $nomdist = floatval($_REQUEST['nomdist']);
  115. $mindist = floatval($_REQUEST['mindist']);
  116. $nomtime = floatval($_REQUEST['nomtime']);
  117. $nomgoal = floatval($_REQUEST['nomgoal']);
  118. $sspenalty = floatval($_REQUEST['sspenalty']);
  119. $lineardist = floatval($_REQUEST['lineardist']);
  120. $diffdist = floatval($_REQUEST['diffdist']);
  121. $difframp = addslashes($_REQUEST['difframp']);
  122. $diffcalc = addslashes($_REQUEST['diffcalc']);
  123. if ($forPk < 1)
  124. {
  125. $query = "insert into tblFormula (forClass, forVersion, forNomDistance, forMinDistance, forNomTime, forNomGoal, comPk, forLinearDist, forDiffDist, forDiffRamp, forDiffCalc, forGoalSSPenalty) values ('$formula', '$version', $nomdist, $mindist, $nomtime, $nomgoal, $comPk, $lineardist, $diffdist, '$difframp', '$diffcalc', $sspenalty)";
  126. $result = mysql_query($query) or die('Formula addition failed: ' . mysql_error());
  127. $forPk = mysql_insert_id();
  128. #$query = "select max(forPk) from tblFormula";
  129. #$result = mysql_query($query) or die('Cant get max forPk: ' . mysql_error());
  130. #$forPk = mysql_result($result,0,0);
  131. $query = "update tblCompetition set forPk=$forPk where comPk=$comPk";
  132. $result = mysql_query($query) or die('Competition formula addition failed: ' . mysql_error());
  133. }
  134. else
  135. {
  136. $query = "update tblFormula set forClass='$formula', forVersion='$version', forNomDistance=$nomdist, forMinDistance=$mindist, forNomTime=$nomtime, forNomGoal=$nomgoal, forLinearDist=$lineardist, forDiffDist=$diffdist, forDiffRamp='$difframp', forDiffCalc='$diffcalc', forGoalSSPenalty=$sspenalty where comPk=$comPk";
  137. $result = mysql_query($query) or die('Formula update failed: ' . mysql_error());
  138. }
  139. }
  140. $forPk = 0;
  141. $sql = "SELECT T.* FROM tblCompetition T where T.comPk=$comPk";
  142. $result = mysql_query($sql,$link);
  143. $row = mysql_fetch_array($result);
  144. if ($row)
  145. {
  146. echo "<form action=\"competition.php?comPk=$comPk\" name=\"comedit\" method=\"post\">";
  147. $cname = $row['comName'];
  148. $cdfrom = substr($row['comDateFrom'],0,10);
  149. $cdto = substr($row['comDateTo'],0,10);
  150. $cdirector = $row['comMeetDirName'];
  151. $clocation = $row['comLocation'];
  152. $csanction = $row['comSanction'];
  153. $ctimeoffset = $row['comTimeOffset'];
  154. $overallscore = $row['comOverallScore'];
  155. $overallparam = $row['comOverallParam'];
  156. $teamscoring = $row['comTeamScoring'];
  157. $teamover = $row['comTeamOver'];
  158. $teamsize = $row['comTeamSize'];
  159. $ccode = $row['comCode'];
  160. $ctype = $row['comType'];
  161. $forPk = $row['forPk'];
  162. $restricted = $row['comRestricted'];
  163. $cclass = $row['comClass'];
  164. $clocked = $row['comLocked'];
  165. $out = ftable(
  166. array(
  167. array('Name:', fin('comname', $cname, 14), 'Type:', fselect('comptype', $ctype, array('OLC', 'RACE', 'Free', 'Route', 'Team-RACE' )), 'Class:', fselect('compclass', $cclass, array('PG','HG','mixed'))),
  168. array('Date From:', fin('datefrom', $cdfrom, 10), 'Date To:', fin('dateto', $cdto, 10)),
  169. array('Director:', fin('director', $cdirector, 14), 'Location:', fin('location', $clocation, 10)),
  170. array('Abbrev:', fin('code', $ccode, 10), 'Time Offset:', fin('timeoffset', $ctimeoffset, 10)),
  171. array('Scoring:', fselect('overallscore', $overallscore, array('all', 'ftv', 'round', 'round-perc' )), 'Score param:', fin('overallparam', $overallparam, 10)),
  172. array('Team Scoring:', fselect('teamscoring', $teamscoring, array('aggregate', 'team-gap', 'handicap')), 'Team Over:', fselect('teamover', $teamover, array('best', 'selected')), 'Team Size:', fin('teamsize', $teamsize, 4))
  173. ), '', '', ''
  174. );
  175. echo $out;
  176. echo fis('update', 'Update Competition', '');
  177. echo "</form>\n";
  178. }
  179. // Formula
  180. $version = 0;
  181. if ($ctype == 'RACE' || $ctype == 'Team-RACE')
  182. {
  183. $sql = "SELECT F.* FROM tblFormula F where F.comPk=$comPk";
  184. $result = mysql_query($sql,$link);
  185. $row = mysql_fetch_array($result);
  186. if ($row)
  187. {
  188. $class = $row['forClass'];
  189. $version = $row['forVersion'];
  190. $nomdist = $row['forNomDistance'];
  191. $mindist = $row['forMinDistance'];
  192. $nomtime = $row['forNomTime'];
  193. $nomgoal = $row['forNomGoal'];
  194. $sspenalty = $row['forGoalSSpenalty'];
  195. $lineardist = $row['forLinearDist'];
  196. $diffdist = $row['forDiffDist'];
  197. $difframp = $row['forDiffRamp'];
  198. $diffcalc = $row['forDiffCalc'];
  199. }
  200. echo "<hr><h3>RACE Formula</h3>";
  201. echo "<form action=\"competition.php?comPk=$comPk\" name=\"formulaadmin\" method=\"post\">";
  202. $out = ftable(
  203. array(
  204. array('Formula:', fselect('formula', $class, array('gap', 'ozgap', 'pwd', 'sahpa', 'nzl', 'ggap', 'nogap' )), 'Year:', fin('version', $version, 4)),
  205. array('Nom Dist (km):', fin('nomdist',$nomdist,4), 'Min Dist (km):', fin('mindist', $mindist, 4), 'Nom Goal (%):', fin('nomgoal',$nomgoal,4)),
  206. array('Nom Time (min):', fin('nomtime', $nomtime, 4), 'Goal/SS Penalty (0-1):', fin('sspenalty', $sspenalty, 4)),
  207. array('Linear Dist (0-1):', fin('lineardist', $lineardist, 4),'Diff Dist (km):', fin('diffdist', $diffdist, 4), 'Diff Ramp:', fselect('difframp', $difframp, array('fixed', 'flexible')), 'Diff Calc:', fselect('diffcalc', $diffcalc, array('all', 'lo')))
  208. ), '', '', ''
  209. );
  210. echo $out;
  211. echo "<input type=\"hidden\" name=\"forPk\" value=\"$forPk\">";
  212. echo "<input type=\"submit\" name=\"upformula\" value=\"Update Formula\">";
  213. echo "</form>";
  214. }
  215. if ($ctype == 'RACE' || $ctype == 'Team-RACE' || $ctype == 'Route')
  216. {
  217. // Tasks
  218. echo "<hr><h3>Tasks</h3><form action=\"competition.php?comPk=$comPk\" name=\"taskadmin\" method=\"post\">";
  219. echo "<ol>";
  220. $count = 1;
  221. $sql = "SELECT T.*, count(*) as Tadded FROM tblTask T left outer join tblComTaskTrack CTT on CTT.tasPk=T.tasPk where T.comPk=$comPk group by T.tasPk order by T.tasDate";
  222. $result = mysql_query($sql,$link);
  223. while($row = mysql_fetch_array($result))
  224. {
  225. $tasPk = $row['tasPk'];
  226. $tasDate = $row['tasDate'];
  227. $tasName = $row['tasName'];
  228. $tasDistance = $row['tasDistance'];
  229. $tasTaskStart = $row['tasTaskStart'];
  230. $tasStartTime = $row['tasStartTime'];
  231. $tasFinishTime = $row['tasFinishTime'];
  232. $tasResultsType = $row['tasResultsType'];
  233. $tasTaskType = $row['tasTaskType'];
  234. $tasDistance = $row['tasDistance'];
  235. $tasSSDistance = $row['tasSSDistance'];
  236. $tasSSOpen = $row['tasSSOpen'];
  237. $tasSSClose = $row['tasSSClose'];
  238. $tasESClose = $row['tasESClose'];
  239. $tasDistFlown = $row['tasTotalDistanceFlown'];
  240. echo "<li>";
  241. if ($row['Tadded'] < 2)
  242. {
  243. echo "<button type=\"submit\" name=\"delete\" value=\"$tasPk\">del</button>";
  244. }
  245. echo "<a href=\"task.php?comPk=$comPk&tasPk=$tasPk\">$tasName: " . round($tasDistance/1000,1) . " kms on " . $tasDate . " (" . substr($tasTaskStart,11) . " - " . substr($tasFinishTime,11) . ")</a></li>\n";
  246. $count++;
  247. }
  248. echo "</ol>";
  249. $sql = "SELECT * FROM tblRegion R";
  250. $result = mysql_query($sql,$link);
  251. $regions = array();
  252. while ($row = mysql_fetch_array($result))
  253. {
  254. $regPk = $row['regPk'];
  255. $regDesc = $row['regDescription'];
  256. $regions[$regDesc] = $regPk;
  257. }
  258. $sql = "SELECT T.* FROM tblCompetition C, tblTask T where T.comPk=C.comPk and C.comPk=$comPk order by T.tasPk limit 1";
  259. $result = mysql_query($sql,$link);
  260. $defregion = '';
  261. if (mysql_num_rows($result) > 0)
  262. {
  263. $row = mysql_fetch_array($result);
  264. $defregion = $row['regPk'];
  265. }
  266. echo "<hr>";
  267. $depdef = 'on';
  268. if ($version > 2000)
  269. {
  270. $depdef = 'leadout';
  271. }
  272. $out = ftable(
  273. array(
  274. array('Task Name:', fin('taskname', '', 10), 'Date:', fin('date', '', 10)),
  275. array('Region:', fselect('region', $defregion, $regions), 'Task Type:', fselect('tasktype', 'race', array('olc', 'race', 'speedrun', 'speedrun-interval', 'free', 'free-bearing', 'airgain', 'aat'))),
  276. array('Task Start:', fin('taskstart', '', 10), 'Task Finish:', fin('taskfinish', '', 10)),
  277. array('Start Open:', fin('starttime', '', 10), 'Start Close:', fin('startclose', '', 10), 'Gate Interval:', fin('interval', '', 4)),
  278. array('Depart Bonus:', fselect('departure', $depdef, array('on', 'off', 'leadout')), 'Arrival Bonus:', fselect('arrival', 'on', array('on', 'off')))
  279. ), '', '', '');
  280. echo $out;
  281. echo "<input type=\"submit\" name=\"add\" value=\"Add Task\">";
  282. echo "</form>";
  283. }
  284. ?>
  285. </div>
  286. </body>
  287. </html>