您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

paper.php 6.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. include('../inc/inc.php');
  3. if (!$user->loggedin()) {
  4. header('Location: /login.php');
  5. die();
  6. }
  7. if ($user->getRole() !== "admin") {
  8. header('Location: /index.php');
  9. die();
  10. }
  11. if (!empty($_POST['ballot']) && !empty($_POST['candidate'])) {
  12. $candidate_selected = (int) $_POST['candidate'];
  13. $voter_selected = (int) $_POST['voter'];
  14. $ballot = $_POST['ballot'];
  15. if ($candidate_selected != $_POST['candidate']) $error = "An eccor occurred while processing your ballot. Please retry.";
  16. if ($voter_selected != $_POST['voter']) $error = "An eccor occurred while processing your ballot. Please retry.";
  17. if ($ballot !== "VICEPRESIDENT" && $ballot !== "SECRETARY" && $ballot !== "DIRECTOR") $error = "An eccor occurred while processing your ballot. Please retry.";
  18. if (empty($error)) {
  19. $result = $db->query("INSERT INTO votes (candidate_id, position, member_id, vote_type, submitter_id) SELECT $candidate_selected, \"$ballot\", $voter_selected, 'IN PERSON', $voter_selected UNION SELECT $candidate_selected, \"$ballot\", voting_id, 'PROXY IN PERSON', delegate_id from proxy where delegate_id=$voter_selected");
  20. $candidate = $db->fetchRow('select skymanager_id, name, username, md5(coalesce(email, "")) as `gravatar_hash` from members where skymanager_id=' . $candidate_selected);
  21. if ($result) {
  22. $proxy_votes = $db->fetchAssoc("SELECT member_id, submitter_id from votes where submitter_id=$voter_selected and position=\"$ballot\"");
  23. $num_affected_rows = count($proxy_votes);
  24. if ($num_affected_rows > 1) {
  25. $proxy_str = "";
  26. foreach ($proxy_votes as $proxy_vote) {
  27. if ($proxy_vote['member_id'] === $proxy_vote['submitter_id'])
  28. continue;
  29. $proxy_str .= "#{$proxy_vote['member_id']} ";
  30. }
  31. }
  32. }
  33. }
  34. }
  35. $positions = [
  36. 'VICEPRESIDENT' => 'Vice President',
  37. 'SECRETARY' => 'Secretary',
  38. 'DIRECTOR' => 'Director'
  39. ];
  40. $header = new Header("2022 Michigan Flyers Election : Poll Worker");
  41. $header->addStyle("/styles/style.css");
  42. $header->addStyle("/styles/admin.css");
  43. $header->addStyle("/styles/vote.css");
  44. $header->addScript("/js/jquery-1.11.3.min.js");
  45. $header->addScript("/js/search.js");
  46. $header->addScript("/js/admin-search.js");
  47. $header->setAttribute('title', 'Michigan Flyers');
  48. $header->setAttribute('tagline', '2022 Election Administration');
  49. $header->output();
  50. $candidates = $db->fetchAssoc('select skymanager_id, name, username, md5(coalesce(email, "")) as `gravatar_hash` from members where voting_id is not null');
  51. $voters = $db->fetchAssoc('select ANY_VALUE(skymanager_id) as `skymanager_id`, ANY_VALUE(members.voting_id) as `voting_id`, ANY_VALUE(name) as `name`, ANY_VALUE(username) as `username`, group_concat(proxy.voting_id) as `proxies`, ANY_VALUE(upstream_proxy.delegate_id) as `delegate`, md5(coalesce(ANY_VALUE(email), "")) as `gravatar_hash` from members left join proxy on (members.voting_id=proxy.delegate_id) left join proxy as upstream_proxy on (upstream_proxy.voting_id=members.voting_id) where members.voting_id is not null group by members.voting_id UNION select skymanager_id, voting_id, name, username, NULL as `proxies`, NULL as `delegate`, md5(coalesce(email, "")) as `gravatar_hash` from members where members.voting_id is null');
  52. ?>
  53. <script type="text/javascript">
  54. var voters = <?= json_encode($voters); ?>;
  55. var candidates = <?= json_encode($candidates); ?>;
  56. </script>
  57. <form action="paper.php" method="POST">
  58. <div class="form-row">
  59. <div class="selector">
  60. <label class="radio">
  61. <input type="radio" name="button" value="ci" />
  62. <a class="radio-button-label" href="/admin/checkin.php">Check-In</a>
  63. </label>
  64. <label class="radio">
  65. <input type="radio" name="button" value="pe" checked />
  66. <a class="radio-button-label" href="#">Paper Entry</a>
  67. </label>
  68. <label class="radio">
  69. <input type="radio" name="button" value="re" />
  70. <a class="radio-button-label" href="/admin/results.php">Results</a>
  71. </label>
  72. </div>
  73. </div>
  74. <div class="form-row">
  75. <div class="selector">
  76. <label class="radio">
  77. <input type="radio" id="vote-vicepresident" name="ballot" value="VICEPRESIDENT" checked />
  78. <span class="radio-button-label">Vice President</span>
  79. </label>
  80. <label class="radio">
  81. <input type="radio" id="vote-secretary" name="ballot" value="SECRETARY" checked />
  82. <span class="radio-button-label">Secretary</span>
  83. </label>
  84. <label class="radio">
  85. <input type="radio" id="vote-director" name="ballot" value="DIRECTOR" />
  86. <span class="radio-button-label">Director-At-Large</span>
  87. </label>
  88. </div>
  89. </div>
  90. <div class="form-row">
  91. <input type="text" placeholder="Voter Search" id="voter-searchbox" name="voter-searchbox" value="" />
  92. <div id="voter-results"></div>
  93. <input type="hidden" name="voter" id="voter-input" value="0" />
  94. <div id="selectedVoter" class="selected candidate voter">
  95. <span class="placeholder">No Selected Voter</span>
  96. </div>
  97. </div>
  98. <div class="form-row">
  99. <input type="text" placeholder="Candidate Search" id="searchbox" name="searchbox" value="" />
  100. <div id="results"></div>
  101. <input type="hidden" name="candidate" id="candidate-input" value="0" />
  102. <div id="selectedCandidate" class="selected candidate">
  103. <span class="placeholder">No Candidate Selected</span>
  104. </div>
  105. </div>
  106. <div class="form-row">
  107. <input class="submit" type="submit" name="submit" value="Submit Ballot" />
  108. </div>
  109. </form>
  110. <?php if (!empty($_POST['ballot'])): ?>
  111. <div id="vote-result">
  112. <div id="status" class="<?= $result ? "success" : "failure"; ?>"></div>
  113. <div id="message" class="<?= $result ? "success" : "failure"; ?>">
  114. <?= !empty($error) ? $error : ($result ? "This Ballot has been successfully Submitted" :
  115. "This ballot has already been submitted.") ?>
  116. </div>
  117. </div>
  118. <?php endif; ?>
  119. <?php if ($result): ?>
  120. <div id="ballot">
  121. <div class="ballot-section">
  122. <h4 class="section-heading">Position</h4>
  123. <h2 class="ballot-position"><?= $positions[$ballot]; ?></h2>
  124. </div>
  125. <div class="ballot-section">
  126. <h4 class="section-heading">Candidate</h4>
  127. <div id="vote-profile" class="candidate">
  128. <div class="profile-icon">
  129. <img src="https://www.gravatar.com/avatar/<?= $candidate['gravatar_hash']; ?>.png?d=mp&s=64" />
  130. </div>
  131. <div class="profile">
  132. <h2 class="profile-name"><?= $candidate['name']; ?></h2>
  133. <h4 class="profile-id"><?= $candidate['skymanager_id']; ?></h4>
  134. </div>
  135. </div>
  136. </div>
  137. <div class="ballot-section">
  138. <h4 class="section-heading">Voter ID</h4>
  139. <h4 id="ballot-voter-id">#<?= $voter_selected; ?></h4>
  140. </div>
  141. <?php if ($proxy_str): ?>
  142. <div class="ballot-section">
  143. <h4 class="section-heading">Proxy Votes</h4>
  144. <h4 id="ballot-voter-id"><?= $proxy_str; ?></h4>
  145. </div>
  146. <?php endif; ?>
  147. </div>
  148. <?php endif; ?>
  149. <?php
  150. $footer = new Footer();
  151. $footer->output();