/future-stuff/inriktningsval/statistik.php

https://github.com/itpastorn/webbteknik · PHP · 245 lines · 194 code · 21 blank · 30 comment · 10 complexity · 873d73f8949ce35101ef72e6b28651d4 MD5 · raw file

  1. <?php
  2. /*
  3. * Administrera inriktnings- och paketval
  4. *
  5. * Ska presentera 4 tabeller:
  6. * * Grupperad info per paketval oavsett inriktning
  7. * * Grupperad info per inriktning - sorteringsbar
  8. * * Total per kurs oavsett paket/inriktning
  9. * * Total per kurs per paket/inriktning
  10. *
  11. * @author Lars Gunther <gunther@keryx.se>
  12. */
  13. error_reporting(E_ALL);
  14. ini_set("display_errors", "on");
  15. // Inloggad?
  16. session_start();
  17. // "read" = kan se sidan
  18. // "write" = kan bekräfta och ta bort elevers val
  19. // "admin" = kan skapa och ändra privilegier
  20. if ( empty($_SESSION['privilegier']) ) {
  21. header("Location: admin-loginform.php");
  22. exit;
  23. }
  24. // Datumfunktioner
  25. date_default_timezone_set("Europe/Stockholm");
  26. /**
  27. * Databasanslutning
  28. */
  29. require_once("dbcx.php");
  30. $dbh = dbcx();
  31. if ( empty($_GET['year']) ) {
  32. $year = date("Y");
  33. } else {
  34. if ( preg_match("/^2[0-9]{3}$/", $_GET['year']) ) {
  35. $year = (int)$_GET['year'];
  36. } else {
  37. // TODO: Nice error message
  38. exit("<h1>Ogiltigt årtal</h1>");
  39. }
  40. }
  41. // Vilka kurser ingår i paketen?
  42. $sql = <<<SQL
  43. SELECT bk.inr_pak_ID, k.* FROM `kurser` AS k
  44. INNER JOIN block_kurser AS bk
  45. USING (kurskod)
  46. ORDER BY bk.inr_pak_ID
  47. SQL;
  48. $index = "";
  49. $kurser = array();
  50. $stmt = $dbh->query($sql);
  51. foreach ( $stmt as $row ) {
  52. if ( $row['inr_pak_ID'] != $index ) {
  53. $index = $row['inr_pak_ID'];
  54. }
  55. $kurser[$index][] = array($row['kurskod'], $row['kursnamn'], $row['poang']);
  56. }
  57. // Namn på inriktningarna
  58. $inr_names = array();
  59. $stmt = $dbh->query("SELECT inr_pak_ID, name FROM inriktning_paket WHERE name IS NOT NULL");
  60. while ( $dbrow = $stmt->fetch() ) {
  61. $inr_names[$dbrow['inr_pak_ID']] = $dbrow['name'];
  62. }
  63. $t1 = "";
  64. $sql = <<<SQL
  65. SELECT paket1 AS paket, COUNT(*) AS antal FROM elever
  66. WHERE `klass` <> 'Te0F' AND paket1 IS NOT NULL GROUP BY paket1
  67. UNION
  68. SELECT paket2 AS paket, COUNT(*) AS antal FROM elever
  69. WHERE `klass` <> 'Te0F' AND paket2 IS NOT NULL GROUP BY paket2
  70. SQL;
  71. $stmt = $dbh->query($sql);
  72. foreach ( $stmt as $row ) {
  73. // Antal kurser som ingår i paketet
  74. $kant = count($kurser[$row['paket']]);
  75. $firstrun = true;
  76. foreach ( $kurser[$row['paket']] as $kurs ) {
  77. $t1 .= "<tr>\n";
  78. if ( $firstrun ) {
  79. $t1 .= '<td rowspan="' . $kant . '">' . $row['paket'] . "</td>\n";
  80. }
  81. $t1 .= "<td>{$kurs[1]}</td><td>{$kurs[2]}</td>\n";
  82. if ( $firstrun ) {
  83. $t1 .= <<<TR2
  84. <td rowspan="{$kant}">{$row['antal']}</td>
  85. TR2;
  86. $firstrun = false;
  87. }
  88. $t1 .= "</tr>\n";
  89. }
  90. }
  91. // rowspan x 2
  92. $t2 = "";
  93. $sql = <<<SQL
  94. SELECT inriktning, paket1 AS paket, COUNT(*) AS antal FROM elever
  95. WHERE `klass` <> 'Te0F' AND paket1 IS NOT NULL GROUP BY inriktning, paket1
  96. UNION
  97. SELECT inriktning, paket2 AS paket, COUNT(*) AS antal FROM elever
  98. WHERE `klass` <> 'Te0F' AND paket2 IS NOT NULL GROUP BY inriktning, paket2
  99. ORDER BY paket
  100. SQL;
  101. $stmt = $dbh->query($sql);
  102. foreach ( $stmt as $row ) {
  103. $t2 .= <<<TR
  104. <tr>
  105. <td>{$inr_names[$row['inriktning']]}</td>
  106. <td>{$row['paket']}</td>
  107. <td>{$row['antal']}</td>
  108. </tr>
  109. TR;
  110. }
  111. $sql = <<<SQL
  112. SELECT k.*, COUNT(*) AS antal FROM elever AS e
  113. INNER JOIN block_kurser AS bk
  114. ON (e.inriktning = bk.inr_pak_ID OR e.paket1 = bk.inr_pak_ID OR e.paket2 = bk.inr_pak_ID)
  115. INNER JOIN kurser AS k
  116. ON (k.kurskod = bk.kurskod)
  117. WHERE e.klass <> 'Te0F'
  118. GROUP BY k.kurskod ASC
  119. ORDER BY `antal` DESC
  120. SQL;
  121. $t3 = "";
  122. $stmt = $dbh->query($sql);
  123. foreach ( $stmt as $row ) {
  124. $t3 .= <<<TR
  125. <tr>
  126. <td>{$row['kurskod']}</td>
  127. <td>{$row['kursnamn']}</td>
  128. <td>{$row['poang']}</td>
  129. <td>{$row['antal']}</td>
  130. </tr>
  131. TR;
  132. }
  133. $sql = <<<SQL
  134. SELECT bk.inr_pak_ID, k.*, COUNT(*) AS antal FROM elever AS e
  135. INNER JOIN block_kurser AS bk
  136. ON (e.inriktning = bk.inr_pak_ID OR e.paket1 = bk.inr_pak_ID OR e.paket2 = bk.inr_pak_ID)
  137. INNER JOIN kurser AS k
  138. ON (k.kurskod = bk.kurskod)
  139. WHERE e.klass <> 'Te0F'
  140. GROUP BY bk.inr_pak_ID, k.kurskod ASC
  141. ORDER BY kurskod ASC, inr_pak_ID ASC
  142. SQL;
  143. $t4 = "";
  144. $stmt = $dbh->query($sql);
  145. foreach ( $stmt as $row ) {
  146. $t4 .= <<<TR
  147. <tr>
  148. <td>{$row['inr_pak_ID']}</td>
  149. <td>{$row['kurskod']}</td>
  150. <td>{$row['kursnamn']}</td>
  151. <td>{$row['poang']}</td>
  152. <td>{$row['antal']}</td>
  153. </tr>
  154. TR;
  155. }
  156. /*
  157. echo "<pre>";
  158. var_dump($stat);
  159. exit;
  160. */
  161. // Sidmall
  162. ?>
  163. <!DOCTYPE html>
  164. <html lang="sv">
  165. <head>
  166. <meta charset="utf-8" />
  167. <title>Statistik inriktnings- och fördjupningskursval Teknikprogrammet, NE, <?php echo $year; ?></title>
  168. <link href="inr-val.css" rel="stylesheet" />
  169. </head>
  170. <body class="admin">
  171. <h1>Statistik inriktnings- och fördjupningskursval Teknikprogrammet, NE, <?php echo $year; ?></h1>
  172. <table>
  173. <caption>Grupperad info per paketval oavsett inriktning</caption>
  174. <tr>
  175. <th>Paket</th>
  176. <th>Kurs</th>
  177. <th>Poäng</th>
  178. <th>Antal</th>
  179. </tr>
  180. <?php echo $t1; ?>
  181. </table>
  182. <table>
  183. <caption>Grupperad info per inriktning</caption>
  184. <tr>
  185. <th>Inriktning</th>
  186. <th>Paket</th>
  187. <th>Antal</th>
  188. </tr>
  189. <?php echo $t2; ?>
  190. </table>
  191. <table>
  192. <caption>Elever per kurs</caption>
  193. <tr>
  194. <th>Kurskod</th>
  195. <th>kursnamn</th>
  196. <th>Poang</th>
  197. <th>Antal</th>
  198. </tr>
  199. <?php echo $t3; ?>
  200. </table>
  201. <table>
  202. <caption>Elever per inriktning/paket och kurs</caption>
  203. <tr>
  204. <th>Val</th>
  205. <th>Kurskod</th>
  206. <th>kursnamn</th>
  207. <th>Poang</th>
  208. <th>Antal</th>
  209. </tr>
  210. <?php echo $t4; ?>
  211. </table>
  212. </body>
  213. </html>
  214. <!--
  215. Hur göra tabell 4? Nästan som 3
  216. SELECT bk.inr_pak_ID, k.*, COUNT(*) AS antal FROM elever AS e
  217. INNER JOIN block_kurser AS bk
  218. ON (e.inriktning = bk.inr_pak_ID OR e.paket1 = bk.inr_pak_ID OR e.paket2 = bk.inr_pak_ID)
  219. INNER JOIN kurser AS k
  220. ON (k.kurskod = bk.kurskod)
  221. WHERE e.klass <> 'Te0F'
  222. GROUP BY bk.inr_pak_ID, k.kurskod ASC
  223. ORDER BY `kurskod` DESC
  224. -->