PageRenderTime 50ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/admin/approvals_col.php

https://github.com/xmarcosx/enroll
PHP | 377 lines | 365 code | 1 blank | 11 comment | 32 complexity | 76537596c19231413866d40b505f4b30 MD5 | raw file
  1. <?php
  2. session_start();
  3. //Credentials aren't legit or user isn't an admin, kick back to login screen
  4. if (!isset($_SESSION['username']) ||
  5. $_SESSION['login']!=true ||
  6. $_SESSION['admin']!=true) {
  7. header("Location: ../login.html");
  8. }
  9. include_once 'settings.php';
  10. //Connects to MySQL and Selects Database
  11. $con = mysql_connect($host,$db_username,$db_password);
  12. if (!$con)
  13. die('Could not connect: ' . mysql_error());
  14. //Select DB
  15. mysql_select_db($db, $con);
  16. //Get selected semester from URL
  17. $selected_semester=$_GET['semester'];
  18. //Get list of classrooms
  19. $get_classrooms_result=mysql_query(
  20. "SELECT rooms FROM settings LIMIT 1") or die(mysql_error());
  21. $get_classrooms_array=mysql_fetch_array($get_classrooms_result);
  22. $classrooms=explode(",",$get_classrooms_array['rooms']);
  23. //Get colloquium assignments for selected date
  24. $col_assignments_result=mysql_query(
  25. "SELECT users.lastname, users.firstname, assignments.id, assignments.final, courses.name,
  26. assignments.class_size, assignments.room, courses.preferred_lunch_block, assignments.colloquium_lunch_block AS lunch_block, assignments.colloquium_duration AS duration,
  27. courses.preferred_class_size, courses.preferred_room, assignments.notes, courses.description, assignments.secondary_teacher_id
  28. FROM `users`
  29. INNER JOIN `courses` on users.id=courses.teacher_id
  30. INNER JOIN `assignments` on courses.id=assignments.course_id
  31. WHERE assignments.colloquium_semester=$selected_semester AND courses.type='colloquium'
  32. ORDER BY users.lastname") or die(mysql_error());
  33. //Lunch Block Breakdown
  34. $num_finalized_courses=0;
  35. $num_lunch_block_a=0;
  36. $num_lunch_block_b=0;
  37. $num_lunch_block_c=0;
  38. $num_lunch_block_d=0;
  39. $temp=null;
  40. //Traverse colloquium assignments, remove rooms from classrooms array that are already assigned to a finalized colloquium
  41. while ($row=mysql_fetch_array($col_assignments_result)) {
  42. //If assignment is finalized
  43. if($row['final']){
  44. unset( $classrooms[ array_search($row['room'], $classrooms) ] );
  45. $num_finalized_courses++;
  46. switch ($row['lunch_block']){
  47. case 'A':
  48. $num_lunch_block_a++;
  49. break;
  50. case "B":
  51. $num_lunch_block_b++;
  52. break;
  53. case "C":
  54. $num_lunch_block_c++;
  55. break;
  56. case "D":
  57. $num_lunch_block_d++;
  58. break;
  59. }
  60. }
  61. }
  62. //Calculate total seats offered
  63. $col_seats=0;
  64. $col_seats_result=mysql_query("SELECT class_size FROM assignments WHERE colloquium_semester=$selected_semester AND final=1") or die(mysql_error());
  65. while ($row=mysql_fetch_array($col_seats_result)) {
  66. $col_seats+=$row['class_size'];
  67. }
  68. //Ghost usernames
  69. $ghost_usernames=array();
  70. $get_ghost_usernames=mysql_query(
  71. "SELECT id,firstname,lastname,username FROM users WHERE role='teacher' OR role='student'") or die(mysql_error());
  72. while($row=mysql_fetch_array($get_ghost_usernames)){
  73. $ghost_usernames[]="\"" . $row['username'] . "\"";
  74. }
  75. mysql_close();
  76. ?>
  77. <!DOCTYPE html>
  78. <html lang='en'>
  79. <head>
  80. <meta charset='utf-8'>
  81. <title>Enroll: <?php echo $school_name; ?></title>
  82. <meta name='viewport' content='width=device-width, initial-scale=1.0'>
  83. <meta name='description' content="Flexible Scheduling for Today's Classroom">
  84. <meta name='author' content='Marcos Alcozer'>
  85. <meta name='keywords' content='Education, Scheduling'>
  86. <!-- CSS -->
  87. <style>
  88. body {
  89. padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
  90. }
  91. </style>
  92. <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet">
  93. <link href="../css/admin.css" rel="stylesheet">
  94. <!-- JQUERY -->
  95. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  96. <!-- BOOTSTRAP -->
  97. <script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
  98. <!-- AJAX UPLOAD BY BRYAN GENTRY -->
  99. <!-- http://bryangentry.us/ajax-upload-with-javascript-and-php-upload-an-image-and-display-a-preview/ -->
  100. <script src="../js/ajaxupload.js"></script>
  101. <!-- FORM VALIDATION USING JQUERY -->
  102. <!-- http://alittlecode.com/jquery-form-validation-with-styles-from-twitter-bootstrap/ -->
  103. <!-- <script src="../js/jquery.validate.min.js"></script> -->
  104. <!-- <script src="../js/validate.js"></script> -->
  105. <!-- INHOUSE JAVASCRIPT -->
  106. <script src="../js/admin.js"></script>
  107. <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
  108. <!--[if lt IE 9]>
  109. <script src="../js/html5shiv.js"></script>
  110. <![endif]-->
  111. </head>
  112. <body>
  113. <?php include_once("analyticstracking.php") ?>
  114. <div class="navbar navbar-inverse navbar-fixed-top">
  115. <div class="navbar-inner">
  116. <div class="container">
  117. <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
  118. <span class="icon-bar"></span>
  119. <span class="icon-bar"></span>
  120. <span class="icon-bar"></span>
  121. </button>
  122. <a class="brand appname" href="#">Enroll<img src='../img/beta-icon.png' style="vertical-align:text-top;"/></a>
  123. <div class="nav-collapse collapse">
  124. <ul class="nav">
  125. <li><a href="index.php">Dashboard</a></li>
  126. <li class="dropdown active">
  127. <a href="#" class="dropdown-toggle" data-toggle="dropdown">Approvals <b class="caret"></b></a>
  128. <ul class="dropdown-menu">
  129. <li><a href='approvals_xy.php'>XY</a></li>
  130. <li class="dropdown-submenu">
  131. <a tabindex="-1" href="#">Colloquium</a>
  132. <ul class="dropdown-menu">
  133. <li><a href='approvals_col.php?semester=1'>Semester 1</a></li>
  134. <li><a href='approvals_col.php?semester=2'>Semester 2</a></li>
  135. </ul>
  136. </li>
  137. </ul>
  138. </li>
  139. <li class="dropdown">
  140. <a href="#" class="dropdown-toggle" data-toggle="dropdown">Enrollments <b class="caret"></b></a>
  141. <ul class="dropdown-menu">
  142. <li><a href='enroll_xy.php'>XY</a></li>
  143. <li class="dropdown-submenu">
  144. <a tabindex="-1" href="#">Colloquium</a>
  145. <ul class="dropdown-menu">
  146. <li><a href='enroll_col.php?semester=1'>Semester 1</a></li>
  147. <li><a href='enroll_col.php?semester=2'>Semester 2</a></li>
  148. </ul>
  149. </li>
  150. </ul>
  151. </li>
  152. <li class="dropdown">
  153. <a href="#" class="dropdown-toggle" data-toggle="dropdown">Activity <b class="caret"></b></a>
  154. <ul class="dropdown-menu">
  155. <li><a href='activity_xy.php'>XY</a></li>
  156. <li><a href='activity_col.php'>Colloquium</a></li>
  157. </ul>
  158. </li>
  159. <?php if($_SESSION['teacher']){
  160. echo "<li><a href='../teacher/agenda.php'>My Courses</a></li>";
  161. }?>
  162. <li><a href="options.php">Settings</a></li>
  163. </ul>
  164. <ul class="nav pull-right">
  165. <li>
  166. <form id="ghostuserform" class="navbar-form pull-right">
  167. <input class="span2 search-query" name="username" type="text"
  168. data-provide="typeahead" autocomplete="off" placeholder="Login as..."
  169. data-source='[<?php echo implode(',',$ghost_usernames); ?>]' />
  170. </form>
  171. </li>
  172. <?php
  173. if(!isset($_SESSION['username']))
  174. echo "<li class='login-button'><a href='../login.html' style='color:#FFFFFF'>Login</a></li>";
  175. else
  176. echo "<li class='login-button'><a href='../logout.php' style='color:#FFFFFF'>Logout</a></li>";
  177. ?>
  178. </ul>
  179. </div><!--/.nav-collapse -->
  180. </div>
  181. </div>
  182. </div>
  183. <div class='container'>
  184. <h1>
  185. <?php
  186. echo "Semester " . $selected_semester;
  187. ?>
  188. </h1>
  189. <hr />
  190. <div id='main' role='main'>
  191. <div class="span4">
  192. Lunch Block A:
  193. <span class="tooltip" data-toggle="tooltip" data-placement="left"
  194. title="<?php echo $num_lunch_block_a/$num_finalized_courses*100; ?>%">Tooltip</span>
  195. <div class="progress progress-striped active progress-info">
  196. <div class="bar" style="width: <?php echo $num_lunch_block_a/$num_finalized_courses*100; ?>%;"></div>
  197. </div>
  198. Lunch Block B:
  199. <span class="tooltip" data-toggle="tooltip" data-placement="left"
  200. title="<?php echo $num_lunch_block_b/$num_finalized_courses*100; ?>%">Tooltip</span>
  201. <div class="progress progress-striped active progress-info">
  202. <div class="bar" style="width: <?php echo $num_lunch_block_b/$num_finalized_courses*100; ?>%;"></div>
  203. </div>
  204. Lunch Block C:
  205. <span class="tooltip" data-toggle="tooltip" data-placement="left"
  206. title="<?php echo $num_lunch_block_c/$num_finalized_courses*100; ?>%">Tooltip</span>
  207. <div class="progress progress-striped active progress-info">
  208. <div class="bar" style="width: <?php echo $num_lunch_block_c/$num_finalized_courses*100; ?>%;"></div>
  209. </div>
  210. Lunch Block D:
  211. <span class="tooltip" data-toggle="tooltip" data-placement="left"
  212. title="<?php echo $num_lunch_block_d/$num_finalized_courses*100; ?>%">Tooltip</span>
  213. <div class="progress progress-striped active progress-info">
  214. <div class="bar" style="width: <?php echo $num_lunch_block_d/$num_finalized_courses*100; ?>%;"></div>
  215. </div>
  216. </div>
  217. <p class="lead pull-right">
  218. <?php echo $col_seats; ?> seats assigned.
  219. </p>
  220. <table class="table table-striped table-hover">
  221. <thead>
  222. <tr>
  223. <th>Teacher</th>
  224. <th>Co-Teacher</th>
  225. <th>Colloquium</th>
  226. <th>Duration</th>
  227. <th>Preferred Class Size</th>
  228. <th>Class Size</th>
  229. <th>Preferred Room</th>
  230. <th>Room</th>
  231. <th>Preferred Lunch Block</th>
  232. <th>Lunch Block</th>
  233. <th>Notes</th>
  234. <th></th>
  235. </tr>
  236. </thead>
  237. <tbody>
  238. <?php
  239. mysql_data_seek($col_assignments_result,0);
  240. while ($row=mysql_fetch_array($col_assignments_result)) {
  241. $seats_assigned=0;
  242. ?>
  243. <?php
  244. echo "<tr>";
  245. if(!$row['final']){
  246. echo "<form action='finalize.php' method='post'>";
  247. }
  248. else{
  249. echo "<form id='unfinalize" . $row['id'] . "' action='unfinalize.php' method='post'>";
  250. }
  251. echo "<input name='id' type='hidden' value='" . $row['id'] . "' />";
  252. echo "<input name='type' type='hidden' value='colloquium' />";
  253. echo "<input name='semester' type='hidden' value=$selected_semester />";
  254. echo "<input id='keepstudents" . $row['id'] . "' name='keepstudents' type='hidden' value=1 />";
  255. ?>
  256. <?php
  257. echo "<td>" . $row['lastname'] . ", " . $row['firstname'] . "</td>";
  258. if(isset($row['secondary_teacher_id'])){
  259. mysql_data_seek($get_ghost_usernames, 0);
  260. while($secondary_teacher=mysql_fetch_array($get_ghost_usernames)){
  261. if($row['secondary_teacher_id']==$secondary_teacher['id']){
  262. echo "<td>" . $secondary_teacher['lastname'] . ", " . $secondary_teacher['firstname'] . "</td>";
  263. }
  264. }
  265. }
  266. else{
  267. echo "<td></td>";
  268. }
  269. echo "<td><span class='tooltip' data-toggle='tooltip' data-placement='top' title='" . $row['description'] . "'>Tooltip</span>";
  270. echo $row['name'] . "</td>";
  271. echo "<td>";
  272. if(strcmp($row['duration'],'s')==0)
  273. echo "Semester";
  274. else
  275. echo "Year";
  276. echo "</td>";
  277. echo "<td>" . $row['preferred_class_size'] . "</td>";
  278. if(!$row['final']){
  279. if($row['class_size']!=0)
  280. echo "<td><input class='input-mini' name='class_size' type='number' maxlength='4' value='" . $row['class_size'] . "' required /></td>";
  281. else
  282. echo "<td><input class='input-mini' name='class_size' type='number' maxlength='4' value='" . $row['preferred_class_size'] . "' required /></td>";
  283. }
  284. else{
  285. echo "<td>" . $row['class_size'] . "</td>";
  286. }
  287. echo "<td>" . $row['preferred_room'] . "</td>";
  288. if(!$row['final']){
  289. echo "<td><select class='input-medium' name='room' required>";
  290. if(!is_null($row['room'])){
  291. foreach($classrooms as $room){
  292. echo "<option ";
  293. if(strcmp($room,$row['room'])==0) echo ' selected ';
  294. echo " value='$room'>$room</option>";
  295. }
  296. }
  297. else{
  298. foreach($classrooms as $room){
  299. echo "<option ";
  300. if(strcmp($room,$row['preferred_room'])==0) echo ' selected ';
  301. echo " value='$room'>$room</option>";
  302. }
  303. }
  304. echo "</select></td>";
  305. }
  306. else{
  307. echo "<td>" . $row['room'] . "</td>";
  308. }
  309. echo "<td>" . $row['preferred_lunch_block'] . "</td>";
  310. if(!$row['final']){
  311. if(!is_null($row['lunch_block'])){ ?>
  312. <td>
  313. <select class='input-mini' name='lunch_block' required>
  314. <option value=''></option>
  315. <option <?php if(strcmp($row['lunch_block'],'A')==0) echo ' selected '; ?> value='A'>A</option>
  316. <option <?php if(strcmp($row['lunch_block'],'B')==0) echo ' selected '; ?> value='B'>B</option>
  317. <option <?php if(strcmp($row['lunch_block'],'C')==0) echo ' selected '; ?> value='C'>C</option>
  318. <option <?php if(strcmp($row['lunch_block'],'D')==0) echo ' selected '; ?> value='D'>D</option>
  319. </select>
  320. </td>
  321. <?php } else{ ?>
  322. <td>
  323. <select class='input-mini' name='lunch_block' required>
  324. <option value=''></option>
  325. <option <?php if(strcmp($row['preferred_lunch_block'],'A')==0) echo ' selected '; ?> value='A'>A</option>
  326. <option <?php if(strcmp($row['preferred_lunch_block'],'B')==0) echo ' selected '; ?> value='B'>B</option>
  327. <option <?php if(strcmp($row['preferred_lunch_block'],'C')==0) echo ' selected '; ?> value='C'>C</option>
  328. <option <?php if(strcmp($row['preferred_lunch_block'],'D')==0) echo ' selected '; ?> value='D'>D</option>
  329. </select>
  330. </td>
  331. <?php
  332. }}
  333. else{
  334. echo "<td>" . $row['lunch_block'] . "</td>";
  335. }
  336. echo "<td>";
  337. if(strcmp($row['notes'],"")!=0){ ?>
  338. <a href="#" class="tooltip" title="<?php echo $row['notes']; ?>" >Note</a>Note
  339. <?php }
  340. echo "</td>";
  341. if(!$row['final']){
  342. echo "<td><button class='btn btn-medium btn-warning' type='submit'>Finalize</button></td>";
  343. }
  344. else{
  345. ?>
  346. <!-- Modal -->
  347. <div id="<?php echo $row['id']; ?>" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  348. <div class="modal-header">
  349. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
  350. <h3 id="myModalLabel">Unfinalize Course</h3>
  351. </div>
  352. <div class="modal-body">
  353. <p>If there are already students enrolled in this course, what should happen to the current enrollments?</p>
  354. </div>
  355. <div class="modal-footer">
  356. <button id="<?php echo $row['id']; ?>" class="btn btn-warning unenroll_students" type='submit'>Unenroll Students</button>
  357. <button class="btn btn-primary" type='submit'>Keep Enrollments</button>
  358. </div>
  359. </div>
  360. <?php
  361. echo "<td><button class='btn btn-medium btn-success unfinalize_button' data-toggle='modal' data-target='#" . $row['id'] . "'>Unfinalize</button></td>";
  362. }
  363. echo "</form>";
  364. echo "</tr>";
  365. }
  366. ?>
  367. </tbody>
  368. </table>
  369. </div>
  370. </div> <!-- /container -->
  371. </body>
  372. </html>