From a8e574ef2897e9ca709c2cfa5ff78d2f69464092 Mon Sep 17 00:00:00 2001 From: Callan Barrett Date: Thu, 27 Dec 2007 04:38:39 +0900 Subject: AUR Voting Application Added support for TU voting through AUR Signed-off-by: Callan Barrett --- support/schema/aur-schema.sql | 21 ++ web/html/addvote.php | 79 ++++++++ web/html/tu.php | 431 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 531 insertions(+) create mode 100644 web/html/addvote.php create mode 100644 web/html/tu.php diff --git a/support/schema/aur-schema.sql b/support/schema/aur-schema.sql index 11ad5a56..d48917c4 100644 --- a/support/schema/aur-schema.sql +++ b/support/schema/aur-schema.sql @@ -210,3 +210,24 @@ CREATE TABLE CommentNotify ( FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE CASCADE ); +-- Vote information +-- +CREATE TABLE IF NOT EXISTS TU_VoteInfo ( + ID int(10) unsigned NOT NULL auto_increment, + Agenda text collate latin1_general_ci NOT NULL, + User char(32) collate latin1_general_ci NOT NULL, + Submitted bigint(20) unsigned NOT NULL, + SubmitterID int(10) unsigned NOT NULL, + Yes tinyint(3) unsigned NOT NULL default '0', + No tinyint(3) unsigned NOT NULL default '0', + Abstain tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY (ID) +) + +-- Individual vote records +-- +CREATE TABLE IF NOT EXISTS TU_Votes ( + VoteID int(10) unsigned NOT NULL, + UserID int(10) unsigned NOT NULL +) + diff --git a/web/html/addvote.php b/web/html/addvote.php new file mode 100644 index 00000000..91a06583 --- /dev/null +++ b/web/html/addvote.php @@ -0,0 +1,79 @@ +Username does not exist."; + } else { + $qcheck = "SELECT * FROM TU_VoteInfo WHERE User = '" . mysql_real_escape_string($_REQUEST['user']) . "'"; + $qcheck.= " AND Submitted + " . $aweek . " > UNIX_TIMESTAMP()"; + $check = mysql_num_rows(db_query($qcheck, $dbh)); + + if ($check != 0) { + $error.= "
" . mysql_real_escape_string($_REQUEST['user']) . " already has proposal running for them.
"; + } + } + } + + if (empty($_REQUEST['agenda'])) { + $error.= "
Proposal cannot be empty.
"; + } + } + + if (!empty($_POST['addVote']) && empty($error)) { + $q = "INSERT INTO TU_VoteInfo (Agenda, User, Submitted, SubmitterID) VALUES "; + $q.= "('" . mysql_real_escape_string($_REQUEST['agenda']) . "', "; + $q.= "'" . mysql_real_escape_string($_REQUEST['user']) . "', "; + $q.= "UNIX_TIMESTAMP(), " . uid_from_sid($_COOKIE["AURSID"]) . ")"; + + db_query($q, $dbh); + print "

New proposal submitted.

\n"; + } else { +?> +

Submit a proposal to vote on.

