[aur-dev] [PATCH 1/2] Store active TUs for each vote

Lukas Fleischer archlinux at cryptocrack.de
Mon Aug 5 17:43:00 EDT 2013


This allows for easily keeping track of TUs that become active during a
voting period later.

Signed-off-by: Lukas Fleischer <archlinux at cryptocrack.de>
---
 UPGRADING                     | 18 +++++++++++++-----
 support/schema/aur-schema.sql | 10 +++++++++-
 web/lib/acctfuncs.inc.php     | 23 ++++++++++++++---------
 3 files changed, 36 insertions(+), 15 deletions(-)

diff --git a/UPGRADING b/UPGRADING
index a300a91..740078c 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -10,13 +10,21 @@ From 2.2.0 to 2.3.0
 ALTER TABLE Users ADD COLUMN InactivityTS BIGINT NOT NULL DEFAULT 0;
 ----
 
-2. Add fields to store the number of active TUs and the quorum to the
-   "TU_VoteInfo" table:
+2. Add a field to store the quorum to the "TU_VoteInfo" table:
 
 ----
-ALTER TABLE TU_VoteInfo
-	ADD COLUMN ActiveTUs tinyint(3) unsigned NOT NULL default '0',
-	ADD COLUMN Quorum decimal(2, 2) unsigned NOT NULL;
+ALTER TABLE TU_VoteInfo ADD COLUMN Quorum decimal(2, 2) unsigned NOT NULL;
+----
+
+3. Create the "TU_VoteActive" table:
+
+----
+CREATE TABLE IF NOT EXISTS TU_VoteActive (
+  VoteID int(10) unsigned NOT NULL,
+  UserID int(10) unsigned NOT NULL,
+  FOREIGN KEY (VoteID) REFERENCES TU_VoteInfo(ID) ON DELETE CASCADE,
+  FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE CASCADE
+) ENGINE = InnoDB;
 ----
 
 From 2.1.0 to 2.2.0
diff --git a/support/schema/aur-schema.sql b/support/schema/aur-schema.sql
index 59da3aa..6efe91c 100644
--- a/support/schema/aur-schema.sql
+++ b/support/schema/aur-schema.sql
@@ -203,11 +203,19 @@ CREATE TABLE IF NOT EXISTS TU_VoteInfo (
   Yes tinyint(3) unsigned NOT NULL default '0',
   No tinyint(3) unsigned NOT NULL default '0',
   Abstain tinyint(3) unsigned NOT NULL default '0',
-  ActiveTUs tinyint(3) unsigned NOT NULL default '0',
   PRIMARY KEY  (ID),
   FOREIGN KEY (SubmitterID) REFERENCES Users(ID) ON DELETE CASCADE
 ) ENGINE = InnoDB;
 
+-- TUs being active during a specific voting period
+--
+CREATE TABLE IF NOT EXISTS TU_VoteActive (
+  VoteID int(10) unsigned NOT NULL,
+  UserID int(10) unsigned NOT NULL,
+  FOREIGN KEY (VoteID) REFERENCES TU_VoteInfo(ID) ON DELETE CASCADE,
+  FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE CASCADE
+) ENGINE = InnoDB;
+
 -- Individual vote records
 --
 CREATE TABLE IF NOT EXISTS TU_Votes (
diff --git a/web/lib/acctfuncs.inc.php b/web/lib/acctfuncs.inc.php
index 9df1856..3f7b595 100644
--- a/web/lib/acctfuncs.inc.php
+++ b/web/lib/acctfuncs.inc.php
@@ -618,19 +618,18 @@ function open_user_proposals($user) {
 function add_tu_proposal($agenda, $user, $votelength, $quorum, $submitteruid) {
 	$dbh = DB::connect();
 
-	$q = "SELECT COUNT(*) FROM Users WHERE AccountTypeID = 2 AND ";
-	$q.= "InactivityTS = 0";
-	$result = $dbh->query($q);
-	$row = $result->fetch(PDO::FETCH_NUM);
-	$active_tus = $row[0];
-
 	$q = "INSERT INTO TU_VoteInfo (Agenda, User, Submitted, End, Quorum, ";
-	$q.= "SubmitterID, ActiveTUs) VALUES ";
+	$q.= "SubmitterID) VALUES ";
 	$q.= "(" . $dbh->quote($agenda) . ", " . $dbh->quote($user) . ", ";
 	$q.= "UNIX_TIMESTAMP(), UNIX_TIMESTAMP() + " . $dbh->quote($votelength);
-	$q.= ", " . $dbh->quote($quorum) . ", " . $submitteruid . ", ";
-	$q.= $active_tus . ")";
+	$q.= ", " . $dbh->quote($quorum) . ", " . $submitteruid . ")";
 	$result = $dbh->exec($q);
+	$vote_id = last_insert_id();
+
+	$q = "INSERT INTO TU_VoteActive (VoteID, UserID) SELECT ";
+	$q.= $vote_id . " AS VoteID, ID AS UserID FROM Users WHERE ";
+	$q.= "AccountTypeID = 2 AND InactivityTS = 0";
+	$dbh->exec($q);
 }
 
 /**
@@ -1026,6 +1025,12 @@ function vote_details($voteid) {
 	$result = $dbh->query($q);
 	$row = $result->fetch(PDO::FETCH_ASSOC);
 
+	$q = "SELECT COUNT(*) FROM TU_VoteActive WHERE VoteID = ";
+	$q.= intval($voteid);
+	$result = $dbh->query($q);
+	$row_ = $result->fetch(PDO::FETCH_NUM);
+	$row['ActiveTUs'] = $row_[0];
+
 	return $row;
 }
 
-- 
1.8.4.rc1.383.g13e9f3f



More information about the aur-dev mailing list