2005-10-24 17:59:15 +00:00
|
|
|
<?php
|
|
|
|
|
2005-10-24 18:25:43 +00:00
|
|
|
$has_config = FALSE;
|
|
|
|
|
|
|
|
$mysql_host = "";
|
|
|
|
$mysql_user = "";
|
|
|
|
$mysql_password = "";
|
|
|
|
$mysql_db = "";
|
2005-10-24 17:59:15 +00:00
|
|
|
|
|
|
|
$elections_table = "elections";
|
2005-10-24 18:25:43 +00:00
|
|
|
$choices_table = "election_choices";
|
2005-10-24 17:59:15 +00:00
|
|
|
$anon_tokens_table = "election_anon_tokens";
|
2005-10-24 18:25:43 +00:00
|
|
|
$tmp_tokens_table = "election_tmp_tokens";
|
2005-10-24 17:59:15 +00:00
|
|
|
$votes_table = "election_votes";
|
2013-12-18 23:53:50 +00:00
|
|
|
$voters_table = "election_voters";
|
2009-06-04 18:15:43 +00:00
|
|
|
$results_table = "election_results";
|
2013-12-18 22:26:15 +00:00
|
|
|
$committee_email = "elections@gnome.org";
|
|
|
|
$committee_name = "the Membership and Elections Committee";
|
2005-10-24 18:25:43 +00:00
|
|
|
|
|
|
|
if (is_readable ("include/localconfig.php")) {
|
|
|
|
/* You can use such a file to have a local config for testing purpose. */
|
|
|
|
include ("include/localconfig.php");
|
|
|
|
$has_config = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (is_readable ("/home/admin/secret/anonvoting")) {
|
|
|
|
include ("/home/admin/secret/anonvoting");
|
|
|
|
$has_config = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!$has_config) {
|
|
|
|
trigger_error ("No configuration found.");
|
|
|
|
}
|
2005-10-24 17:59:15 +00:00
|
|
|
|
|
|
|
function elec_sql_open () {
|
|
|
|
global $mysql_host;
|
|
|
|
global $mysql_user;
|
|
|
|
global $mysql_password;
|
|
|
|
global $mysql_db;
|
|
|
|
|
2005-10-24 18:25:43 +00:00
|
|
|
$handle = mysql_connect ("$mysql_host", "$mysql_user", "$mysql_password");
|
|
|
|
if (!$handle) {
|
|
|
|
return FALSE;
|
|
|
|
}
|
2005-10-24 17:59:15 +00:00
|
|
|
|
2005-10-25 11:18:49 +00:00
|
|
|
$select_base = mysql_select_db ($mysql_db, $handle);
|
2005-10-24 18:25:43 +00:00
|
|
|
if (!$select_base) {
|
|
|
|
elec_sql_close ($handle);
|
|
|
|
return FALSE;
|
|
|
|
}
|
2009-06-06 12:33:05 +00:00
|
|
|
mysql_query ("SET NAMES 'utf8'", $handle);
|
2005-10-24 17:59:15 +00:00
|
|
|
|
2005-10-24 18:25:43 +00:00
|
|
|
return $handle;
|
2005-10-24 17:59:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function elec_sql_close ($handle) {
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return;
|
|
|
|
|
|
|
|
mysql_close ($handle);
|
|
|
|
}
|
|
|
|
|
|
|
|
function elec_sql_start_transaction ($handle) {
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$result = mysql_query ("START TRANSACTION", $handle);
|
|
|
|
|
|
|
|
return ($result !== FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
function elec_sql_commit ($handle) {
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$result = mysql_query ("COMMIT", $handle);
|
|
|
|
|
|
|
|
return ($result !== FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
function elec_sql_rollback ($handle) {
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$result = mysql_query ("ROLLBACK", $handle);
|
|
|
|
|
|
|
|
return ($result !== FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
function elec_get_by_date_desc_with_where ($handle, $where = "") {
|
|
|
|
global $elections_table;
|
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$query = "SELECT * FROM " . $elections_table;
|
|
|
|
if (isset ($where) && $where != "") {
|
|
|
|
$query .= " " . $where;
|
|
|
|
}
|
|
|
|
$query .= " ORDER BY voting_start desc";
|
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
|
|
|
|
if (!$result) {
|
|
|
|
$retval = FALSE;
|
|
|
|
} else {
|
|
|
|
$result_array = array ();
|
|
|
|
while ($buffer = mysql_fetch_assoc ($result)) {
|
|
|
|
$result_array[] = $buffer;
|
|
|
|
}
|
|
|
|
$retval = $result_array;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $retval;
|
|
|
|
}
|
|
|
|
|
|
|
|
function elec_get_current_by_date_desc ($handle) {
|
|
|
|
$gmdate = gmdate ("Y-m-d H:i:s");
|
|
|
|
$where = "WHERE '".$gmdate."' >= voting_start AND '".$gmdate."' <= voting_end";
|
|
|
|
return elec_get_by_date_desc_with_where ($handle, $where);
|
|
|
|
}
|
|
|
|
|
|
|
|
function elec_get_previous_by_date_desc ($handle) {
|
|
|
|
$gmdate = gmdate ("Y-m-d H:i:s");
|
|
|
|
$where = "WHERE '".$gmdate."' > voting_start AND '".$gmdate."' > voting_end";
|
|
|
|
return elec_get_by_date_desc_with_where ($handle, $where);
|
|
|
|
}
|
|
|
|
|
2005-10-24 18:25:43 +00:00
|
|
|
function elec_verify_email_tmp_token ($handle, $election_id, $email, $tmp_token) {
|
|
|
|
global $tmp_tokens_table;
|
2013-12-18 23:53:50 +00:00
|
|
|
global $voters_table;
|
2005-10-24 17:59:15 +00:00
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$escaped_election_id = mysql_real_escape_string ($election_id, $handle);
|
|
|
|
$escaped_email = mysql_real_escape_string ($email, $handle);
|
2005-10-24 18:25:43 +00:00
|
|
|
$escaped_tmp_token = mysql_real_escape_string ($tmp_token, $handle);
|
2005-10-24 17:59:15 +00:00
|
|
|
|
2013-12-18 23:53:50 +00:00
|
|
|
$query = "SELECT COUNT(*) FROM " . $tmp_tokens_table . " AS tt, " . $voters_table . " AS mt";
|
2005-10-24 17:59:15 +00:00
|
|
|
$query .= " WHERE tt.election_id = '".$escaped_election_id."'";
|
2005-10-24 18:25:43 +00:00
|
|
|
$query .= " AND tt.tmp_token = '".$escaped_tmp_token."'";
|
2013-12-18 23:53:50 +00:00
|
|
|
$query .= " AND tt.election_voter_id = mt.id";
|
|
|
|
$query .= " AND mt.email_address = '".$escaped_email."'";
|
2005-10-24 17:59:15 +00:00
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
if (!$result)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
return (mysql_result ($result, 0, 0) == 1);
|
|
|
|
}
|
|
|
|
|
2014-02-09 22:24:32 +00:00
|
|
|
function elec_verify_voted_token ($handle, $verify_token) {
|
|
|
|
global $anon_tokens_table;
|
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$escaped_verify_token = mysql_real_escape_string ($verify_token, $handle);
|
|
|
|
|
|
|
|
$query = "SELECT id FROM " . $anon_tokens_table;
|
|
|
|
$query .= " WHERE anon_token = '". $escaped_verify_token."'";
|
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
if (!$result)
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
return mysql_result ($result, 0, 0);
|
|
|
|
}
|
|
|
|
|
2005-10-24 18:25:43 +00:00
|
|
|
function elec_choices_get ($handle, $election_id) {
|
|
|
|
global $choices_table;
|
2005-10-24 17:59:15 +00:00
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$escaped_election_id = mysql_real_escape_string ($election_id, $handle);
|
|
|
|
|
2009-06-06 14:06:06 +00:00
|
|
|
$query = "SELECT choice, id FROM " . $choices_table;
|
2005-10-24 17:59:15 +00:00
|
|
|
$query .= " WHERE election_id = '".$escaped_election_id."'";
|
2009-06-04 18:15:43 +00:00
|
|
|
$query .= " ORDER BY id";
|
2005-10-24 17:59:15 +00:00
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
|
|
|
|
if (!$result) {
|
|
|
|
$retval = FALSE;
|
|
|
|
} else {
|
|
|
|
$result_array = array ();
|
|
|
|
while ($buffer = mysql_fetch_assoc ($result)) {
|
|
|
|
$result_array[] = $buffer;
|
|
|
|
}
|
|
|
|
$retval = $result_array;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $retval;
|
|
|
|
}
|
|
|
|
|
2014-02-10 00:04:33 +00:00
|
|
|
function elec_choices_get_by_anon_token_id ($handle, $anon_token_id) {
|
|
|
|
global $choices_table;
|
|
|
|
global $anon_tokens_table;
|
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$query = "SELECT c.choice, c.id FROM ";
|
|
|
|
$query .= $choices_table . " c, " . $anon_tokens_table . " a";
|
|
|
|
$query .= " WHERE c.election_id = a.election_id";
|
2015-05-14 22:25:28 +00:00
|
|
|
$query .= " AND a.id = " . intval($anon_token_id);
|
2014-02-10 00:04:33 +00:00
|
|
|
$query .= " ORDER BY c.id";
|
|
|
|
|
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
|
|
|
|
if (!$result) {
|
|
|
|
$retval = FALSE;
|
|
|
|
} else {
|
|
|
|
$result_array = array ();
|
|
|
|
while ($buffer = mysql_fetch_assoc ($result)) {
|
|
|
|
$result_array[] = $buffer;
|
|
|
|
}
|
|
|
|
$retval = $result_array;
|
|
|
|
}
|
|
|
|
return $retval;
|
|
|
|
}
|
|
|
|
|
2009-06-04 18:15:43 +00:00
|
|
|
function elec_verify_elections ($choices) {
|
|
|
|
if ($choices === FALSE || count ($choices) <= 1)
|
2005-10-24 17:59:15 +00:00
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
function elec_get_election ($handle, $election_id) {
|
|
|
|
global $elections_table;
|
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$escaped_election_id = mysql_real_escape_string ($election_id, $handle);
|
|
|
|
|
|
|
|
$query = "SELECT * FROM " . $elections_table;
|
|
|
|
$query .= " WHERE id = '".$escaped_election_id."'";
|
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
|
|
|
|
if (!$result)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
return mysql_fetch_assoc ($result);
|
|
|
|
}
|
|
|
|
|
2009-06-04 18:15:43 +00:00
|
|
|
function elec_get_results ($handle, $election_id) {
|
|
|
|
global $results_table;
|
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$escaped_election_id = mysql_real_escape_string ($election_id, $handle);
|
|
|
|
|
2009-06-06 15:43:24 +00:00
|
|
|
$query = "SELECT result FROM " . $results_table;
|
2009-06-04 18:15:43 +00:00
|
|
|
$query .= " WHERE election_id = '".$escaped_election_id."'";
|
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
|
|
|
|
if (!$result)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
return mysql_fetch_assoc ($result);
|
|
|
|
}
|
|
|
|
|
2005-10-24 17:59:15 +00:00
|
|
|
function elec_election_is_current ($election) {
|
|
|
|
$gmdate = gmdate ("Y-m-d H:i:s");
|
|
|
|
return ($gmdate >= $election["voting_start"] && $gmdate <= $election["voting_end"]);
|
|
|
|
}
|
|
|
|
|
|
|
|
function elec_election_has_ended ($election) {
|
|
|
|
$gmdate = gmdate ("Y-m-d H:i:s");
|
|
|
|
return ($gmdate > $election["voting_start"] && $gmdate > $election["voting_end"]);
|
|
|
|
}
|
|
|
|
|
|
|
|
function elec_election_get_type ($election) {
|
2005-10-25 12:43:11 +00:00
|
|
|
if ($election["type"] == "referendum")
|
2005-10-24 17:59:15 +00:00
|
|
|
return "referendum";
|
|
|
|
else
|
|
|
|
return "election";
|
|
|
|
}
|
|
|
|
|
2005-10-24 18:25:43 +00:00
|
|
|
function elec_vote_get_votes_from_post ($choices) {
|
2005-10-24 17:59:15 +00:00
|
|
|
$votes_array = array ();
|
2009-06-04 18:15:43 +00:00
|
|
|
$index=0;
|
2005-10-24 18:25:43 +00:00
|
|
|
foreach ($choices as $choice) {
|
2009-06-04 18:15:43 +00:00
|
|
|
$index++;
|
|
|
|
$name = "pref".$index;
|
2005-10-24 17:59:15 +00:00
|
|
|
if (isset ($_POST[$name]) && $_POST[$name] != "") {
|
2009-06-04 18:15:43 +00:00
|
|
|
array_push ($votes_array, substr($_POST[$name],4));
|
2005-10-24 17:59:15 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $votes_array;
|
|
|
|
}
|
|
|
|
|
2009-06-04 18:15:43 +00:00
|
|
|
function elec_verify_vote_is_valid ($choices, $vote, $votes_array) {
|
2005-10-24 17:59:15 +00:00
|
|
|
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
|
|
|
function elec_insert_new_anon_token ($handle, $election_id, $anon_token) {
|
|
|
|
global $anon_tokens_table;
|
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$escaped_election_id = mysql_real_escape_string ($election_id, $handle);
|
|
|
|
$escaped_anon_token = mysql_real_escape_string ($anon_token, $handle);
|
|
|
|
|
|
|
|
$query = "SELECT COUNT(*) FROM " . $anon_tokens_table;
|
|
|
|
$query .= " WHERE anon_token = '".$escaped_anon_token."'";
|
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
if (!$result)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
if (mysql_result ($result, 0, 0) != 0)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$query = "INSERT INTO " . $anon_tokens_table . " (anon_token, election_id)";
|
|
|
|
$query .= " VALUES ('".$escaped_anon_token."', '".$escaped_election_id."')";
|
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
if (!$result)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
return mysql_insert_id ($handle);
|
|
|
|
}
|
|
|
|
|
2009-06-04 18:15:43 +00:00
|
|
|
function elec_insert_new_vote ($handle, $anon_token_id, $vote, $preference) {
|
2005-10-24 17:59:15 +00:00
|
|
|
global $votes_table;
|
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
2009-06-04 18:15:43 +00:00
|
|
|
|
|
|
|
error_log($vote, 0);
|
2005-10-24 17:59:15 +00:00
|
|
|
$escaped_vote = mysql_real_escape_string ($vote, $handle);
|
|
|
|
$escaped_anon_token_id = mysql_real_escape_string ($anon_token_id, $handle);
|
|
|
|
|
2009-06-04 18:15:43 +00:00
|
|
|
$query = "INSERT INTO " . $votes_table . " (choice_id, anon_id, preference)";
|
|
|
|
$query .= " VALUES ('".$escaped_vote."', '".$escaped_anon_token_id."', '".$preference."')";
|
2005-10-24 17:59:15 +00:00
|
|
|
|
2009-06-04 18:15:43 +00:00
|
|
|
error_log($query, 0);
|
2005-10-24 17:59:15 +00:00
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
if (!$result)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2005-10-24 18:25:43 +00:00
|
|
|
function elec_sql_remove_tmp_token ($handle, $election_id, $email, $tmp_token) {
|
2013-12-18 23:53:50 +00:00
|
|
|
global $voters_table;
|
2005-10-24 18:25:43 +00:00
|
|
|
global $tmp_tokens_table;
|
2005-10-24 17:59:15 +00:00
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$escaped_election_id = mysql_real_escape_string ($election_id, $handle);
|
|
|
|
$escaped_email = mysql_real_escape_string ($email, $handle);
|
2005-10-24 18:25:43 +00:00
|
|
|
$escaped_tmp_token = mysql_real_escape_string ($tmp_token, $handle);
|
2005-10-24 17:59:15 +00:00
|
|
|
|
2005-10-25 22:05:51 +00:00
|
|
|
/* In MySQL < 4.1, you'd do "DELETE FROM " . $tmp_tokens_table */
|
|
|
|
$query = "DELETE FROM tt";
|
2013-12-18 23:53:50 +00:00
|
|
|
$query .= " USING ". $tmp_tokens_table . " AS tt, " . $voters_table . " AS mt";
|
2005-10-24 17:59:15 +00:00
|
|
|
$query .= " WHERE tt.election_id = '".$escaped_election_id."'";
|
2005-10-24 18:25:43 +00:00
|
|
|
$query .= " AND tt.tmp_token = '".$escaped_tmp_token."'";
|
2013-12-18 23:53:50 +00:00
|
|
|
$query .= " AND tt.election_voter_id = mt.id";
|
|
|
|
$query .= " AND mt.email_address = '".$escaped_email."'";
|
2005-10-24 17:59:15 +00:00
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
if (!$result)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
function elec_get_anon_tokens_for_election ($handle, $election_id) {
|
|
|
|
global $anon_tokens_table;
|
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$escaped_election_id = mysql_real_escape_string ($election_id, $handle);
|
|
|
|
|
|
|
|
$query = "SELECT * FROM " . $anon_tokens_table;
|
|
|
|
$query .= " WHERE election_id = '".$escaped_election_id."'";
|
|
|
|
$query .= " ORDER BY anon_token";
|
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
|
|
|
|
if (!$result) {
|
|
|
|
$retval = FALSE;
|
|
|
|
} else {
|
|
|
|
$result_array = array ();
|
|
|
|
while ($buffer = mysql_fetch_assoc ($result)) {
|
|
|
|
$result_array[] = $buffer;
|
|
|
|
}
|
|
|
|
$retval = $result_array;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $retval;
|
|
|
|
}
|
|
|
|
|
2009-06-04 18:15:43 +00:00
|
|
|
/* Leaving this here as legacy code. Unused for preferential voting. */
|
2005-10-24 17:59:15 +00:00
|
|
|
function elec_get_results_election ($handle, $election_id) {
|
|
|
|
global $anon_tokens_table;
|
|
|
|
global $votes_table;
|
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$escaped_election_id = mysql_real_escape_string ($election_id, $handle);
|
|
|
|
|
2005-10-24 18:25:43 +00:00
|
|
|
$query = "SELECT choice_id, COUNT(choice_id) AS total_choice FROM " . $anon_tokens_table . " AS att, " . $votes_table . " AS vt";
|
2005-10-24 17:59:15 +00:00
|
|
|
$query .= " WHERE att.election_id = '".$escaped_election_id."'";
|
|
|
|
$query .= " AND att.id = vt.anon_id";
|
2005-11-07 07:34:18 +00:00
|
|
|
/* -1 is not a valid value: it's the default value for referenda.
|
|
|
|
* It's a blank vote. There was a bug that let this choice be saved in the
|
|
|
|
* votes, but we don't need it there since we already have the anonymous
|
|
|
|
* token as a proof of the blank vote. */
|
|
|
|
$query .= " AND vt.choice_id != '-1'";
|
2005-10-24 18:25:43 +00:00
|
|
|
$query .= " GROUP BY choice_id";
|
|
|
|
$query .= " ORDER BY total_choice DESC";
|
2005-10-24 17:59:15 +00:00
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
|
|
|
|
if (!$result) {
|
|
|
|
$retval = FALSE;
|
|
|
|
} else {
|
|
|
|
$result_array = array ();
|
|
|
|
while ($buffer = mysql_fetch_assoc ($result)) {
|
|
|
|
$result_array[] = $buffer;
|
|
|
|
}
|
|
|
|
$retval = $result_array;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $retval;
|
|
|
|
}
|
|
|
|
|
2005-11-07 07:49:10 +00:00
|
|
|
function elec_get_blank_votes_election ($handle, $election_id) {
|
|
|
|
global $anon_tokens_table;
|
|
|
|
global $votes_table;
|
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$escaped_election_id = mysql_real_escape_string ($election_id, $handle);
|
|
|
|
|
|
|
|
$query = "SELECT COUNT(att.id) AS total_blank FROM " . $anon_tokens_table . " AS att, " . $votes_table . " AS vt";
|
|
|
|
$query .= " WHERE att.election_id = '".$escaped_election_id."'";
|
2005-11-07 08:26:05 +00:00
|
|
|
$query .= " AND (NOT EXISTS (";
|
|
|
|
$query .= " SELECT anon_id FROM " . $anon_tokens_table . " AS att, " . $votes_table . " AS vt";
|
|
|
|
$query .= " WHERE att.id = vt.anon_id";
|
|
|
|
$query .= " ) OR (vt.choice_id = '-1' AND att.id = vt.anon_id))";
|
2005-11-07 07:49:10 +00:00
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
|
|
|
|
if (!$result)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
return mysql_result ($result, 0, 0);
|
|
|
|
}
|
|
|
|
|
2005-10-24 17:59:15 +00:00
|
|
|
function elec_get_votes_for_anon_token ($handle, $anon_token_id) {
|
|
|
|
global $votes_table;
|
|
|
|
|
|
|
|
if ($handle === FALSE)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
$escaped_anon_token_id = mysql_real_escape_string ($anon_token_id, $handle);
|
|
|
|
|
2009-06-04 18:15:43 +00:00
|
|
|
$query = "SELECT choice_id,preference FROM " . $votes_table;
|
2015-05-14 22:38:11 +00:00
|
|
|
$query .= " WHERE anon_id = $escaped_anon_token_id";
|
2005-11-07 07:34:18 +00:00
|
|
|
/* -1 is not a valid value: it's the default value for referenda.
|
|
|
|
* It's a blank vote. There was a bug that let this choice be saved in the
|
|
|
|
* votes, but we don't need it there since we already have the anonymous
|
|
|
|
* token as a proof of the blank vote. */
|
|
|
|
$query .= " AND choice_id != '-1'";
|
2009-06-04 18:15:43 +00:00
|
|
|
$query .= " ORDER BY preference";
|
2005-10-24 17:59:15 +00:00
|
|
|
|
|
|
|
$result = mysql_query ($query, $handle);
|
|
|
|
|
|
|
|
if (!$result) {
|
|
|
|
$retval = FALSE;
|
|
|
|
} else {
|
|
|
|
$result_array = array ();
|
|
|
|
while ($buffer = mysql_fetch_assoc ($result)) {
|
2009-06-04 18:15:43 +00:00
|
|
|
$result_array[] = $buffer;
|
2005-10-24 17:59:15 +00:00
|
|
|
}
|
|
|
|
$retval = $result_array;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $retval;
|
|
|
|
}
|
|
|
|
|
|
|
|
?>
|