Create election_voters table & adapt code to use it instead of foundationmembers.
foundationmembers was a table specific to the GNOME Foundation. This new table, election_voters, allows creation of an electorate based on a list. README is updated to explain how to use this table.
This commit is contained in:
		
							parent
							
								
									cf3f3e5180
								
							
						
					
					
						commit
						dce402d2ad
					
				
					 3 changed files with 38 additions and 13 deletions
				
			
		
							
								
								
									
										17
									
								
								README
									
										
									
									
									
								
							
							
						
						
									
										17
									
								
								README
									
										
									
									
									
								
							|  | @ -48,9 +48,22 @@ INSERT INTO election_choices (election_id, choice) | ||||||
|     (@el_id, 'Candidate 2'), |     (@el_id, 'Candidate 2'), | ||||||
|     (@el_id, 'Candidate 3'), |     (@el_id, 'Candidate 3'), | ||||||
|     (@el_id, 'Candidate 4'); |     (@el_id, 'Candidate 4'); | ||||||
| select @el_id; | INSERT INTO election_voters (election_id, email_address) | ||||||
|  |     VALUES | ||||||
|  |     (@el_id, 'voter1@example.org'), | ||||||
|  |     (@el_id, 'voter2@example.org'), | ||||||
|  |     (@el_id, 'voter3@example.com'), | ||||||
|  |     (@el_id, 'voter4@example.net'); | ||||||
| 
 | 
 | ||||||
| That number you see at the end is your election id.  The URL you'll give out |     INSERT INTO election_tmp_tokens (election_id, election_voter_id, tmp_token) | ||||||
|  |         SELECT @el_id, id, SUBSTRING(MD5(RAND()) FROM 1 FOR 24) AS tmp_token | ||||||
|  |         FROM election_voters where election_id = @el_id; | ||||||
|  | 
 | ||||||
|  |      select @el_id; | ||||||
|  | 
 | ||||||
|  | That number you see at the end is this election's id.  The URL you'll give out | ||||||
| is thus something like: | is thus something like: | ||||||
| 
 | 
 | ||||||
