Added the script to create temporary voting tokens
This commit is contained in:
parent
227b4e8ea9
commit
4ec2319eb7
1 changed files with 75 additions and 0 deletions
75
bin/create-tmp-tokens.pl
Normal file
75
bin/create-tmp-tokens.pl
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
use DBI;
|
||||||
|
|
||||||
|
# Script to create temporary tokens for voters.
|
||||||
|
#
|
||||||
|
# How to use this script
|
||||||
|
# ======================
|
||||||
|
#
|
||||||
|
# Look for the elections/referendum id in the database. Like
|
||||||
|
# "SELECT * FROM elections"
|
||||||
|
# Look for the current one and remember its id.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# If don't don't have a row for the current election yet, consider using
|
||||||
|
# BEGIN; SET NAMES 'utf8';
|
||||||
|
# INSERT INTO elections (name, voting_start, voting_end, choices_nb, question)
|
||||||
|
# VALUES ('2010 Spring Board of Directors Election',
|
||||||
|
# TIMESTAMP('2009-06-08 00:00:00'),
|
||||||
|
# TIMESTAMP('2009-06-22 23:59:59'),
|
||||||
|
# 7,
|
||||||
|
# 'Which candidates would you like to see in the GNOME Foundation Board?');
|
||||||
|
#
|
||||||
|
# INSERT INTO election_choices (election_id, choice)
|
||||||
|
# VALUES ((SELECT LAST_INSERT_ID()), 'Firstname Lastname1'),
|
||||||
|
# ((SELECT LAST_INSERT_ID()), 'Firstname Lastname2'),
|
||||||
|
# ((SELECT LAST_INSERT_ID()), 'Youget Theidea');
|
||||||
|
# And "COMMIT;" if there were no errors. Or "ROLLBACK;" if there were errors.
|
||||||
|
#
|
||||||
|
# You should then use this script like this:
|
||||||
|
# $ ./create-tmp-tokens.pl 1 tokens.txt maildata.txt
|
||||||
|
#
|
||||||
|
# where 1 is the elections/referendum id in the database.
|
||||||
|
#
|
||||||
|
# tokens.txt now contains SQL statements you can use to create the temporary
|
||||||
|
# tokens in the database. You can do that with, e.g.
|
||||||
|
# mysql -h button-back -u username -p foundation < tokens.txt
|
||||||
|
#
|
||||||
|
# maildata.txt now contains the data that will be used by mail-instructions.pl
|
||||||
|
#
|
||||||
|
# This script assumes, that there is a "electorate" Table which can be a
|
||||||
|
# simple VIEW created like this:
|
||||||
|
# CREATE OR REPLACE VIEW `foundation`.`electorate` AS SELECT id, firstname, lastname, email FROM `foundation`.`foundationmembers` WHERE DATE_SUB(CURDATE(), INTERVAL 2 YEAR) <= foundationmembers.last_renewed_on;
|
||||||
|
|
||||||
|
die "Usage: create-tmp-tokens.pl <election id> <output file for tokens> <output file for mail data>\n" unless $#ARGV == 2;
|
||||||
|
|
||||||
|
$election_id = $ARGV[0];
|
||||||
|
|
||||||
|
open TOKENS, ">$ARGV[1]" || die "Cannot open file $ARGV[1]: $!";
|
||||||
|
open MAILDATA, ">$ARGV[2]" || die "Cannot open file $ARGV[2]: $!";
|
||||||
|
|
||||||
|
my $datasource = "dbi:mysql:foundation:button-back:3306";
|
||||||
|
my $dbi = DBI->connect ($datasource, 'username', 'password') or die "Unable to connect mysql server: $DBI:errstr\n";
|
||||||
|
|
||||||
|
my $query = "SET NAMES 'utf8'";
|
||||||
|
my $dbh = $dbi->prepare($query);
|
||||||
|
$dbh->execute();
|
||||||
|
|
||||||
|
my $query = "SELECT id,firstname,lastname,email FROM electorate";
|
||||||
|
|
||||||
|
my $dbh = $dbi->prepare($query);
|
||||||
|
$dbh->execute();
|
||||||
|
$dbh->bind_columns(\$id, \$firstname, \$lastname, \$email);
|
||||||
|
|
||||||
|
print TOKENS "SET NAMES 'utf8';\n";
|
||||||
|
while ($dbh->fetch()) {
|
||||||
|
@chars = ( "A" .. "Z", "a" .. "z", 0 .. 9 );
|
||||||
|
$token = join("", @chars[ map { rand @chars } ( 1 .. 10 ) ]);
|
||||||
|
|
||||||
|
print TOKENS "INSERT INTO election_tmp_tokens (election_id, member_id, tmp_token) VALUES ($election_id,$id,'$token');\n";
|
||||||
|
print MAILDATA "$firstname $lastname;$email;$token\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
close MEMBERS;
|
||||||
|
close TOKENS;
|
||||||
|
close MAILDATA;
|
Loading…
Reference in a new issue