Merge branch 'thh-checkvotename' into next

* thh-checkvotename:
  Display current voting identifier in menu.
  Correctly find $votename.
  Add forgotten template.
  Fix regular expression.
  Check correct voting in ballot.
This commit is contained in:
Thomas Hochstein 2014-02-15 17:30:05 +01:00
commit d0fda3342c
9 changed files with 79 additions and 7 deletions

View file

@ -17,7 +17,8 @@ $VERSION = "0.4";
############################################################################## ##############################################################################
# Menu for interaction with the votetaker # # Menu for interaction with the votetaker #
# Parameters: votes list and header (references to arrays) # # Parameters: votes list and header (references to arrays) #
# Body, Mailadress, Name, Ballot ID (references to strings) # # Body, Mailadress, Name, Ballot ID, #
# Voting (references to strings) #
# List of newly set fields (reference to array) # # List of newly set fields (reference to array) #
# List of errors to correct (Array-Ref) # # List of errors to correct (Array-Ref) #
# Return Values: 'w': proceed # # Return Values: 'w': proceed #
@ -25,7 +26,7 @@ $VERSION = "0.4";
############################################################################## ##############################################################################
sub menu { sub menu {
my ($votes, $header, $body, $addr, $name, $ballot_id, $set, $errors) = @_; my ($votes, $header, $body, $addr, $name, $ballot_id, $voting, $set, $errors) = @_;
my $input = ""; my $input = "";
my $voter_addr = $$addr || ''; my $voter_addr = $$addr || '';
my $voter_name = $$name || ''; my $voter_name = $$name || '';
@ -59,6 +60,7 @@ sub menu {
while (1) { while (1) {
system($config{clearcmd}); system($config{clearcmd});
print "-> $config{votename} <-\n";
print UVmessage::get("MENU_PROBLEMS") . "\n"; print UVmessage::get("MENU_PROBLEMS") . "\n";
foreach my $error (keys %errors) { foreach my $error (keys %errors) {
@ -79,6 +81,7 @@ sub menu {
print "(5) ", UVmessage::get("MENU_BALLOT_ID"), " [$$ballot_id]\n" print "(5) ", UVmessage::get("MENU_BALLOT_ID"), " [$$ballot_id]\n"
if ($config{personal}); if ($config{personal});
print "(6) ", UVmessage::get("MENU_BDSG"), "\n" if ($config{bdsg}); print "(6) ", UVmessage::get("MENU_BDSG"), "\n" if ($config{bdsg});
print "(7) ", UVmessage::get("MENU_VOTING"), " [", $$voting, "]\n";
} }
print "\n", print "\n",
@ -269,6 +272,22 @@ sub menu {
$errors{InvalidBDSG} = UVmessage::get("MENU_INVALIDBDSG"); $errors{InvalidBDSG} = UVmessage::get("MENU_INVALIDBDSG");
} }
} elsif ($input eq '7') {
my $sel;
do {
print "[a] ", UVmessage::get("MENU_VOTING_CORRECT"), "\n",
"[b] ", UVmessage::get("MENU_VOTING_WRONG"), "\n\n",
UVmessage::get("MENU_PROMPT");
$sel = <STDIN>;
} until ($sel =~ /^[ab]$/i);
if ($sel =~ /^a$/i) {
delete $errors{NoVoting};
delete $errors{WrongVoting};
} else {
$errors{WrongVoting} = UVmessage::get("MENU_WRONGVOTING");
}
} elsif ($input =~ /^i$/i) { } elsif ($input =~ /^i$/i) {
my $ignore = UVmessage::get("MENU_IGNORE_STRING"); my $ignore = UVmessage::get("MENU_IGNORE_STRING");
# Set columns for Text::Wrap # Set columns for Text::Wrap

View file

@ -29,6 +29,8 @@ MENU_INVALIDBDSG = Datenschutzhinweis fehlerhaft oder nicht bestaetigt.
MENU_DUPLICATEVOTE = Doppelte Stimmabgabe gefunden. MENU_DUPLICATEVOTE = Doppelte Stimmabgabe gefunden.
MENU_NOVOTE = Keine Stimmabgabe gefunden. MENU_NOVOTE = Keine Stimmabgabe gefunden.
MENU_INVALIDVOTE = Ungueltige Stimmabgabe. MENU_INVALIDVOTE = Ungueltige Stimmabgabe.
MENU_NOVOTING = Bezeichnung der Abstimmung nicht gefunden.
MENU_WRONGVOTING = Wahlschein fuer andere Abstimmung.
MENU_NOBALLOTID = Keine Scheinkennung gefunden. MENU_NOBALLOTID = Keine Scheinkennung gefunden.
MENU_WRONGBALLOTID = Scheinkennung falsch. MENU_WRONGBALLOTID = Scheinkennung falsch.
MENU_ADDRESSNOTREGISTERED = Adresse nicht registriert. MENU_ADDRESSNOTREGISTERED = Adresse nicht registriert.
@ -67,6 +69,9 @@ MENU_BALLOT_ID = Scheinkennung
MENU_BDSG = Datenschutzklausel MENU_BDSG = Datenschutzklausel
MENU_BDSG_ACCEPTED = Datenschutzklausel wurde akzeptiert MENU_BDSG_ACCEPTED = Datenschutzklausel wurde akzeptiert
MENU_BDSG_DECLINED = Datenschutzklausel nicht akzeptiert bzw. Text veraendert MENU_BDSG_DECLINED = Datenschutzklausel nicht akzeptiert bzw. Text veraendert
MENU_VOTING = Abstimmung
MENU_VOTING_CORRECT = Korrekter Wahlschein fuer diese Abstimmung
MENU_VOTING_WRONG = Wahlschein fuer andere Abstimmung
MENU_IGNORE = Diese Stimme ignorieren (ohne Benachrichtigung verwerfen) MENU_IGNORE = Diese Stimme ignorieren (ohne Benachrichtigung verwerfen)
MENU_IGNORE_WARNING = Die Stimme wird nicht aufgezeichnet, und es wird keine Bestaetigung verschickt. ${MENU_IGNORE_STRING} eingeben, wenn Du sicher bist: MENU_IGNORE_WARNING = Die Stimme wird nicht aufgezeichnet, und es wird keine Bestaetigung verschickt. ${MENU_IGNORE_STRING} eingeben, wenn Du sicher bist:
MENU_IGNORE_STRING = JA MENU_IGNORE_STRING = JA
@ -173,6 +178,7 @@ VOTE_UNREGISTERED_ADDRESS = Adresse nicht registriert
VOTE_INVALID_VOTE = Ungueltige Stimmabgabe VOTE_INVALID_VOTE = Ungueltige Stimmabgabe
VOTE_VIOLATED_RULE = Regel ${RULE} verletzt VOTE_VIOLATED_RULE = Regel ${RULE} verletzt
VOTE_NO_VOTES = Keine Stimmen abgegeben VOTE_NO_VOTES = Keine Stimmen abgegeben
VOTE_WRONG_VOTING = Wahlschein gehoert nicht zu dieser Abstimmung
VOTE_INVALID_ACCOUNT = Ungueltiger Account VOTE_INVALID_ACCOUNT = Ungueltiger Account
VOTE_INVALID_ADDRESS = Ungueltige Adresse VOTE_INVALID_ADDRESS = Ungueltige Adresse
VOTE_INVALID_REALNAME = Ungueltiger Realname VOTE_INVALID_REALNAME = Ungueltiger Realname

View file

@ -14,7 +14,7 @@ bdsgtext-more := value bdsgtext | drop-words 50 | create-lines 50
=-=-=-=-=-=-=-=- Alles vor dieser Zeile bitte loeschen =-=-=-=-=-=-=-=- =-=-=-=-=-=-=-=- Alles vor dieser Zeile bitte loeschen =-=-=-=-=-=-=-=-
WAHLSCHEIN fuer [$votename-first] [$ballotintro] [$votename-first]
[@votename-more| [$line]\n] [@votename-more| [$line]\n]

View file

@ -29,7 +29,7 @@ votetaker := value mailfrom | fill-left 65
=-=-=-=-=-=-=-=- Alles vor dieser Zeile bitte loeschen =-=-=-=-=-=-=-=- =-=-=-=-=-=-=-=- Alles vor dieser Zeile bitte loeschen =-=-=-=-=-=-=-=-
WAHLSCHEIN fuer [$votename-first] [$ballotintro] [$votename-first]
[@votename-more| [$line]\n] [@votename-more| [$line]\n]

21
templates/wrong-voting Normal file
View file

@ -0,0 +1,21 @@
votetaker := value mailfrom | fill-left 65
body := value body | quote "> "
== TEMPLATE =================================================================
Offenbar hast du einen Wahlschein fuer eine andere Abstimmung eingesandt
oder der Name der Abstimmung geht aus dem Wahlschein nicht hervor. Wenn
das ein Irrtum war, pruefe bitte noch einmal die im CfV angegebene
Abstimmungsadresse und wiederhole Deine Stimmabgabe.
Dieser Fehler kann auftreten, wenn Du an mehreren Abstimmungen teilnimmst
und den Wahlschein von Hand einsendest (und dabei mehrere Abstimmungen
verwechselst), oder wenn Du die Bezeichnung der Abstimmung im Wahlschein
veraendert oder geloescht hast.
Hier die Mail, die ich erhalten habe:
[$body]
[$votetaker]
\[mit [$usevote_version]\]

View file

@ -227,6 +227,10 @@ mailstart = "^From "
begin_divider = Alles vor dieser Zeile bitte loeschen begin_divider = Alles vor dieser Zeile bitte loeschen
end_divider = Alles nach dieser Zeile bitte loeschen end_divider = Alles nach dieser Zeile bitte loeschen
# Ueberschrift fuer den Wahlschein
# Achtung, muss im Wahlschein genauso stehen!
ballotintro = WAHLSCHEIN fuer
# Text fuer die Namens-Angabe im Wahlschein. Achtung, muss im # Text fuer die Namens-Angabe im Wahlschein. Achtung, muss im
# Wahlschein genauso stehen! # Wahlschein genauso stehen!
nametext = Dein Realname, falls nicht im FROM-Header: nametext = Dein Realname, falls nicht im FROM-Header:
@ -290,4 +294,5 @@ tpl_invalid_name = "invalid-name" # used by uvvote.pl
tpl_multiple_votes = "multiple-votes" # used by uvvote.pl tpl_multiple_votes = "multiple-votes" # used by uvvote.pl
tpl_no_ballot = "no-ballot" # used by uvvote.pl tpl_no_ballot = "no-ballot" # used by uvvote.pl
tpl_no_votes = "no-votes" # used by uvvote.pl tpl_no_votes = "no-votes" # used by uvvote.pl
tpl_wrong_voting = "wrong-voting" # used by uvvote.pl
tpl_rule_violated = "rule-violated" # used by uvvote.pl (c.f. usevote.rul) tpl_rule_violated = "rule-violated" # used by uvvote.pl (c.f. usevote.rul)

View file

@ -99,6 +99,10 @@ mailstart = "^From "
begin_divider = Alles vor dieser Zeile bitte loeschen begin_divider = Alles vor dieser Zeile bitte loeschen
end_divider = Alles nach dieser Zeile bitte loeschen end_divider = Alles nach dieser Zeile bitte loeschen
# Ueberschrift fuer den Wahlschein
# Achtung, muss im Wahlschein genauso stehen!
ballotintro = WAHLSCHEIN fuer
# Text fuer die Namens-Angabe im Wahlschein. Achtung, muss im # Text fuer die Namens-Angabe im Wahlschein. Achtung, muss im
# Wahlschein genauso stehen! # Wahlschein genauso stehen!
nametext = Dein Realname, falls nicht im FROM-Header: nametext = Dein Realname, falls nicht im FROM-Header:
@ -162,4 +166,5 @@ tpl_invalid_name = "invalid-name" # used by uvvote.pl
tpl_multiple_votes = "multiple-votes" # used by uvvote.pl tpl_multiple_votes = "multiple-votes" # used by uvvote.pl
tpl_no_ballot = "no-ballot" # used by uvvote.pl tpl_no_ballot = "no-ballot" # used by uvvote.pl
tpl_no_votes = "no-votes" # used by uvvote.pl tpl_no_votes = "no-votes" # used by uvvote.pl
tpl_wrong_voting = "wrong-voting" # used by uvvote.pl
tpl_rule_violated = "rule-violated" # used by uvvote.pl (c.f. usevote.rul) tpl_rule_violated = "rule-violated" # used by uvvote.pl (c.f. usevote.rul)

View file

@ -152,9 +152,9 @@ sub process_request {
# check for suspicious addresses # check for suspicious addresses
foreach my $element (@bad_addr) { foreach my $element (@bad_addr) {
if ($voter_addr =~ /^$element/) { if ($voter_addr =~ /^$element/) {
my (@votes, @set, $ballot_id); # irrelevant, but necessary for UVmenu::menu() my (@votes, @set, $ballot_id, $voting); # irrelevant, but necessary for UVmenu::menu()
my @errors = ('SuspiciousAccountBallot'); my @errors = ('SuspiciousAccountBallot');
my $res = UVmenu::menu(\@votes, \@header, $body, \$voter_addr, \$voter_name, \$ballot_id, \@set, \@errors); my $res = UVmenu::menu(\@votes, \@header, $body, \$voter_addr, \$voter_name, \$ballot_id, \$voting, \@set, \@errors);
# "Ignore": don't deliver a ballot # "Ignore": don't deliver a ballot
return 0 if ($res eq 'i'); return 0 if ($res eq 'i');

View file

@ -224,6 +224,7 @@ sub process_vote {
my $onevote = 0; # 0=no votes, 1=everything OK, 2=vote cancelled my $onevote = 0; # 0=no votes, 1=everything OK, 2=vote cancelled
my $voteerror = ""; # error message in case of invalid vote my $voteerror = ""; # error message in case of invalid vote
my $ballot_id = ""; # ballot id (German: Wahlscheinkennung) my $ballot_id = ""; # ballot id (German: Wahlscheinkennung)
my $voting = ""; # voting (should be votename)
# found address? # found address?
if ($voter_addr) { if ($voter_addr) {
@ -239,6 +240,15 @@ sub process_vote {
push (@errors, 'InvalidAddress'); push (@errors, 'InvalidAddress');
} }
# correct voting?
if ($$body =~ /\Q$config{ballotintro}\E\s+(.+?)\s*\n([>:|]*?[\t ]+(\S+.+)\s*$)?/m) {
$voting = $1;
$voting .= " $3" if (defined($3) and $3 !~ /\Q$config{nametext}\E/);
push (@errors, 'WrongVoting') if ($config{votename} !~ /^\s*\Q$voting\E\s*$/);
} else {
push (@errors, 'NoVoting');
}
# personalized ballots? # personalized ballots?
if ($config{personal}) { if ($config{personal}) {
if ($$body =~ /$config{ballotidtext}\s+([a-z0-9]+)/) { if ($$body =~ /$config{ballotidtext}\s+([a-z0-9]+)/) {
@ -343,7 +353,7 @@ sub process_vote {
# Errors encountered? # Errors encountered?
if (@errors) { if (@errors) {
my $res = UVmenu::menu(\@votes, \@header, $body, \$voter_addr, \$voter_name, my $res = UVmenu::menu(\@votes, \@header, $body, \$voter_addr, \$voter_name,
\$ballot_id, \@set, \@errors); \$ballot_id, \$voting, \@set, \@errors);
return 0 if ($res eq 'i'); # "Ignore": Ignore vote, don't save return 0 if ($res eq 'i'); # "Ignore": Ignore vote, don't save
my $tpl; my $tpl;
@ -402,6 +412,12 @@ sub process_vote {
my $msg = $template->processTemplate($config{tpl_bdsg_error}); my $msg = $template->processTemplate($config{tpl_bdsg_error});
UVsendmail::mail($voter_addr, "Fehler", $msg, $msgid) if ($config{voteack}); UVsendmail::mail($voter_addr, "Fehler", $msg, $msgid) if ($config{voteack});
return 0; return 0;
} elsif ($error{NoVoting} or $error{WrongVoting}) {
$voteerror = UVmessage::get("VOTE_WRONG_VOTING");
my $template = UVtemplate->new();
$template->setKey('body' => $$body);
my $msg = $template->processTemplate($config{tpl_wrong_voting});
UVsendmail::mail($voter_addr, "Fehler", $msg, $msgid) if ($config{voteack});
} elsif ($error{NoVote}) { } elsif ($error{NoVote}) {
$voteerror = UVmessage::get("VOTE_NO_VOTES"); $voteerror = UVmessage::get("VOTE_NO_VOTES");
my $template = UVtemplate->new(); my $template = UVtemplate->new();