+"; } ?> +
+Applicant/TU: +'> +(empty if not applicable) +
+Proposal:
+
+ + +
+
+Back"; +} else { + print "You are not allowed to access this area.\n"; +} + +html_footer(AUR_VERSION); +# vim: ts=2 sw=2 noet ft=php + +?> diff --git a/web/html/tu.php b/web/html/tu.php new file mode 100644 index 00000000..9ed00bc3 --- /dev/null +++ b/web/html/tu.php @@ -0,0 +1,431 @@ + time()) ? 1 : 0; + + $qvoted = "SELECT * FROM TU_Votes WHERE "; + $qvoted.= "VoteID = " . $row['ID'] . " AND "; + $qvoted.= "UserID = " . uid_from_sid($_COOKIE["AURSID"]); + $hasvoted = mysql_num_rows(db_query($qvoted, $dbh)); + + # Can this person vote? + # + $canvote = 1; // we assume they can + $errorvote = ""; // error message to give + if ($isrunning == 0) { + $canvote = 0; + $errorvote = "Voting is closed for this proposal."; + } else if ($row['User'] == username_from_sid($_COOKIE["AURSID"])) { + $canvote = 0; + $errorvote = "You cannot vote in an proposal regarding you."; + } else if ($hasvoted != 0) { + $canvote = 0; + $errorvote = "You've already voted in this proposal."; + } + + # have to put this here so results are correct immediately after voting + if ($canvote == 1) { + if (isset($_POST['doVote'])) { + if (isset($_POST['voteYes'])) { + $myvote = "Yes"; + } else if (isset($_POST['voteNo'])) { + $myvote = "No"; + } else if (isset($_POST['voteAbstain'])) { + $myvote = "Abstain"; + } + + $qvote = "UPDATE TU_VoteInfo SET " . $myvote . " = " . ($row[$myvote] + 1) . " WHERE ID = " . $row['ID']; + db_query($qvote, $dbh); + $qvote = "INSERT INTO TU_Votes (VoteID, UserID) VALUES (" . $row['ID'] . ", " . uid_from_sid($_COOKIE["AURSID"]) . ")"; + db_query($qvote, $dbh); + + # Can't vote anymore + # + $canvote = 0; + $errorvote = "You've already voted for this proposal."; + # Update if they voted + $hasvoted = mysql_num_rows(db_query($qvoted, $dbh)); + + $results = db_query($q, $dbh); + $row = mysql_fetch_assoc($results); + } + } + + echo "
\n"; + echo "
Proposal Details
\n"; + echo "
\n"; + + if ($isrunning == 1) { + print "
This vote is still running.
"; + print "
"; + } + + print "User: "; + + if (!empty($row['User'])) { + print "" . $row['User'] . ""; + } else { + print "N/A"; + } + + print "
\n"; + + print "Submitted: " . gmdate("r", $row['Submitted']) . " by "; + print "" . username_from_id($row['SubmitterID']) . "
\n"; + print "
\n"; + + $row['Agenda'] = htmlentities($row['Agenda']); + # str_replace seems better than
 because it still maintains word wrapping
