Merge branch 'thh-pickfromupstream' into next
* thh-pickfromupstream: Fix whitespace and typo. Update documentation to 4.12. Add correct timestamp to mbox when processing. Don't remove empty mailbox files/maildirs. Fix UVreadmail.pm Add option to compare ballot to sample ballot. Documentation: Add votename to UVmenu.
This commit is contained in:
commit
7233d81f30
26
CHANGES
26
CHANGES
|
@ -1,18 +1,30 @@
|
||||||
UseVoteGer Versionshistorie (aktuelle Version: 4.11, released 25.09.2012)
|
UseVoteGer Versionshistorie (aktuelle Version: 4.12, released 19.01.2014)
|
||||||
=========================================================================
|
=========================================================================
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- aussortieren von Bounces aus Stimmenliste
|
- aussortieren von Bounces aus Stimmenliste
|
||||||
- [Zugschlus] ich fänd es klasse, wenn man eine Kopie des Wahlscheines ins
|
|
||||||
Abstimmungsverzeichnis legt und Usevote einem dann auf Abruf ein diff
|
Version 4.12 (19.01.2014):
|
||||||
oder wdiff zwischen Sollwahlschein und wirklich eingreichtem
|
- uvbounce.pl und uvballot.pl benutzen jetzt wieder den uebergebenen
|
||||||
Wahlschein macht. Auf diese Weise erwischt man auch kleine Änderungen
|
Dateinamen statt irrtuemlich das Mailboxfile aus usevote.cfg
|
||||||
am Datenschutzhinweis (da bin ich eben in eine Falle von th-h getappt).
|
(Bugfix in UVreadmail.pm)
|
||||||
|
- UVreadmail.pm setzt beim Schreiben eines Mailarchivs nun einen
|
||||||
|
Timestamp in der mbox-Fromline, der aus der Mail stammt
|
||||||
|
(timestamp()-Funktion von Mail::Box) statt dem aktuellen Datum
|
||||||
|
- UVreadmail.pm laesst nun Mailboxdateien bzw. -ordner bestehen,
|
||||||
|
auch wenn sie leer sind, um Kompatibiliaetsprobleme mit anderen
|
||||||
|
Programmen zu vermeiden
|
||||||
|
- neue Config-Optionen "diff" und "sampleballotfile"
|
||||||
|
- im Fehlermenue bei der Wahlscheinverarbeitung ist es nun moeglich,
|
||||||
|
mit der Option "0" einen Dateivergleich (diff) zwischen dem gemailten
|
||||||
|
Wahlschein und einem Musterwahlschein (wie im CfV geposted) zu starten.
|
||||||
|
Dazu muss die Config-Option "sampleballotfile" gesetzt und die Datei
|
||||||
|
vorhanden sein (Standard-Dateiname: ballot.sample)
|
||||||
|
|
||||||
Version 4.11 (25.09.2012):
|
Version 4.11 (25.09.2012):
|
||||||
- Regular Expression fuer Pruefung des Abstimmungsnamens verbessert.
|
- Regular Expression fuer Pruefung des Abstimmungsnamens verbessert.
|
||||||
Es kam zu vielen False Positives
|
Es kam zu vielen False Positives
|
||||||
- Einlesen der Mailbox auf Perlmodule Mail::Box umgestellt, damit
|
- Einlesen der Mailbox auf Perlmodul Mail::Box umgestellt, damit
|
||||||
auch Maildir moeglich (neue Option "mailboxtype" in usevote.cfg).
|
auch Maildir moeglich (neue Option "mailboxtype" in usevote.cfg).
|
||||||
Archivierung erfolgt aber vorerst weiterhin immer als mbox
|
Archivierung erfolgt aber vorerst weiterhin immer als mbox
|
||||||
|
|
||||||
|
|
21
README
21
README
|
@ -1,4 +1,4 @@
|
||||||
UseVoteGer 4.11 (c) 2001-2012 Marc Langer
|
UseVoteGer 4.12 (c) 2001-2014 Marc Langer
|
||||||
|
|
||||||
UseVoteGer is a voting software for usenet votes.
|
UseVoteGer is a voting software for usenet votes.
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ written in C). Not all functions of Usevote/UseVoteGer 3.x are implemented!
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
UseVoteGer 4.11 - Usenet-Abstimmungssoftware
|
UseVoteGer 4.12 - Usenet-Abstimmungssoftware
|
||||||
===========================================
|
===========================================
|
||||||
|
|
||||||
von Marc Langer <uv@marclanger.de>
|
von Marc Langer <uv@marclanger.de>
|
||||||
|
@ -324,6 +324,7 @@ ohne die .pl und .pm Dateien jedesmal mitzukopieren. Folgende Dateien
|
||||||
sollten im Abstimmungsverzeichnis vorhanden sein (notwendig ist nur
|
sollten im Abstimmungsverzeichnis vorhanden sein (notwendig ist nur
|
||||||
usevote.cfg, darin können alle anderen Pfade angepasst werden):
|
usevote.cfg, darin können alle anderen Pfade angepasst werden):
|
||||||
|
|
||||||
|
ballot.sample
|
||||||
bdsgtext.cfg
|
bdsgtext.cfg
|
||||||
mailpatterns.cfg
|
mailpatterns.cfg
|
||||||
messages.cfg
|
messages.cfg
|
||||||
|
@ -404,6 +405,7 @@ mit einzelnen Stimmen wirst Du interaktiv durch Menues gefuehrt.
|
||||||
Meistens gibt es folgende Moeglichkeiten, die durch die
|
Meistens gibt es folgende Moeglichkeiten, die durch die
|
||||||
eingeklammerten Buchstaben und Zahlen aufgerufen werden koennen:
|
eingeklammerten Buchstaben und Zahlen aufgerufen werden koennen:
|
||||||
|
|
||||||
|
(0) Wahlschein mit Original vergleichen (diff)
|
||||||
(1) Anzeigen der Wahlmail
|
(1) Anzeigen der Wahlmail
|
||||||
|
|
||||||
Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
|
Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
|
||||||
|
@ -412,6 +414,7 @@ Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
|
||||||
(4) Stimmen
|
(4) Stimmen
|
||||||
(5) Scheinkennung
|
(5) Scheinkennung
|
||||||
(6) Datenschutzklausel
|
(6) Datenschutzklausel
|
||||||
|
(7) Abstimmung
|
||||||
|
|
||||||
(i) Diese Stimme ignorieren (ohne Benachrichtigung verwerfen)
|
(i) Diese Stimme ignorieren (ohne Benachrichtigung verwerfen)
|
||||||
(w) Weiter
|
(w) Weiter
|
||||||
|
@ -426,8 +429,11 @@ Teilweise gibt es Unteroptionen:
|
||||||
Nun solltest Du zunaechst mit (1) die Mail ansehen und anhand
|
Nun solltest Du zunaechst mit (1) die Mail ansehen und anhand
|
||||||
der bemaengelten Punkte entscheiden, ob der Wahlschein gueltig
|
der bemaengelten Punkte entscheiden, ob der Wahlschein gueltig
|
||||||
oder ungueltig ist bzw. welche Maengel tatsaechlich zutreffen.
|
oder ungueltig ist bzw. welche Maengel tatsaechlich zutreffen.
|
||||||
|
Mit (0) kannst Du einen Dateivergleich zu einem vorher hinterlegten
|
||||||
|
Musterwahlschein ausfuehren ("diff"), um Aenderungen/Fehler schneller
|
||||||
|
zu sehen.
|
||||||
|
|
||||||
Mit den Optionen (2) bis (6) kannst Du einzelne Eigenschaften
|
Mit den Optionen (2) bis (7) kannst Du einzelne Eigenschaften
|
||||||
des Wahlscheins nachbessern (wenn Usevote z.B. einen Namen oder
|
des Wahlscheins nachbessern (wenn Usevote z.B. einen Namen oder
|
||||||
eine Stimme nicht korrekt erkannt hat) oder auch einfach die
|
eine Stimme nicht korrekt erkannt hat) oder auch einfach die
|
||||||
Korrektheit bestaetigen.
|
Korrektheit bestaetigen.
|
||||||
|
@ -685,6 +691,10 @@ uvbounce.pl
|
||||||
eingeschaltet und die Option -f (siehe unten) nicht benutzt wurde,
|
eingeschaltet und die Option -f (siehe unten) nicht benutzt wurde,
|
||||||
werden die uebergebenen Dateinamen ignoriert.
|
werden die uebergebenen Dateinamen ignoriert.
|
||||||
|
|
||||||
|
Die Mails werden aus den uebergebenen Mailboxdateien geloescht
|
||||||
|
und statt dessen in einer neuen Datei mit der Erweiterung ".processed"
|
||||||
|
gespeichert.
|
||||||
|
|
||||||
Die Vorlage fuer die ausgegebene Liste ist im templates-
|
Die Vorlage fuer die ausgegebene Liste ist im templates-
|
||||||
Unterverzeichnis konfigurierbar (Datei "bouncelist").
|
Unterverzeichnis konfigurierbar (Datei "bouncelist").
|
||||||
|
|
||||||
|
@ -957,6 +967,7 @@ Hier eine Auflistung der immer anzupassenden Optionen
|
||||||
votename Name der Abstimmung
|
votename Name der Abstimmung
|
||||||
group1 Erster Abstimmungsgegenstand
|
group1 Erster Abstimmungsgegenstand
|
||||||
group2 Zweiter (und so weiter durchnummerieren)
|
group2 Zweiter (und so weiter durchnummerieren)
|
||||||
|
sampleballotfile Datei mit Musterwahlschein aus dem CfV fuer Dateivergleich (diff)
|
||||||
votefile Mailbox mit eingehenden Stimmen (falls POP3 ausgeschaltet)
|
votefile Mailbox mit eingehenden Stimmen (falls POP3 ausgeschaltet)
|
||||||
mailboxtype Typ der Mailbox (mbox, maildir)
|
mailboxtype Typ der Mailbox (mbox, maildir)
|
||||||
personal Personalisierte Wahlscheine verwenden? [BOOL]
|
personal Personalisierte Wahlscheine verwenden? [BOOL]
|
||||||
|
@ -1025,6 +1036,10 @@ clearcmd Shellbefehl zum Loeschen des Bildschirms (Standard: clear),
|
||||||
oder Betriebssystem keinen solchen Befehl bereitstellen,
|
oder Betriebssystem keinen solchen Befehl bereitstellen,
|
||||||
sollte ein Kommando verwendet werden, welches eine Trennlinie
|
sollte ein Kommando verwendet werden, welches eine Trennlinie
|
||||||
oder aehnliches auf dem Bildschirm ausgibt, z.B. mit "echo"
|
oder aehnliches auf dem Bildschirm ausgibt, z.B. mit "echo"
|
||||||
|
diff Shellbefehl zum Dateivergleich (diff); es koennen auch
|
||||||
|
Parameter angegeben werden, z.B. "diff -u". Das verwendete
|
||||||
|
Programm muss das Lesen einer Datei von STDIN erlauben
|
||||||
|
("-" statt Dateinamen fuer Einlesen von Standardeingabekanal)
|
||||||
pager Shellbefehl zum seitenweisen Darstellen von Mails auf dem
|
pager Shellbefehl zum seitenweisen Darstellen von Mails auf dem
|
||||||
Bildschirm (normalerweise "less"). Unter Windows muss "more"
|
Bildschirm (normalerweise "less"). Unter Windows muss "more"
|
||||||
benutzt werden, unter Unix hingegen gibt es moeglicherweise
|
benutzt werden, unter Unix hingegen gibt es moeglicherweise
|
||||||
|
|
|
@ -18,7 +18,7 @@ require Exporter;
|
||||||
$VERSION = "0.18";
|
$VERSION = "0.18";
|
||||||
|
|
||||||
# Usevote version
|
# Usevote version
|
||||||
$usevote_version = "UseVoteGer 4.11";
|
$usevote_version = "UseVoteGer 4.12";
|
||||||
|
|
||||||
sub read_config {
|
sub read_config {
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ sub read_config {
|
||||||
# Default configuration options (overwritten in usevote.cfg)
|
# Default configuration options (overwritten in usevote.cfg)
|
||||||
%config = (votefile => "votes",
|
%config = (votefile => "votes",
|
||||||
votename => "unkonfiguriertes Usevote",
|
votename => "unkonfiguriertes Usevote",
|
||||||
|
sampleballotfile => "ballot.sample",
|
||||||
resultfile => "ergebnis.alle",
|
resultfile => "ergebnis.alle",
|
||||||
rulefile => "usevote.rul",
|
rulefile => "usevote.rul",
|
||||||
badaddrfile => "mailpatterns.cfg",
|
badaddrfile => "mailpatterns.cfg",
|
||||||
|
@ -57,6 +58,7 @@ sub read_config {
|
||||||
mailcc => "",
|
mailcc => "",
|
||||||
sleepcmd => "sleep 1",
|
sleepcmd => "sleep 1",
|
||||||
clearcmd => "clear",
|
clearcmd => "clear",
|
||||||
|
diff => "diff",
|
||||||
pager => "less",
|
pager => "less",
|
||||||
pop3 => 0,
|
pop3 => 0,
|
||||||
pop3server => "localhost",
|
pop3server => "localhost",
|
||||||
|
|
15
UVmenu.pm
15
UVmenu.pm
|
@ -70,6 +70,12 @@ sub menu {
|
||||||
my $menucaption = UVmessage::get("MENU_CAPTION");
|
my $menucaption = UVmessage::get("MENU_CAPTION");
|
||||||
print "\n\n$menucaption\n";
|
print "\n\n$menucaption\n";
|
||||||
print "=" x length($menucaption), "\n\n";
|
print "=" x length($menucaption), "\n\n";
|
||||||
|
|
||||||
|
# don't print this option if called from uvcfv.pl
|
||||||
|
unless ($mailonly) {
|
||||||
|
print "(0) ", UVmessage::get("MENU_DIFF_BALLOT"), "\n";
|
||||||
|
}
|
||||||
|
|
||||||
print "(1) ", UVmessage::get("MENU_SHOW_MAIL"), "\n\n",
|
print "(1) ", UVmessage::get("MENU_SHOW_MAIL"), "\n\n",
|
||||||
UVmessage::get("MENU_CHANGE_PROPERTIES"), "\n",
|
UVmessage::get("MENU_CHANGE_PROPERTIES"), "\n",
|
||||||
"(2) ", UVmessage::get("MENU_ADDRESS"), " [$voter_addr]\n";
|
"(2) ", UVmessage::get("MENU_ADDRESS"), " [$voter_addr]\n";
|
||||||
|
@ -96,7 +102,14 @@ sub menu {
|
||||||
# only accept 1, 2, i and w if called from uvcfv.pl
|
# only accept 1, 2, i and w if called from uvcfv.pl
|
||||||
next if ($mailonly && $input !~ /^[12iw]$/i);
|
next if ($mailonly && $input !~ /^[12iw]$/i);
|
||||||
|
|
||||||
if ($input eq '1') {
|
if ($input eq '0') {
|
||||||
|
# ignore SIGPIPE (Bug in more and less)
|
||||||
|
$SIG{PIPE} = 'IGNORE';
|
||||||
|
open (DIFF, "|$config{diff} - $config{sampleballotfile} | $config{pager}");
|
||||||
|
print DIFF $$body, "\n";
|
||||||
|
close (DIFF);
|
||||||
|
|
||||||
|
} elsif ($input eq '1') {
|
||||||
system($config{clearcmd});
|
system($config{clearcmd});
|
||||||
# ignore SIGPIPE (Bug in more and less)
|
# ignore SIGPIPE (Bug in more and less)
|
||||||
$SIG{PIPE} = 'IGNORE';
|
$SIG{PIPE} = 'IGNORE';
|
||||||
|
|
|
@ -124,18 +124,31 @@ sub process {
|
||||||
# Mailbox / Maildir
|
# Mailbox / Maildir
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
my $readfilename;
|
||||||
|
|
||||||
|
if ($caller==0) {
|
||||||
|
# called from uvvote.pl: use configured mailbox file
|
||||||
|
$readfilename = $config{votefile};
|
||||||
|
} else {
|
||||||
|
# else use filename provided in function call
|
||||||
|
$readfilename = $filename;
|
||||||
|
# and create backup archive filename
|
||||||
|
$filename .= '.processed';
|
||||||
|
}
|
||||||
|
|
||||||
my $mgr = Mail::Box::Manager->new;
|
my $mgr = Mail::Box::Manager->new;
|
||||||
my $folder;
|
my $folder;
|
||||||
|
|
||||||
eval{
|
eval{
|
||||||
$folder = $mgr->open( folder => $config{votefile},
|
$folder = $mgr->open( folder => $readfilename,
|
||||||
create => 0,
|
create => 0,
|
||||||
access => 'rw',
|
access => 'rw',
|
||||||
type => $config{mailboxtype},
|
type => $config{mailboxtype},
|
||||||
expand => 'LAZY',
|
expand => 'LAZY',
|
||||||
|
remove_when_empty => 0,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
die UVmessage::get("READMAIL_NOMAILFILE", (FILE => $config{votefile})) . "\n\n" if $@;
|
die UVmessage::get("READMAIL_NOMAILFILE", (FILE => $readfilename)) . "\n\n" if $@;
|
||||||
|
|
||||||
# Iterate over the messages.
|
# Iterate over the messages.
|
||||||
foreach (@$folder) {
|
foreach (@$folder) {
|
||||||
|
@ -149,7 +162,7 @@ sub process {
|
||||||
} else {
|
} else {
|
||||||
$fromline .= 'foo@bar.invalid';
|
$fromline .= 'foo@bar.invalid';
|
||||||
}
|
}
|
||||||
$fromline .= ' ' . localtime() . "\n"; #strftime ('%a %b %d %H:%M:%S %Y', localtime) . "\n";
|
$fromline .= ' ' . localtime($_->timestamp()) . "\n";
|
||||||
push (@mails, $fromline . $mail);
|
push (@mails, $fromline . $mail);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,7 @@ MENU_UNRECOGNIZED_LIST = Stimme
|
||||||
MENU_VIOLATEDRULE = Regel ${RULE} verletzt.
|
MENU_VIOLATEDRULE = Regel ${RULE} verletzt.
|
||||||
MENU_PROBLEMS = Die folgenden Probleme muessen beseitigt werden:
|
MENU_PROBLEMS = Die folgenden Probleme muessen beseitigt werden:
|
||||||
MENU_CAPTION = Auswahlmenue:
|
MENU_CAPTION = Auswahlmenue:
|
||||||
|
MENU_DIFF_BALLOT = Wahlschein mit Original vergleichen (diff)
|
||||||
MENU_SHOW_MAIL = Anzeigen der Wahlmail
|
MENU_SHOW_MAIL = Anzeigen der Wahlmail
|
||||||
MENU_CHANGE_PROPERTIES = Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
|
MENU_CHANGE_PROPERTIES = Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
|
||||||
MENU_ADDRESS = Mailadresse
|
MENU_ADDRESS = Mailadresse
|
||||||
|
|
|
@ -77,6 +77,10 @@ multigroup = 1
|
||||||
condition1 = $yes>=2*$no
|
condition1 = $yes>=2*$no
|
||||||
condition2 = $yes>=50
|
condition2 = $yes>=50
|
||||||
|
|
||||||
|
# Datei mit Musterwahlschein, wie er im CfV geposted wurde. Wird fuer
|
||||||
|
# Vergleich mit ankommenden Wahlscheinen per "diff" genutzt.
|
||||||
|
sampleballotfile = ballot.sample
|
||||||
|
|
||||||
# Ergebnisdatei, in der alle Einzelergebniss zusammengeschrieben werden
|
# Ergebnisdatei, in der alle Einzelergebniss zusammengeschrieben werden
|
||||||
# (wird bei jedem Programmlauf neu erstellt!)
|
# (wird bei jedem Programmlauf neu erstellt!)
|
||||||
resultfile = ergebnis.alle
|
resultfile = ergebnis.alle
|
||||||
|
@ -207,6 +211,9 @@ clearcmd = clear
|
||||||
# Windows-Verzeichnis kopieren (URL siehe README-Datei)
|
# Windows-Verzeichnis kopieren (URL siehe README-Datei)
|
||||||
pager = less
|
pager = less
|
||||||
|
|
||||||
|
# Shellbefehl fuer Dateivergleich
|
||||||
|
diff = diff
|
||||||
|
|
||||||
# Datei mit diversen Meldungen und Textfragmenten (Resourcendatei)
|
# Datei mit diversen Meldungen und Textfragmenten (Resourcendatei)
|
||||||
messagefile = messages.cfg
|
messagefile = messages.cfg
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# UseVoteGer 4.11 Wahlscheingenerierung
|
# UseVoteGer 4.12 Wahlscheingenerierung
|
||||||
# (c) 2001-2012 Marc Langer <uv@marclanger.de>
|
# (c) 2001-2014 Marc Langer <uv@marclanger.de>
|
||||||
#
|
#
|
||||||
# This script package is free software; you can redistribute it and/or
|
# This script package is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Public License as published by the
|
# modify it under the terms of the GNU Public License as published by the
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# UseVoteGer 4.11 Bounce-Verarbeitung
|
# UseVoteGer 4.12 Bounce-Verarbeitung
|
||||||
# (c) 2001-2012 Marc Langer <uv@marclanger.de>
|
# (c) 2001-2014 Marc Langer <uv@marclanger.de>
|
||||||
#
|
#
|
||||||
# This script package is free software; you can redistribute it and/or
|
# This script package is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Public License as published by the
|
# modify it under the terms of the GNU Public License as published by the
|
||||||
|
|
4
uvcfv.pl
4
uvcfv.pl
|
@ -1,8 +1,8 @@
|
||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# UseVoteGer 4.11 Personalisierte Wahlscheine
|
# UseVoteGer 4.12 Personalisierte Wahlscheine
|
||||||
# (c) 2001-2012 Marc Langer <uv@marclanger.de>
|
# (c) 2001-2014 Marc Langer <uv@marclanger.de>
|
||||||
#
|
#
|
||||||
# This script package is free software; you can redistribute it and/or
|
# This script package is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Public License as published by the
|
# modify it under the terms of the GNU Public License as published by the
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# UseVoteGer 4.11 Stimmauswertung
|
# UseVoteGer 4.12 Stimmauswertung
|
||||||
# (c) 2001-2012 Marc Langer <uv@marclanger.de>
|
# (c) 2001-2014 Marc Langer <uv@marclanger.de>
|
||||||
#
|
#
|
||||||
# This script package is free software; you can redistribute it and/or
|
# This script package is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Public License as published by the
|
# modify it under the terms of the GNU Public License as published by the
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# UseVoteGer 4.11 Wahldurchfuehrung
|
# UseVoteGer 4.12 Wahldurchfuehrung
|
||||||
# (c) 2001-2012 Marc Langer <uv@marclanger.de>
|
# (c) 2001-2014 Marc Langer <uv@marclanger.de>
|
||||||
#
|
#
|
||||||
# This script package is free software; you can redistribute it and/or
|
# This script package is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Public License as published by the
|
# modify it under the terms of the GNU Public License as published by the
|
||||||
|
|
Loading…
Reference in a new issue