PageRenderTime 60ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/www/records/chapterMinutes.php

https://github.com/parkeroth/kansasdelts
PHP | 405 lines | 287 code | 72 blank | 46 comment | 50 complexity | a4f8d1bb549210d1e81c84708c3a7ad6 MD5 | raw file
  1. <?
  2. session_start();
  3. $authUsers = array('admin', 'secretary', 'pres', 'vpInternal', 'vpExternal');
  4. include_once($_SERVER['DOCUMENT_ROOT'].'/core/authenticate.php');
  5. require_once 'classes/Chapter_Attendance.php';
  6. require_once 'classes/Minutes.php';
  7. require_once 'classes/Meeting.php';
  8. require_once $_SERVER['DOCUMENT_ROOT'].'/core/classes/Member.php';
  9. require_once $_SERVER['DOCUMENT_ROOT'].'/core/classes/Position.php';
  10. function haz_quorum($present, $total){
  11. $num_needed = ceil($total / 2) + 1;
  12. return $present >= $num_needed;
  13. }
  14. $super_list = array('admin', 'secretary', 'pres');
  15. $haz_super_powers = $session->isAuth($super_list);
  16. $meeting_manager = new Meeting_Manager();
  17. $report_manager = new ReportManager();
  18. $position_manager = new Position_Manager();
  19. $minutes_manager = new Minutes_Manager();
  20. if($_SERVER['REQUEST_METHOD'] == "POST") {
  21. $chapter_id = $_POST['id'];
  22. $chapter_meeting = new Meeting($chapter_id);
  23. $previous_meeting = $meeting_manager->get_previous_meeting($chapter_meeting->id);
  24. $exec_meeting = $meeting_manager->get_meetings_by_chapter($chapter_meeting->id, 'exec');
  25. $internal_meeting = $meeting_manager->get_meetings_by_chapter($chapter_meeting->id, 'internal');
  26. $external_meeting = $meeting_manager->get_meetings_by_chapter($chapter_meeting->id, 'external');
  27. $prev_minutes = $minutes_manager->get_by_meeting($previous_meeting->id);
  28. $minutes = $minutes_manager->get_by_meeting($chapter_id);
  29. $needs_insert = false;
  30. if($minutes == NULL){
  31. $minutes = new Minutes();
  32. $needs_insert = true;
  33. }
  34. $minutes->meeting_id = $chapter_id;
  35. $minutes->presiding_officer_id = $_POST[officer];
  36. $minutes->start_time = $_POST[start_time];
  37. $minutes->end_time = $_POST[end_time];
  38. $minutes->new_business = addslashes($_POST['new-business']);
  39. $minutes->unfinished_business = addslashes($_POST['unfinished-business']);
  40. $minutes->good_of_order = addslashes($_POST['good-of-order']);
  41. if($needs_insert){
  42. $minutes->insert();
  43. } else {
  44. $minutes->save();
  45. }
  46. $exec_list = $position_manager->get_positions_by_board('exec');
  47. foreach($exec_list as $exec_position){
  48. $report_list = $report_manager->get_reports_by_meeting($exec_meeting->id, $exec_position->id);
  49. $report = $report_list[0];
  50. $report->agenda = $_POST[$exec_position->type];
  51. $report->save();
  52. /*if($exec_position->type != 'pres' && in_array($exec_position->type, Meeting::$PRESIDING_OFFICERS)){
  53. // Get the board the person oversees
  54. $board = array_search($exec_position->type, Meeting::$PRESIDING_OFFICERS);
  55. $admin_list = $position_manager->get_positions_by_board($board);
  56. foreach($admin_list as $admin_position){
  57. $admin_meeting = ${$board.'_meeting'};
  58. $report_list = $report_manager->get_reports_by_meeting($admin_meeting->id, $admin_position->id);
  59. $report = $report_list[0];
  60. $report->agenda = $_POST[$admin_position->type];
  61. $report->save();
  62. }
  63. }*/
  64. }
  65. if($prev_minutes != NULL){
  66. $prev_minutes->unfinished_business = $_POST['old-business'];
  67. $prev_minutes->save();
  68. }
  69. $_GET[id] = $chapter_id;
  70. header('location: manageChapter.php');
  71. }
  72. $meeting_id = $_GET[id];
  73. $action = $_GET[action];
  74. // Check for authorized to edit
  75. if($action == 'edit' && !$haz_super_powers){
  76. header('location: ../error.php?page=unauthorized');
  77. }
  78. $member_manager = new Member_Manager();
  79. $member_list = $member_manager->get_all_members();
  80. $chapter_meeting = new Meeting($meeting_id);
  81. $previous_meeting = $meeting_manager->get_previous_meeting($chapter_meeting->id);
  82. $exec_meeting = $meeting_manager->get_meetings_by_chapter($chapter_meeting->id, 'exec');
  83. $internal_meeting = $meeting_manager->get_meetings_by_chapter($chapter_meeting->id, 'internal');
  84. $external_meeting = $meeting_manager->get_meetings_by_chapter($chapter_meeting->id, 'external');
  85. if($exec_meeting == NULL || $internal_meeting == NULL || $external_meeting == NULL)
  86. header('location: ../error.php?page=board-assign');
  87. $minutes_manager = new Minutes_Manager();
  88. $current_minutes = $minutes_manager->get_by_meeting($meeting_id);
  89. $attendance_manager = new Chapter_Attendance_Manager();
  90. $number_absent = $attendance_manager->get_total_by_meeting($meeting_id, 'absent');
  91. $number_excused = $attendance_manager->get_total_by_meeting($meeting_id, 'excused');
  92. $number_present = count($member_list) - $number_absent - $number_excused;
  93. $voting_absent = $attendance_manager->get_total_by_meeting($meeting_id, 'absent', true);
  94. $voting_excused = $attendance_manager->get_total_by_meeting($meeting_id, 'excused', true);
  95. $voting_total = $member_manager->get_total_voting() - 1;
  96. $voting_present = $voting_total - $voting_absent - $voting_excused;
  97. $haz_quorum = haz_quorum($voting_present, $voting_total);
  98. include_once($_SERVER['DOCUMENT_ROOT']."/includes/headerFirst.php"); ?>
  99. <style>
  100. .execPosition {
  101. font-weight: bold;
  102. color: #DDAB26;
  103. padding-left: 50px;
  104. }
  105. .adminSection {
  106. padding: 20px;
  107. }
  108. .adminPosition {
  109. font-weight: bold;
  110. color: #DDAB26;
  111. padding-left: 50px;
  112. }
  113. .agenda-heading{
  114. font-weight: bold;
  115. color: #DDAB26;
  116. }
  117. .report {
  118. padding: 10px;
  119. padding-left: 60px;
  120. }
  121. </style>
  122. <script type="text/javascript" src="../../js/jquery-1.4.2.min.js"></script>
  123. <script language="JavaScript" type="text/JavaScript">
  124. function pad(number, length) {
  125. var str = '' + number;
  126. while (str.length < length) {
  127. str = '0' + str;
  128. }
  129. return str;
  130. }
  131. function date_string(date){
  132. var str = '';
  133. var year = date.getFullYear();
  134. var month = pad(date.getMonth()+1, 2);
  135. var day = pad(date.getDate(), 2);
  136. var hour = pad(date.getHours(), 2);
  137. var minutes = pad(date.getMinutes(), 2);
  138. var seconds = pad(date.getSeconds(), 2);
  139. str = year + '-' + month + '-' + day;
  140. str = str + ' ' + hour + ':' + minutes + ':' + seconds;
  141. return str;
  142. }
  143. var submitFormOkay = false;
  144. function submitted() {
  145. submitFormOkay = true;
  146. }
  147. $(document).ready(function() {
  148. // Fill start time with current time string
  149. $("#start_button").click(function() {
  150. var now = new Date();
  151. $("#start_time").val(date_string(now));
  152. });
  153. // Fill end time with current time string
  154. $("#end_button").click(function() {
  155. var now = new Date();
  156. $("#end_time").val(date_string(now));
  157. });
  158. // Load all initial field values
  159. $(':input').each(function() {
  160. $(this).data('initialValue', $(this).val());
  161. });
  162. // Check for dirty fields on navigate away
  163. window.onbeforeunload = function(){
  164. var msg = 'You haven\'t saved your changes.';
  165. var isDirty = false;
  166. $(':input').each(function () {
  167. if($(this).data('initialValue') != $(this).val()){
  168. isDirty = true;
  169. }
  170. });
  171. if(isDirty == true && !submitFormOkay){
  172. return msg;
  173. }
  174. };
  175. });
  176. </script>
  177. <?php include_once($_SERVER['DOCUMENT_ROOT']."/includes/headerLast.php"); ?>
  178. <h1>Chapter Minutes - <?php echo date('M j, Y', strtotime($chapter_meeting->date)); ?></h1>
  179. <?php if($action == 'edit'){ ?>
  180. <form id="minutes" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" onsubmit="submitted()">
  181. <?php } ?>
  182. <table>
  183. <tr>
  184. <th>Attendance:</th>
  185. <td>Present: <strong><?php echo $number_present; ?></strong> Absent: <strong><?php echo $number_absent; ?></strong> Excused: <strong><?php echo $number_excused; ?></strong>
  186. | <a href="attendanceRecords.php">View Records</a></td>
  187. </tr>
  188. <tr>
  189. <th>Voting Members:</th>
  190. <td>Present: <strong><?php echo $voting_present; ?></strong> Total: <strong><?php echo $voting_total; ?></strong></td>
  191. </tr>
  192. <tr>
  193. <th>Quorum:</th>
  194. <td><?php if($haz_quorum){echo 'Yes';} else {echo 'No';} ?></td>
  195. </tr>
  196. <tr>
  197. <th>Presiding Officer:</th>
  198. <td>
  199. <select name="officer">
  200. <?php
  201. $slug = Meeting::$PRESIDING_OFFICERS[$meeting->type];
  202. $position = new Position(NULL, $slug);
  203. echo $position->id;
  204. foreach($member_list as $member){
  205. if($member->is_position($position->id)){
  206. $selected = "selected";
  207. } else {
  208. $selected = "";
  209. }
  210. echo "<option value=\"$member->id\" $selected>$member->first_name $member->last_name</option>";
  211. }
  212. ?>
  213. </select>
  214. </td>
  215. </tr>
  216. <tr>
  217. <th>Start Time:</th>
  218. <td>
  219. <input id="start_time" name="start_time" type="text" value="<?php echo $minutes->start_time; ?>">
  220. <input id="start_button" type="button" value="Now" />
  221. </td>
  222. </tr>
  223. <tr>
  224. <th>End Time:</th>
  225. <td>
  226. <input id="end_time" name="end_time" type="text" value="<?php echo $minutes->end_time; ?>">
  227. <input id="end_button" type="button" value="Now" />
  228. </td>
  229. </tr>
  230. </table>
  231. <h2>Officer Reports</h2>
  232. <?php
  233. $exec_list = $position_manager->get_positions_by_board('exec');
  234. foreach($exec_list as $exec_position){
  235. $officer = $exec_position->get_current_member_id();
  236. $report_list = $report_manager->get_reports_by_meeting($exec_meeting->id, $exec_position->id);
  237. $report = $report_list[0];
  238. echo '<span class="execPosition">'.$exec_position->title.': </span>';
  239. echo $officer->first_name.' '.$officer->last_name.'<br>'; //TODO: show all names not just the first
  240. echo '<div class="report">';
  241. if($action == 'edit'){
  242. echo '<textarea name="'.$exec_position->type.'" cols="44" rows="5">'.$report->agenda.'</textarea>';
  243. } else {
  244. if($report->agenda){
  245. echo $report->agenda;
  246. } else {
  247. echo 'Proud to be Delt.';
  248. }
  249. }
  250. /*
  251. if($exec_position->type != 'pres' && in_array($exec_position->type, Meeting::$PRESIDING_OFFICERS)){
  252. // Get the board the person oversees
  253. $board = array_search($exec_position->type, Meeting::$PRESIDING_OFFICERS);
  254. $admin_list = $position_manager->get_positions_by_board($board);
  255. echo '<div class="adminSection">';
  256. foreach($admin_list as $admin_position){
  257. $officer = $admin_position->get_current_member_id();
  258. $admin_meeting = ${$board.'_meeting'};
  259. $report_list = $report_manager->get_reports_by_meeting($admin_meeting->id, $admin_position->id);
  260. $report = $report_list[0];
  261. echo '<span class="adminPosition">'.$admin_position->title.': </span>';
  262. echo $officer->first_name.' '.$officer->last_name.'<br>'; //TODO: show all names not just the first
  263. echo '<div class="report">';
  264. if($action == 'edit'){
  265. echo '<textarea name="'.$admin_position->type.'" cols="40" rows="5">'.$report->agenda.'</textarea>';
  266. } else {
  267. if($report->agenda){
  268. echo $report->agenda;
  269. } else {
  270. echo 'Proud to be Delt.';
  271. }
  272. }
  273. echo '</div>';
  274. }
  275. echo '</div>';
  276. }*/
  277. echo '</div>';
  278. }
  279. ?>
  280. <h2>Meeting Notes</h2>
  281. <?php
  282. if($previous_meeting != NULL){
  283. $previous_minutes = $minutes_manager->get_by_meeting($previous_meeting->id);
  284. echo '<span class="execPosition">Old Business: </span>';
  285. echo '<div class="report">';
  286. if($action == 'edit'){
  287. echo '<textarea name="old-business" cols="44" rows="10">';
  288. echo $previous_minutes->unfinished_business;
  289. echo '</textarea>';
  290. } else {
  291. echo $previous_minutes->unfinished_business;
  292. }
  293. echo '</div>';
  294. }
  295. echo '<span class="execPosition">New Business: </span>';
  296. echo '<div class="report">';
  297. if($action == 'edit'){
  298. echo '<textarea name="new-business" cols="44" rows="10">';
  299. echo $current_minutes->new_business;
  300. echo '</textarea>';
  301. } else {
  302. echo $current_minutes->new_business;
  303. }
  304. echo '</div>';
  305. echo '<span class="execPosition">Unfinished Business: </span>';
  306. echo '<div class="report">';
  307. if($action == 'edit'){
  308. echo '<textarea name="unfinished-business" cols="44" rows="10">';
  309. echo $current_minutes->unfinished_business;
  310. echo '</textarea>';
  311. } else {
  312. echo $current_minutes->unfinished_business;
  313. }
  314. echo '</div>';
  315. echo '<span class="execPosition">Good of Order: </span>';
  316. echo '<div class="report">';
  317. if($action == 'edit'){
  318. echo '<textarea name="good-of-order" cols="44" rows="10">';
  319. echo $current_minutes->good_of_order;
  320. echo '</textarea>';
  321. } else {
  322. echo $current_minutes->good_of_order;
  323. }
  324. echo '</div>';
  325. if($action == 'edit'){
  326. ?>
  327. <p><input type="submit" value="Save Changes" /></p>
  328. <input type="hidden" name="id" value="<?php echo $chapter_meeting->id; ?>" >
  329. </form>
  330. <?php } ?>
  331. <?php include_once($_SERVER['DOCUMENT_ROOT']."/includes/footer.php"); ?>