+				print str_replace("\n", "
\n", $row['Agenda']); + + print "
\n"; + print "
\n"; + + print "
\n"; + print "\n"; + print "\n"; + print "\n"; + print "
\n"; + print "\n"; + + print "\n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print "\n"; + + $c = "data1"; + + print "\n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print "\n"; + + print "
"; + print "Yes"; + print ""; + print "No"; + print ""; + print "Abstain"; + print ""; + print "Total"; + print ""; + print "Voted?"; + print "
"; + print $row['Yes']; + print ""; + print $row['No']; + print ""; + print $row['Abstain']; + print ""; + print ($row['Yes'] + $row['No'] + $row['Abstain']); + print ""; + + if ($hasvoted == 0) { + print "No"; + } else { + print "Yes"; + } + + print "
\n"; + print "
\n"; + + echo "
\n"; + + # Actions, vote buttons + # + print "
\n"; + print "
\n"; + print "
Vote Actions
\n"; + print "
\n"; + + if ($canvote == 1) { + print "
\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "
\n"; + } else { + print "
$errorvote
"; + } + + print "
\n"; + print "
Back
\n"; + + } + + } else { + print "Vote ID not valid.\n"; + } + + } else { + # page listing applications being discussed, voted on and all those finished + # + + # I guess there should be a function since I use this a few times + function gen_results($offset, $limit, $sort, $by, $type="normal") { + + $dbh = db_connect(); + $aweek = 60*60*24*7; + + if (!empty($offset) AND is_numeric($offset)) { + if ($offset >= 1) { + $off = $offset; + } else { + $off = 0; + } + } else { + $off = 0; + } + + $q = "SELECT * FROM TU_VoteInfo"; + if ($type == "new") { + $q.= " WHERE Submitted + " . $aweek . " > " . time(); + $application = "Current Votes"; + } else { + $q.= " WHERE Submitted + " . $aweek . " < " . time(); + $application = "Old Votes"; + } + + $order = ($by == 'down') ? 'DESC' : 'ASC'; + + # not much to sort, I'm unsure how to sort by username + # when we only store the userid, someone come up with a nifty + # way to do this + # + switch ($sort) { + case 'sub': + $q.= " ORDER BY Submitted $order"; + break; + default: + $q.= " ORDER BY Submitted $order"; + break; + } + + if ($limit != 0) { + $q.= " LIMIT " . $off . ", ". $limit; + } + + $result = db_query($q, $dbh); + + if ($by == "down") { + $by_next = "up"; + } else { + $by_next = "down"; + } + + print "
\n"; + print "\n"; + print "\n"; + print " \n"; + print "\n"; + print "\n"; + print "
\n"; + print " $application\n"; + print "
\n"; + print "\n"; + + print "\n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; +# I'm not sure if abstains are necessary inthis view, it's just extra clutter +# print " \n"; + print " \n"; + print "\n"; + + if (mysql_num_rows($result) == 0) { + print "\n"; + } else { + for ($i = 0; $row = mysql_fetch_assoc($result); $i++) { + # Thankyou AUR + (($i % 2) == 0) ? $c = "data1" : $c = "data2"; + print "\n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + # print " \n"; + print "\n"; + } + } + + print "
"; + print "Proposal"; + print ""; + print "Submitted"; + print ""; + print "User"; + print ""; + print "Yes"; + print ""; + print "No"; + print ""; +# print "Abstain"; +# print ""; + print "Voted?"; + print "
No results found.
"; + + $prev_Len = 100; + + if (strlen($row["Agenda"]) >= $prev_Len) { + $row["Agenda"] = htmlentities(substr($row["Agenda"], 0, $prev_Len)) . "..."; + } else { + $row["Agenda"] = htmlentities($row["Agenda"]); + } + + print $row["Agenda"]; + print " [More]"; + print ""; + print gmdate("r", intval($row["Submitted"])); + print ""; + + if (!empty($row['User'])) { + print ""; + print $row['User'] . ""; + } else { + print "N/A"; + } + + print ""; + print $row['Yes']; + print ""; + print $row['No']; + print ""; + # See above + # print $row['Abstain']; + # print ""; + + $qvoted = "SELECT * FROM TU_Votes WHERE "; + $qvoted.= "VoteID = " . $row['ID'] . " AND "; + $qvoted.= "UserID = " . uid_from_sid($_COOKIE["AURSID"]); + $hasvoted = mysql_num_rows(db_query($qvoted, $dbh)); + + if ($hasvoted == 0) { + print "No"; + } else { + print "Yes"; + } + + print "
\n"; + print "
\n"; + + if ($type == "old" AND $limit != 0) { + $qnext = "SELECT ID FROM TU_VoteInfo"; + $nextresult = db_query($qnext, $dbh); + + print "\n"; + + if (mysql_num_rows($result)) { + $sort = htmlentities($sort, ENT_QUOTES); + $by = htmlentities($by, ENT_QUOTES); + + print "\n"; + print "\n"; + + print "\n"; + print "\n"; + } + print "
\n"; + if ($off != 0) { + $back = (($off - $limit) <= 0) ? 0 : $off - $limit; + print "Back"; + } + print "\n"; + if (($off + $limit) < mysql_num_rows($nextresult)) { + $forw = $off + $limit; + print "Next"; + } + print "
\n"; + } + + print "
\n"; + } + + # stop notices, ythanku Xilon + if (empty($_REQUEST['sort'])) { $_REQUEST['sort'] = ""; } + if (empty($_REQUEST['by'])) { $_REQUEST['by'] = ""; } + if (empty($_REQUEST['off'])) { $_REQUEST['off'] = ""; } + + gen_results(0, 0, $_REQUEST['sort'], $_REQUEST['by'], "new"); + print "
Add

"; + gen_results($_REQUEST['off'], $pp, $_REQUEST['sort'], $_REQUEST['by'], "old"); + + } +} else { + print "You are not allowed to access this area.\n"; +} + +html_footer(AUR_VERSION); +# vim: ts=2 sw=2 + +?> -- cgit v1.2.3-24-g4f1b