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
				
			
		
							
								
								
									
										19
									
								
								README
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								README
									
										
									
									
									
								
							|  | @ -48,9 +48,22 @@ INSERT INTO election_choices (election_id, choice) | |||
|     (@el_id, 'Candidate 2'), | ||||
|     (@el_id, 'Candidate 3'), | ||||
|     (@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: | ||||
| 
 | ||||
|   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"; | ||||
| $tmp_tokens_table = "election_tmp_tokens"; | ||||
| $votes_table = "election_votes"; | ||||
| $members_table = "foundationmembers"; | ||||
| $voters_table = "election_voters"; | ||||
| $results_table = "election_results"; | ||||
| $committee_email = "elections@gnome.org"; | ||||
| $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) { | ||||
|   global $tmp_tokens_table; | ||||
|   global $members_table; | ||||
|   global $voters_table; | ||||
| 
 | ||||
|   if ($handle === 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_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 .= " AND tt.tmp_token = '".$escaped_tmp_token."'"; | ||||
|   $query .= " AND tt.member_id = mt.id"; | ||||
|   $query .= " AND mt.email = '".$escaped_email."'"; | ||||
|   $query .= " AND tt.election_voter_id = mt.id"; | ||||
|   $query .= " AND mt.email_address = '".$escaped_email."'"; | ||||
| 
 | ||||
|   $result = mysql_query ($query, $handle); | ||||
|   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) { | ||||
|   global $members_table; | ||||
|   global $voters_table; | ||||
|   global $tmp_tokens_table; | ||||
| 
 | ||||
|   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 */ | ||||
|   $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 .= " AND tt.tmp_token = '".$escaped_tmp_token."'"; | ||||
|   $query .= " AND tt.member_id = mt.id"; | ||||
|   $query .= " AND mt.email = '".$escaped_email."'"; | ||||
|   $query .= " AND tt.election_voter_id = mt.id"; | ||||
|   $query .= " AND mt.email_address = '".$escaped_email."'"; | ||||
| 
 | ||||
|   $result = mysql_query ($query, $handle); | ||||
|   if (!$result) | ||||
|  |  | |||
|  | @ -29,8 +29,20 @@ DROP TABLE IF EXISTS `election_tmp_tokens`; | |||
|    `tmp_token` varchar(200) NOT NULL default '' | ||||
|  ) 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  | ||||
|  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 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Bradley M. Kuhn
						Bradley M. Kuhn