|   http://example.org/vote?election_id=THAT_NUMBER |   http://example.org/vote?election_id=THAT_NUMBER | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ $choices_table = "election_choices"; | ||||||
| $anon_tokens_table = "election_anon_tokens"; | $anon_tokens_table = "election_anon_tokens"; | ||||||
| $tmp_tokens_table = "election_tmp_tokens"; | $tmp_tokens_table = "election_tmp_tokens"; | ||||||
| $votes_table = "election_votes"; | $votes_table = "election_votes"; | ||||||
| $members_table = "foundationmembers"; | $voters_table = "election_voters"; | ||||||
| $results_table = "election_results"; | $results_table = "election_results"; | ||||||
| $committee_email = "elections@gnome.org"; | $committee_email = "elections@gnome.org"; | ||||||
| $committee_name =  "the Membership and Elections Committee"; | $committee_name =  "the Membership and Elections Committee"; | ||||||
|  | @ -128,7 +128,7 @@ function elec_get_previous_by_date_desc ($handle) { | ||||||
| 
 | 
 | ||||||
| function elec_verify_email_tmp_token ($handle, $election_id, $email, $tmp_token) { | function elec_verify_email_tmp_token ($handle, $election_id, $email, $tmp_token) { | ||||||
|   global $tmp_tokens_table; |   global $tmp_tokens_table; | ||||||
|   global $members_table; |   global $voters_table; | ||||||
| 
 | 
 | ||||||
|   if ($handle === FALSE) |   if ($handle === FALSE) | ||||||
|     return FALSE; |     return FALSE; | ||||||
|  | @ -137,11 +137,11 @@ function elec_verify_email_tmp_token ($handle, $election_id, $email, $tmp_token) | ||||||
|   $escaped_email = mysql_real_escape_string ($email, $handle); |   $escaped_email = mysql_real_escape_string ($email, $handle); | ||||||
|   $escaped_tmp_token = mysql_real_escape_string ($tmp_token, $handle); |   $escaped_tmp_token = mysql_real_escape_string ($tmp_token, $handle); | ||||||
| 
 | 
 | ||||||
|   $query = "SELECT COUNT(*) FROM " . $tmp_tokens_table . " AS tt, " . $members_table . " AS mt"; |   $query = "SELECT COUNT(*) FROM " . $tmp_tokens_table . " AS tt, " . $voters_table . " AS mt"; | ||||||
|   $query .= " WHERE tt.election_id = '".$escaped_election_id."'"; |   $query .= " WHERE tt.election_id = '".$escaped_election_id."'"; | ||||||
|   $query .= " AND tt.tmp_token = '".$escaped_tmp_token."'"; |   $query .= " AND tt.tmp_token = '".$escaped_tmp_token."'"; | ||||||
|   $query .= " AND tt.member_id = mt.id"; |   $query .= " AND tt.election_voter_id = mt.id"; | ||||||
|   $query .= " AND mt.email = '".$escaped_email."'"; |   $query .= " AND mt.email_address = '".$escaped_email."'"; | ||||||
| 
 | 
 | ||||||
|   $result = mysql_query ($query, $handle); |   $result = mysql_query ($query, $handle); | ||||||
|   if (!$result) |   if (!$result) | ||||||
|  | @ -309,7 +309,7 @@ function elec_insert_new_vote ($handle, $anon_token_id, $vote, $preference) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function elec_sql_remove_tmp_token ($handle, $election_id, $email, $tmp_token) { | function elec_sql_remove_tmp_token ($handle, $election_id, $email, $tmp_token) { | ||||||
|   global $members_table; |   global $voters_table; | ||||||
|   global $tmp_tokens_table; |   global $tmp_tokens_table; | ||||||
| 
 | 
 | ||||||
|   if ($handle === FALSE) |   if ($handle === FALSE) | ||||||
|  | @ -321,11 +321,11 @@ function elec_sql_remove_tmp_token ($handle, $election_id, $email, $tmp_token) { | ||||||
| 
 | 
 | ||||||
|   /* In MySQL < 4.1, you'd do "DELETE FROM " . $tmp_tokens_table */ |   /* In MySQL < 4.1, you'd do "DELETE FROM " . $tmp_tokens_table */ | ||||||
|   $query = "DELETE FROM tt"; |   $query = "DELETE FROM tt"; | ||||||
|   $query .= " USING ". $tmp_tokens_table . " AS tt, " . $members_table . " AS mt"; |   $query .= " USING ". $tmp_tokens_table . " AS tt, " . $voters_table . " AS mt"; | ||||||
|   $query .= " WHERE tt.election_id = '".$escaped_election_id."'"; |   $query .= " WHERE tt.election_id = '".$escaped_election_id."'"; | ||||||
|   $query .= " AND tt.tmp_token = '".$escaped_tmp_token."'"; |   $query .= " AND tt.tmp_token = '".$escaped_tmp_token."'"; | ||||||
|   $query .= " AND tt.member_id = mt.id"; |   $query .= " AND tt.election_voter_id = mt.id"; | ||||||
|   $query .= " AND mt.email = '".$escaped_email."'"; |   $query .= " AND mt.email_address = '".$escaped_email."'"; | ||||||
| 
 | 
 | ||||||
|   $result = mysql_query ($query, $handle); |   $result = mysql_query ($query, $handle); | ||||||
|   if (!$result) |   if (!$result) | ||||||
|  |  | ||||||
|  | @ -29,8 +29,20 @@ DROP TABLE IF EXISTS `election_tmp_tokens`; | ||||||
|    `tmp_token` varchar(200) NOT NULL default '' |    `tmp_token` varchar(200) NOT NULL default '' | ||||||
|  ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |  ) ENGINE=InnoDB DEFAULT CHARSET=utf8; | ||||||
| 
 | 
 | ||||||
|  | /* Not good normal form in election_voters table; there will be duplicates on | ||||||
|  | ** the email_address, but we think of a election_voter_id as a identity tied a | ||||||
|  | ** specific election. */ | ||||||
|  | 
 | ||||||
|  | DROP TABLE IF EXISTS `election_voters`; | ||||||
|  | CREATE TABLE `election_voters` ( | ||||||
|  |    `id` int(11) NOT NULL auto_increment, | ||||||
|  |    `election_id` int(11) NOT NULL default '0', | ||||||
|  |    `email_address` varchar(500) NOT NULL default '' | ||||||
|  |    PRIMARY KEY  (`id`)); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /*  | /*  | ||||||
| from members database we prepare anon tokens | from each voter we prepare anon tokens | ||||||
|  then insert those anon tokens to database  |  then insert those anon tokens to database  | ||||||
|  of course before a new election record should be created since its id is needed for anon_tokens |  of course before a new election record should be created since its id is needed for anon_tokens | ||||||
|  and election_choices are to be inserted |  and election_choices are to be inserted | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Bradley M. Kuhn
						Bradley M. Kuhn