Add support for variable length votes in voting application

Signed-off-by: Callan Barrett <wizzomafizzo@gmail.com>
This commit is contained in:
Callan Barrett 2007-12-30 08:56:33 +09:00 committed by Dan McGee
parent a8e574ef28
commit 5f4afcc8cb
3 changed files with 101 additions and 63 deletions

View file

@ -217,6 +217,7 @@ CREATE TABLE IF NOT EXISTS TU_VoteInfo (
Agenda text collate latin1_general_ci NOT NULL,
User char(32) collate latin1_general_ci NOT NULL,
Submitted bigint(20) unsigned NOT NULL,
End 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',

View file

@ -18,36 +18,48 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
$dbh = db_connect();
if (!empty($_POST['addVote'])) {
$aweek = 60*60*24*7;
$error = "";
if (!empty($_REQUEST['user'])) {
$qcheck = "SELECT * FROM Users WHERE Username = '" . mysql_real_escape_string($_REQUEST['user']) . "'";
if (!empty($_POST['user'])) {
$qcheck = "SELECT * FROM Users WHERE Username = '" . mysql_real_escape_string($_POST['user']) . "'";
$check = mysql_num_rows(db_query($qcheck, $dbh));
if ($check == 0) {
$error.= "<div style='color: red; font-weight: bold'>Username does not exist.</div>";
} else {
$qcheck = "SELECT * FROM TU_VoteInfo WHERE User = '" . mysql_real_escape_string($_REQUEST['user']) . "'";
$qcheck.= " AND Submitted + " . $aweek . " > UNIX_TIMESTAMP()";
$qcheck = "SELECT * FROM TU_VoteInfo WHERE User = '" . mysql_real_escape_string($_POST['user']) . "'";
$qcheck.= " AND End > UNIX_TIMESTAMP()";
$check = mysql_num_rows(db_query($qcheck, $dbh));
if ($check != 0) {
$error.= "<div style='color: red; font-weight: bold'>" . mysql_real_escape_string($_REQUEST['user']) . " already has proposal running for them.</div>";
$error.= "<div style='color: red; font-weight: bold'>" . htmlentities($_POST['user']) . " already has proposal running for them.</div>";
}
}
}
if (empty($_REQUEST['agenda'])) {
if (!empty($_POST['length'])) {
if (!is_numeric($_POST['length'])) {
$error.= "<div style='color: red; font-weight: bold'>Length must be a number.</div>";
} else if ($_POST['length'] < 1) {
$error.= "<div style='color: red; font-weight: bold'>Length must be at least 1.</div>";
} else {
$len = (60*60*24)*$_POST['length'];
}
} else {
$len = 60*60*24*7;
}
if (empty($_POST['agenda'])) {
$error.= "<div style='color: red; font-weight: bold'>Proposal cannot be empty.</div>";
}
}
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"]) . ")";
$q = "INSERT INTO TU_VoteInfo (Agenda, User, Submitted, End, SubmitterID) VALUES ";
$q.= "('" . mysql_real_escape_string($_POST['agenda']) . "', ";
$q.= "'" . mysql_real_escape_string($_POST['user']) . "', ";
$q.= "UNIX_TIMESTAMP(), UNIX_TIMESTAMP() + " . mysql_real_escape_string($len);
$q.= ", " . uid_from_sid($_COOKIE["AURSID"]) . ")";
db_query($q, $dbh);
print "<p>New proposal submitted.</p>\n";
@ -60,6 +72,10 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
<input type='text' name='user' value='<?php if (!empty($_POST['user'])) { print htmlentities($_POST['user'], ENT_QUOTES); } ?>'>
(empty if not applicable)
<br />
<b>Length in days:</b>
<input type='text' name='length' value='<?php if (!empty($_POST['length'])) { print htmlentities($_POST['length'], ENT_QUOTES); } ?>'>
(defaults to 7 if empty)
<br />
<b>Proposal:</b><br />
<textarea name='agenda' rows='10' cols='50'><?php if (!empty($_POST['agenda'])) { print htmlentities($_POST['agenda']); } ?></textarea><br />
<input type='hidden' name='addVote' value='1'>

View file

@ -24,8 +24,6 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
# Temp value for results per page
$pp = 5;
# This needs to be changed for variable length votes I guess, TODO
$aweek = 60*60*24*7;
if (isset($_REQUEST['id'])) {
# Show application details
@ -48,7 +46,7 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
# Print out application details, thanks again AUR
#
$isrunning = (($row['Submitted'] + $aweek) > time()) ? 1 : 0;
$isrunning = $row['End'] > time() ? 1 : 0;
$qvoted = "SELECT * FROM TU_Votes WHERE ";
$qvoted.= "VoteID = " . $row['ID'] . " AND ";
@ -98,6 +96,7 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
}
}
# I think I understand why MVC is good for this stuff..
echo "<div class=\"pgbox\">\n";
echo " <div class=\"pgboxtitle\"><span class=\"f3\">Proposal Details</span></div>\n";
echo " <div class=\"pgboxbody\">\n";
@ -119,9 +118,17 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
print "Submitted: <b>" . gmdate("r", $row['Submitted']) . "</b> by ";
print "<b>" . username_from_id($row['SubmitterID']) . "</b><br />\n";
print "<br />\n";
$row['Agenda'] = htmlentities($row['Agenda']);
if ($isrunning == 0) {
print "Ended: ";
} else {
print "Ends: ";
}
print "<b>" . gmdate("r", $row['End']) . "</b><br />\n";
print "<br />\n";
$row['Agenda'] = htmlentities($row['Agenda']);
# str_replace seems better than <pre> because it still maintains word wrapping
print str_replace("\n", "<br />\n", $row['Agenda']);
@ -224,9 +231,8 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
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 (!empty($offset) AND is_numeric($offset)) {
if ($offset >= 1) {
$off = $offset;
} else {
@ -236,16 +242,16 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
$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";
}
$q = "SELECT * FROM TU_VoteInfo";
$order = ($by == 'down') ? 'DESC' : 'ASC';
if ($type == "new") {
$q.= " WHERE End > " . time();
$application = "Current Votes";
} else {
$application = "All 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
@ -262,7 +268,7 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
if ($limit != 0) {
$q.= " LIMIT " . $off . ", ". $limit;
}
}
$result = db_query($q, $dbh);
@ -288,9 +294,13 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
print " bottom'><span class='f2'>";
print "Proposal";
print "</span></th>\n";
print " <th style='border-bottom: #666 1px solid; vertical-align:";
print " bottom'><span class='f2'>";
print "<a href='?off=$off&sort=sub&by=$by_next'>Start</a>";
print "</span></th>\n";
print " <th style='border-bottom: #666 1px solid; vertical-align:";
print " bottom'><span class='f2'>";
print "<a href='?off=$off&sort=sub&by=$by_next'>Submitted</a>";
print "End";
print "</span></th>\n";
print " <th style='border-bottom: #666 1px solid; vertical-align:";
print " bottom'><span class='f2'>";
@ -320,59 +330,70 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
} else {
for ($i = 0; $row = mysql_fetch_assoc($result); $i++) {
# Thankyou AUR
(($i % 2) == 0) ? $c = "data1" : $c = "data2";
print "<tr>\n";
print " <td class='".$c."'><span class='f4'><span class='blue'>";
$prev_Len = 100;
if (strlen($row["Agenda"]) >= $prev_Len) {
$row["Agenda"] = htmlentities(substr($row["Agenda"], 0, $prev_Len)) . "...";
} else {
$row["Agenda"] = htmlentities($row["Agenda"]);
}
# alright, I'm going to just have a "new" table and the
# "old" table can just have every vote, works just as well
# and probably saves on doing some crap
#
print $row["Agenda"];
print " <a href='/tu.php?id=" . $row['ID'] . "'>[More]</a>";
print "</span></span></td>\n";
print " <td class='".$c."'><span class='f5'><span class='blue'>";
print gmdate("r", intval($row["Submitted"]));
print "</span></span></td>\n";
print " <td class='".$c."'><span class='f6'><span class='blue'>";
(($i % 2) == 0) ? $c = "data1" : $c = "data2";
print "<tr>\n";
print " <td class='".$c."'><span class='f4'><span class='blue'>";
$prev_Len = 100;
if (!empty($row['User'])) {
print "<a href='packages.php?K=" . $row['User'] . "&SeB=m'>";
print $row['User'] . "</a>";
} else {
print "N/A";
}
if (strlen($row["Agenda"]) >= $prev_Len) {
$row["Agenda"] = htmlentities(substr($row["Agenda"], 0, $prev_Len)) . "... -";
} else {
$row["Agenda"] = htmlentities($row["Agenda"]) . " -";
}
print "</span></span></td>\n";
print $row["Agenda"];
print " <a href='/tu.php?id=" . $row['ID'] . "'>[More]</a>";
print "</span></span></td>\n";
print " <td class='".$c."'><span class='f5'><span class='blue'>";
# why does the AUR use gmdate with formatting that includes the offset
# to GMT?!
print gmdate("j M y", $row["Submitted"]);
print "</span></span></td>\n";
print " <td class='".$c."'><span class='f5'><span class='blue'>";
print gmdate("j M y", $row["End"]);
print "</span></span></td>\n";
print " <td class='".$c."'><span class='f6'><span class='blue'>";
if (!empty($row['User'])) {
print "<a href='packages.php?K=" . $row['User'] . "&SeB=m'>";
print $row['User'] . "</a>";
} else {
print "N/A";
}
print "</span></span></td>\n";
print " <td class='".$c."'><span class='f5'><span class='blue'>";
print $row['Yes'];
print "</span></span></td>\n";
print " <td class='".$c."'><span class='f5'><span class='blue'>";
print $row['No'];
print "</span></span></td>\n";
print " <td class='".$c."'><span class='f5'><span class='blue'>";
# See above
print " <td class='".$c."'><span class='f5'><span class='blue'>";
# See above
# print $row['Abstain'];
# print "</span></span></td>\n";
# print " <td class='".$c."'><span class='f5'><span class='blue'>";
$qvoted = "SELECT * FROM TU_Votes WHERE ";
$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));
$hasvoted = mysql_num_rows(db_query($qvoted, $dbh));
if ($hasvoted == 0) {
print "<span style='color: red; font-weight: bold'>No</span>";
} else {
print "<span style='color: green; font-weight: bold'>Yes</span>";
}
if ($hasvoted == 0) {
print "<span style='color: red; font-weight: bold'>No</span>";
} else {
print "<span style='color: green; font-weight: bold'>Yes</span>";
}
print "</span></span></td>\n";
print "</tr>\n";
print "</tr>\n";
}
}