Compare commits
	
		
			26 commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 290f1a1631 | |||
| 68b0879787 | |||
| 150c91add6 | |||
| 68d2e7d047 | |||
| a5ab9d2620 | |||
| 3c2b60126f | |||
| b7e3bdd951 | |||
| a94e81c653 | |||
| adf1f9a735 | |||
| f9a99fd83a | |||
| 6f88a29957 | |||
| 923dc1773e | |||
| 3ab56bde53 | |||
| f5828d9fad | |||
| 3aca529725 | |||
| c1cc3954b4 | |||
| 62d56462b4 | |||
| 7ae85f86e3 | |||
| c50a97a62c | |||
| 7450382ef3 | |||
| e91a2b7fa5 | |||
| 300f47d616 | |||
| 6f31c0dc7a | |||
| c9497882fb | |||
| bb61da3743 | |||
| b0edfe72dd | 
					 21 changed files with 300 additions and 97 deletions
				
			
		
							
								
								
									
										71
									
								
								CHANGES
									
										
									
									
									
								
							
							
						
						
									
										71
									
								
								CHANGES
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,21 +1,76 @@
 | 
			
		|||
UseVoteGer Versionshistorie (aktuelle Version: 4.09, released 07.10.2007)
 | 
			
		||||
UseVoteGer Versionshistorie (aktuelle Version: 4.13, released 27.01.2022)
 | 
			
		||||
=========================================================================
 | 
			
		||||
 | 
			
		||||
TODO:
 | 
			
		||||
- aussortieren von Bounces aus Stimmenliste
 | 
			
		||||
- Unterstuetzung von Maildir
 | 
			
		||||
- [Zugschlus] ich fänd es klasse, wenn man eine Kopie des Wahlscheines ins
 | 
			
		||||
Abstimmungsverzeichnis legt und Usevote einem dann auf Abruf ein diff
 | 
			
		||||
oder wdiff zwischen Sollwahlschein und wirklich eingreichtem
 | 
			
		||||
Wahlschein macht. Auf diese Weise erwischt man auch kleine Änderungen
 | 
			
		||||
am Datenschutzhinweis (da bin ich eben in eine Falle von th-h getappt).
 | 
			
		||||
 | 
			
		||||
Version 4.13 (27.01.2022):
 | 
			
		||||
- BDSG-Klausel an die DSGVO angepasst
 | 
			
		||||
- "mailcmd" muss mit "--" enden, damit Mailadressen, die mit "-"
 | 
			
		||||
  beginnen, richtig erkannt werden.
 | 
			
		||||
- "diff -u" ist ein besserer Default fuer das Diff-Programm
 | 
			
		||||
- Standardwert fuer Mindest-JA-Stimmenzahl von 50 auf 15 verringert
 | 
			
		||||
 | 
			
		||||
Version 4.12 (28.02.2014):
 | 
			
		||||
- uvbounce.pl und uvballot.pl benutzen jetzt wieder den uebergebenen
 | 
			
		||||
  Dateinamen statt irrtuemlich das Mailboxfile aus usevote.cfg
 | 
			
		||||
  (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)
 | 
			
		||||
- im Fehlermenue wird nun der Name der Abstimmung als Ueberschrift
 | 
			
		||||
  angezeigt. Ausserdem wurde in UVmenu.pm ein redundanter Code-Abschnitt
 | 
			
		||||
  entfernt
 | 
			
		||||
- BDSG-Klausel muss nun standardmaessig zwingend mit JA beantwortet
 | 
			
		||||
  werden, DAFUER wird nicht mehr akzeptiert. Dies kann in usevote.cfg
 | 
			
		||||
  konfiguriert werden
 | 
			
		||||
- Regular Expression fuer Pruefung des Abstimmungsnamens weiter
 | 
			
		||||
  verbessert
 | 
			
		||||
- Standardwert fuer Mindest-JA-Stimmenzahl von 60 auf 50 verringert
 | 
			
		||||
 | 
			
		||||
Version 4.11 (25.09.2012):
 | 
			
		||||
- Regular Expression fuer Pruefung des Abstimmungsnamens verbessert.
 | 
			
		||||
  Es kam zu vielen False Positives
 | 
			
		||||
- Einlesen der Mailbox auf Perlmodul Mail::Box umgestellt, damit
 | 
			
		||||
  auch Maildir moeglich (neue Option "mailboxtype" in usevote.cfg).
 | 
			
		||||
  Archivierung erfolgt aber vorerst weiterhin immer als mbox
 | 
			
		||||
 | 
			
		||||
Version 4.10 (17.09.2012):
 | 
			
		||||
- Fehler in uvvote.pl, Zeile 126 behoben (Verarbeitung von temporaeren
 | 
			
		||||
  Dateien - es wurde nicht korrekt auf vorhandene Temp-Dateien
 | 
			
		||||
  geprueft)
 | 
			
		||||
- Typo in bdsgtext.cfg behoben
 | 
			
		||||
- doppelten Identifier "VOTE_NO_VOTES" in messages.cfg/uvvote.pl umbenannt
 | 
			
		||||
- templates/ack-mail: Votetaker (Unterschrift) linksbuendig statt 
 | 
			
		||||
  wie vorher rechtsbuendig einfuegen; Anleitung fuer Annullierungen
 | 
			
		||||
  verbessert; Hinweis darauf, dass Stimmaenderungen an den
 | 
			
		||||
  Voteaccount geschickt werden muessen und nicht einfach als Antwort
 | 
			
		||||
  auf die Ack-Mail geschickt werden koennen)
 | 
			
		||||
- Fehler in Annullierungsbearbeitung behoben (wurde nur bei erstem
 | 
			
		||||
  oder letztem Abstimmungspunkt ausgewertet)
 | 
			
		||||
- Abstimmungsname wird nun auf Korrektheit geprueft (Wahlschein gehört
 | 
			
		||||
  zur richtigen Abstimmung)
 | 
			
		||||
- neue Konfigurations-Option "ballotintro" und neues Template
 | 
			
		||||
  tpl_wrong_voting
 | 
			
		||||
- usenet@ und news@ werden nicht mehr als ungueltige Mailadressen
 | 
			
		||||
  angesehen. Vor allem usenet@ wird von vielen Waehlern verwendet.
 | 
			
		||||
- Aenderung der Wahlregeln: statt 60 nur noch 50 JA-Stimmen benoetigt
 | 
			
		||||
- kleinere Template-Aenderungen (verbesserte Texte/Formatierungen)
 | 
			
		||||
 | 
			
		||||
Version 4.09 (14.09.2007):
 | 
			
		||||
- "votefile"-Option in usevote.cfg an passendere Stelle verschoben und
 | 
			
		||||
  den Kommentar korrigiert (natuerlich gilt pop3=0 als Bedingung, nicht
 | 
			
		||||
  etwa wie vorher angegeben smtp=0)
 | 
			
		||||
- Fehler in Template für Ergebnisausgabe korrigiert (fehlendes Newline
 | 
			
		||||
- Fehler in Template fuer Ergebnisausgabe korrigiert (fehlendes Newline
 | 
			
		||||
  nach umgebrochenen Abstimmungspunkten)
 | 
			
		||||
- Fehler in Doku der Kommandozeilenoptionen von uvcount.pl behoben
 | 
			
		||||
  (--voters statt --votes)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										36
									
								
								README
									
										
									
									
									
								
							
							
						
						
									
										36
									
								
								README
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
UseVoteGer 4.09  (c) 2001-2007 Marc Langer
 | 
			
		||||
UseVoteGer 4.13  (c) 2001-2022 Marc Langer
 | 
			
		||||
 | 
			
		||||
UseVoteGer is a voting software for usenet votes.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -12,13 +12,14 @@ Many thanks to:
 | 
			
		|||
- Wolfgang Behrens (UseVoteGer 3.1, based on Frederik's translation, 1998/99)
 | 
			
		||||
- Cornell Binder for some good advice and code fragments
 | 
			
		||||
  (e.g. UVtemplate.pm, UVformats.pm)
 | 
			
		||||
- Thomas Hochstein for some patches
 | 
			
		||||
 | 
			
		||||
This is a complete rewrite of UseVoteGer 3.1 in Perl (former versions were
 | 
			
		||||
written in C). Not all functions of Usevote/UseVoteGer 3.x are implemented!
 | 
			
		||||
 
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
UseVoteGer 4.09 - Usenet-Abstimmungssoftware
 | 
			
		||||
UseVoteGer 4.13 - Usenet-Abstimmungssoftware
 | 
			
		||||
===========================================
 | 
			
		||||
 | 
			
		||||
von Marc Langer <uv@marclanger.de>
 | 
			
		||||
| 
						 | 
				
			
			@ -89,9 +90,6 @@ I. Einmalig bei der Usevote-Erstinstallation
 | 
			
		|||
       sehr einfach mit "perl -MCPAN -e shell", ActivePerl fuer
 | 
			
		||||
       Windows hat einen eigenen Paketmanager)
 | 
			
		||||
 | 
			
		||||
       Achtung: Bei meinem ActivePerl 5.6.1 war eine alte Libnet-Version
 | 
			
		||||
       enthalten, die noch keine SMTP-Authentication unterstuetzte.
 | 
			
		||||
       Bei Benutzung dieses Features muss evtl. erst upgedated werden.
 | 
			
		||||
 | 
			
		||||
II. Fuer jedes Voting
 | 
			
		||||
   (1) usevote.cfg auf das durchzufuehrende Voting anpassen
 | 
			
		||||
| 
						 | 
				
			
			@ -190,8 +188,8 @@ UVrules.pm        Routinen zur Regelverarbeitung (usevote.rul)
 | 
			
		|||
UVsendmail.pm     Routinen zum Erzeugen von Mails
 | 
			
		||||
UVtemplate.pm     Routinen zur Verarbeitung von Vorlagen (Templates)
 | 
			
		||||
bdsgtext.cfg      Spezieller Text fuer den Wahlschein (Hinweis auf
 | 
			
		||||
                  Datenschutzgesetz), muss ausserhalb Deutschlands ggfls.
 | 
			
		||||
                  angepasst oder kann ignoriert werden (bdsg=0 in usevote.cfg)
 | 
			
		||||
                  DSGVO), muss ausserhalb der EU ggfls. angepasst werden
 | 
			
		||||
                  oder kann dort ignoriert werden (bdsg=0 in usevote.cfg)
 | 
			
		||||
mailpatterns.cfg  Wildcards fuer verdaechtige Mailadressen
 | 
			
		||||
messages.cfg      Programm-Meldungen (Ressourcen-Datei)
 | 
			
		||||
scheinkennungen   Speicherung der Scheinkennungen bei personalisierten
 | 
			
		||||
| 
						 | 
				
			
			@ -327,6 +325,7 @@ ohne die .pl und .pm Dateien jedesmal mitzukopieren. Folgende Dateien
 | 
			
		|||
sollten im Abstimmungsverzeichnis vorhanden sein (notwendig ist nur
 | 
			
		||||
usevote.cfg, darin können alle anderen Pfade angepasst werden):
 | 
			
		||||
 | 
			
		||||
ballot.sample
 | 
			
		||||
bdsgtext.cfg
 | 
			
		||||
mailpatterns.cfg
 | 
			
		||||
messages.cfg
 | 
			
		||||
| 
						 | 
				
			
			@ -407,6 +406,7 @@ mit einzelnen Stimmen wirst Du interaktiv durch Menues gefuehrt.
 | 
			
		|||
Meistens gibt es folgende Moeglichkeiten, die durch die
 | 
			
		||||
eingeklammerten Buchstaben und Zahlen aufgerufen werden koennen:
 | 
			
		||||
 | 
			
		||||
(0) Wahlschein mit Original vergleichen (diff)
 | 
			
		||||
(1) Anzeigen der Wahlmail
 | 
			
		||||
 | 
			
		||||
Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
 | 
			
		||||
| 
						 | 
				
			
			@ -415,6 +415,7 @@ Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
 | 
			
		|||
(4) Stimmen
 | 
			
		||||
(5) Scheinkennung
 | 
			
		||||
(6) Datenschutzklausel
 | 
			
		||||
(7) Abstimmung
 | 
			
		||||
 | 
			
		||||
(i) Diese Stimme ignorieren (ohne Benachrichtigung verwerfen)
 | 
			
		||||
(w) Weiter
 | 
			
		||||
| 
						 | 
				
			
			@ -429,8 +430,11 @@ Teilweise gibt es Unteroptionen:
 | 
			
		|||
Nun solltest Du zunaechst mit (1) die Mail ansehen und anhand
 | 
			
		||||
der bemaengelten Punkte entscheiden, ob der Wahlschein gueltig
 | 
			
		||||
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
 | 
			
		||||
eine Stimme nicht korrekt erkannt hat) oder auch einfach die
 | 
			
		||||
Korrektheit bestaetigen.
 | 
			
		||||
| 
						 | 
				
			
			@ -521,7 +525,7 @@ Das Endergebnis kannst Du mit "uvcount.pl -r" ausgeben lassen.
 | 
			
		|||
Bei Verfahren mit mehreren Abstimmungspunkten wird automatusch
 | 
			
		||||
das folgende tabellarische Format verwendet:
 | 
			
		||||
 | 
			
		||||
 Ja  Nein : 2/3? >=60? : ang.? : Gruppe
 | 
			
		||||
 Ja  Nein : 2/3? >=15? : ang.? : Gruppe
 | 
			
		||||
==== ==== : ==== ===== : ===== : =======================================
 | 
			
		||||
 100   70 : Nein   Ja  :  Nein : Einrichtung von xyz
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -688,6 +692,10 @@ uvbounce.pl
 | 
			
		|||
  eingeschaltet und die Option -f (siehe unten) nicht benutzt wurde,
 | 
			
		||||
  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-
 | 
			
		||||
  Unterverzeichnis konfigurierbar (Datei "bouncelist").
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -960,7 +968,9 @@ Hier eine Auflistung der immer anzupassenden Optionen
 | 
			
		|||
votename         Name der Abstimmung
 | 
			
		||||
group1           Erster Abstimmungsgegenstand
 | 
			
		||||
group2           Zweiter (und so weiter durchnummerieren)
 | 
			
		||||
sampleballotfile Datei mit Musterwahlschein aus dem CfV fuer Dateivergleich (diff)
 | 
			
		||||
votefile         Mailbox mit eingehenden Stimmen (falls POP3 ausgeschaltet)
 | 
			
		||||
mailboxtype      Typ der Mailbox (mbox, maildir)
 | 
			
		||||
personal         Personalisierte Wahlscheine verwenden? [BOOL]
 | 
			
		||||
                 (siehe gesonderten Abschnitt weiter oben)
 | 
			
		||||
voteaccount      Mailadresse, unter der abgestimmt werden kann
 | 
			
		||||
| 
						 | 
				
			
			@ -980,7 +990,7 @@ onestep          Mails direkt verschicken und Ergebnisse speichern? [BOOL]
 | 
			
		|||
multigroup       Fuer das Ergebnis auch bei Eingruppenabstimmung des
 | 
			
		||||
                 Mehrgruppenformat waehlen? [BOOL]
 | 
			
		||||
condition1       Bedingungen fuer einen Erfolg der Abstimmung in Perl-Syntax
 | 
			
		||||
condition2       (normalerweise "$yes>=2*$no" und "$yes>=60"
 | 
			
		||||
condition2       (normalerweise "$yes>=2*$no" und "$yes>=15"
 | 
			
		||||
resultfile       Datei fuer Gesamtergebnis (normalerweise ergebnis.alle)
 | 
			
		||||
idfile           Datei mit Scheinkennungen (bei "personal=1")
 | 
			
		||||
pop3             POP3 benutzen? [BOOL] (andernfalls Stimmen aus Datei lesen)
 | 
			
		||||
| 
						 | 
				
			
			@ -1018,7 +1028,7 @@ domailfile       Name des Shellscripts zum Versenden der Bestaetigungsmails
 | 
			
		|||
                 (falls smtp=0, normalerweise tmp/domail)
 | 
			
		||||
mailcmd          Aufruf des Mail Transfer Agents (MTA) zum Verschicken der
 | 
			
		||||
                 Bestaetigungsmails (falls smtp=0), z.B.
 | 
			
		||||
                 "sendmail -oi -oem -femail@adresse"
 | 
			
		||||
                 "sendmail -oi -oem -femail@adresse --"
 | 
			
		||||
sleepcmd         Weiteres Kommando, welches nach jeder Mail aufgerufen werden
 | 
			
		||||
                 soll (falls smtp=0). Sinnvoll ist ein "sleep x", wobei x bei
 | 
			
		||||
                 langsamen Systemen hoeher gewaehlt werden sollte.
 | 
			
		||||
| 
						 | 
				
			
			@ -1027,6 +1037,10 @@ clearcmd         Shellbefehl zum Loeschen des Bildschirms (Standard: clear),
 | 
			
		|||
                 oder Betriebssystem keinen solchen Befehl bereitstellen,
 | 
			
		||||
                 sollte ein Kommando verwendet werden, welches eine Trennlinie
 | 
			
		||||
                 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
 | 
			
		||||
                 Bildschirm (normalerweise "less"). Unter Windows muss "more"
 | 
			
		||||
                 benutzt werden, unter Unix hingegen gibt es moeglicherweise
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ require Exporter;
 | 
			
		|||
$VERSION = "0.18";
 | 
			
		||||
 | 
			
		||||
# Usevote version
 | 
			
		||||
$usevote_version = "UseVoteGer 4.09";
 | 
			
		||||
$usevote_version = "UseVoteGer 4.13";
 | 
			
		||||
 | 
			
		||||
sub read_config {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -27,6 +27,7 @@ sub read_config {
 | 
			
		|||
  # Default configuration options (overwritten in usevote.cfg)
 | 
			
		||||
  %config = (votefile             => "votes",
 | 
			
		||||
             votename             => "unkonfiguriertes Usevote",
 | 
			
		||||
             sampleballotfile     => "ballot.sample",
 | 
			
		||||
             resultfile           => "ergebnis.alle",
 | 
			
		||||
             rulefile             => "usevote.rul",
 | 
			
		||||
             badaddrfile          => "mailpatterns.cfg",
 | 
			
		||||
| 
						 | 
				
			
			@ -45,6 +46,7 @@ sub read_config {
 | 
			
		|||
             voteaccount          => "<> (unkonfiguriertes Usevote)",
 | 
			
		||||
             mailfrom             => "<> (unkonfiguriertes Usevote)",
 | 
			
		||||
             envelopefrom         => "<>",
 | 
			
		||||
             mailboxtype          => "mbox",
 | 
			
		||||
             mailstart            => "^From ",
 | 
			
		||||
             archivedir           => "fertig",
 | 
			
		||||
             tmpdir               => "tmp",
 | 
			
		||||
| 
						 | 
				
			
			@ -56,6 +58,7 @@ sub read_config {
 | 
			
		|||
             mailcc               => "",
 | 
			
		||||
             sleepcmd             => "sleep 1",
 | 
			
		||||
             clearcmd             => "clear",
 | 
			
		||||
             diff                 => "diff",
 | 
			
		||||
             pager                => "less",
 | 
			
		||||
             pop3                 => 0,
 | 
			
		||||
             pop3server           => "localhost",
 | 
			
		||||
| 
						 | 
				
			
			@ -89,8 +92,9 @@ sub read_config {
 | 
			
		|||
             nein_stimme          => '(N\s*E\s*I\s*N|N|(D\s*A\s*)?G\s*E\s*G\s*E\s*N)',
 | 
			
		||||
             enth_stimme          => '(E|E\s*N\s*T\s*H\s*A\s*L\s*T\s*U\s*N\s*G)',
 | 
			
		||||
             ann_stimme           => 'A\s*N\s*N\s*U\s*L\s*L\s*I\s*E\s*R\s*U\s*N\s*G',
 | 
			
		||||
             bdsg_confirm         => 'JA',
 | 
			
		||||
             condition1           => '$yes>=2*$no', # twice as many yes as no
 | 
			
		||||
             condition2           => '$yes>=60',    # min 60 yes votes
 | 
			
		||||
             condition2           => '$yes>=15',    # min 60 yes votes
 | 
			
		||||
             prop_formula         => '$yes/$no',
 | 
			
		||||
             tpl_ack_mail         => 'ack-mail',
 | 
			
		||||
             tpl_bouncelist       => 'bouncelist',
 | 
			
		||||
| 
						 | 
				
			
			@ -117,6 +121,7 @@ sub read_config {
 | 
			
		|||
             tpl_rule_violated    => 'rule-violated',
 | 
			
		||||
             begin_divider        => 'Alles vor dieser Zeile bitte loeschen',
 | 
			
		||||
             end_divider          => 'Alles nach dieser Zeile bitte loeschen',
 | 
			
		||||
             ballotintro          => 'WAHLSCHEIN fuer',
 | 
			
		||||
             nametext             => 'Dein Realname, falls nicht im FROM-Header:',
 | 
			
		||||
             nametext2            => 'Waehlername:',
 | 
			
		||||
             addresstext          => 'Waehleradresse:',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										38
									
								
								UVmenu.pm
									
										
									
									
									
								
							
							
						
						
									
										38
									
								
								UVmenu.pm
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -17,7 +17,8 @@ $VERSION = "0.4";
 | 
			
		|||
##############################################################################
 | 
			
		||||
# Menu for interaction with the votetaker                                    #
 | 
			
		||||
# 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 errors to correct (Array-Ref)                          #
 | 
			
		||||
# Return Values: 'w': proceed                                                #
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +26,7 @@ $VERSION = "0.4";
 | 
			
		|||
##############################################################################
 | 
			
		||||
 | 
			
		||||
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 $voter_addr = $$addr || '';
 | 
			
		||||
  my $voter_name = $$name || '';
 | 
			
		||||
| 
						 | 
				
			
			@ -59,6 +60,7 @@ sub menu {
 | 
			
		|||
  while (1) {
 | 
			
		||||
 | 
			
		||||
    system($config{clearcmd});
 | 
			
		||||
    print "-> $config{votename} <-\n";
 | 
			
		||||
    print UVmessage::get("MENU_PROBLEMS") . "\n";
 | 
			
		||||
 | 
			
		||||
    foreach my $error (keys %errors) {
 | 
			
		||||
| 
						 | 
				
			
			@ -68,6 +70,12 @@ sub menu {
 | 
			
		|||
    my $menucaption = UVmessage::get("MENU_CAPTION");
 | 
			
		||||
    print "\n\n$menucaption\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",
 | 
			
		||||
          UVmessage::get("MENU_CHANGE_PROPERTIES"), "\n",
 | 
			
		||||
          "(2) ", UVmessage::get("MENU_ADDRESS"), " [$voter_addr]\n";
 | 
			
		||||
| 
						 | 
				
			
			@ -79,6 +87,7 @@ sub menu {
 | 
			
		|||
      print "(5) ", UVmessage::get("MENU_BALLOT_ID"), " [$$ballot_id]\n"
 | 
			
		||||
        if ($config{personal});
 | 
			
		||||
      print "(6) ", UVmessage::get("MENU_BDSG"), "\n" if ($config{bdsg});
 | 
			
		||||
      print "(7) ", UVmessage::get("MENU_VOTING"), " [", $$voting, "]\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    print "\n",
 | 
			
		||||
| 
						 | 
				
			
			@ -93,7 +102,14 @@ sub menu {
 | 
			
		|||
    # only accept 1, 2, i and w if called from uvcfv.pl
 | 
			
		||||
    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});
 | 
			
		||||
      # ignore SIGPIPE (Bug in more and less)
 | 
			
		||||
      $SIG{PIPE} = 'IGNORE';
 | 
			
		||||
| 
						 | 
				
			
			@ -269,6 +285,22 @@ sub menu {
 | 
			
		|||
        $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) {
 | 
			
		||||
      my $ignore = UVmessage::get("MENU_IGNORE_STRING");
 | 
			
		||||
      # Set columns for Text::Wrap
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ use UVmessage;
 | 
			
		|||
use MIME::QuotedPrint;
 | 
			
		||||
use MIME::Base64;
 | 
			
		||||
use MIME::Parser;
 | 
			
		||||
use Mail::Box::Manager;
 | 
			
		||||
use POSIX qw(strftime);
 | 
			
		||||
 | 
			
		||||
use vars qw($VERSION);
 | 
			
		||||
| 
						 | 
				
			
			@ -118,6 +119,54 @@ sub process {
 | 
			
		|||
      close (UIDLCACHE) or print STDERR UVmessage::get("READMAIL_UIDL_CLOSE") . "\n";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $pop->quit();
 | 
			
		||||
 | 
			
		||||
  # Mailbox / Maildir
 | 
			
		||||
  } 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 $folder;
 | 
			
		||||
 | 
			
		||||
    eval{
 | 
			
		||||
      $folder = $mgr->open( folder => $readfilename,
 | 
			
		||||
                create => 0,
 | 
			
		||||
                access => 'rw',
 | 
			
		||||
                type   => $config{mailboxtype},
 | 
			
		||||
                expand => 'LAZY',
 | 
			
		||||
                remove_when_empty => 0,
 | 
			
		||||
              );
 | 
			
		||||
    };
 | 
			
		||||
    die UVmessage::get("READMAIL_NOMAILFILE", (FILE => $readfilename)) . "\n\n" if $@;
 | 
			
		||||
 | 
			
		||||
    # Iterate over the messages.
 | 
			
		||||
    foreach (@$folder) {
 | 
			
		||||
      my $mail = $_->string;
 | 
			
		||||
      $_->delete();
 | 
			
		||||
      my $fromline = 'From ';
 | 
			
		||||
      if ($mail =~ /From: .*?<(.+?)>/) {
 | 
			
		||||
        $fromline .= $1;
 | 
			
		||||
      } elsif ($mail =~ /From:\s+?(\S+?\@\S+?)\s/) {
 | 
			
		||||
        $fromline .= $1;
 | 
			
		||||
      } else {
 | 
			
		||||
        $fromline .= 'foo@bar.invalid';
 | 
			
		||||
      }
 | 
			
		||||
      $fromline .= ' ' . localtime($_->timestamp()) . "\n";
 | 
			
		||||
      push (@mails, $fromline . $mail);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # make archive of all mails
 | 
			
		||||
  my $fileproblem = 0;
 | 
			
		||||
  open (VOTES, ">$filename") or $fileproblem = 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -131,26 +180,6 @@ sub process {
 | 
			
		|||
                      (FILE => $filename)) . "\n";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    $pop->quit();
 | 
			
		||||
 | 
			
		||||
  } else {
 | 
			
		||||
    # open mail file
 | 
			
		||||
    open(VOTES, "<$filename")
 | 
			
		||||
        or die UVmessage::get("READMAIL_NOMAILFILE", (FILE => $filename)) . "\n\n";
 | 
			
		||||
 | 
			
		||||
    # read all mails
 | 
			
		||||
    my $i = 0;
 | 
			
		||||
    while (<VOTES>) {
 | 
			
		||||
      if (/$config{mailstart}/) {
 | 
			
		||||
        $i++;
 | 
			
		||||
      }
 | 
			
		||||
      $mails[$i] = ($mails[$i] || "") . $_;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # close mail file
 | 
			
		||||
    close(VOTES);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  foreach my $mail (@mails) {
 | 
			
		||||
    next unless $mail;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										13
									
								
								bdsgtext.cfg
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								bdsgtext.cfg
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -3,11 +3,16 @@
 | 
			
		|||
# wieder abgeprueft wird. Alle Zeilen, die mit dem Kommentarzeichen #
 | 
			
		||||
# anfangen, werden ignoriert.
 | 
			
		||||
#
 | 
			
		||||
Zur Verarbeitung des Wahlscheines und inbesondere der Veroeffentlichung
 | 
			
		||||
des Ergebnisses ist deine Zustimmung zur Speicherung, Auswertung und
 | 
			
		||||
Zur Verarbeitung des Wahlscheines und insbesondere der Veroeffentlichung
 | 
			
		||||
des Ergebnisses ist Deine Einwilligung zur Speicherung, Auswertung und
 | 
			
		||||
Veroeffentlichung deiner Stimmdaten (Name und E-Mail-Adresse in
 | 
			
		||||
Verbindung mit dem Stimmverhalten) im Rahmen dieses Verfahrens
 | 
			
		||||
erforderlich. Wenn du im Feld unterhalb dieses Absatzes "JA"
 | 
			
		||||
eintraegst, erklaerst du dich damit einverstanden. In allen anderen
 | 
			
		||||
Faellen wird der Wahlschein mit Ruecksicht auf das deutsche
 | 
			
		||||
Bundesdatenschutzgesetz verworfen und nicht gewertet.
 | 
			
		||||
Faellen wird der Wahlschein mit Ruecksicht auf die DSGVO verworfen
 | 
			
		||||
und nicht gewertet. Die Einwilligung kann jederzeit mit Wirkung
 | 
			
		||||
fuer die Zukunft widerrufen werden. Dafuer genuegt eine E-Mail an
 | 
			
		||||
den Votetaker. Die Wertung und Veroeffentlichung der Stimmdaten
 | 
			
		||||
kann auch durch die erneute Einreichung eines Wahlscheins mit
 | 
			
		||||
"ANNULLIERUNG" (statt "JA" oder "NEIN") als Stimmabgabe beim
 | 
			
		||||
ersten Abstimmungspunkt verhindert werden.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,6 @@ hostmaster@
 | 
			
		|||
install@
 | 
			
		||||
mailer.*@
 | 
			
		||||
maint.*@
 | 
			
		||||
news@
 | 
			
		||||
newsmaster@
 | 
			
		||||
nobody@
 | 
			
		||||
operator@
 | 
			
		||||
| 
						 | 
				
			
			@ -38,5 +37,4 @@ sysop@
 | 
			
		|||
system@
 | 
			
		||||
test@
 | 
			
		||||
tutor@
 | 
			
		||||
usenet@
 | 
			
		||||
uucp@ 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,8 @@ MENU_INVALIDBDSG = Datenschutzhinweis fehlerhaft oder nicht bestaetigt.
 | 
			
		|||
MENU_DUPLICATEVOTE = Doppelte Stimmabgabe gefunden.
 | 
			
		||||
MENU_NOVOTE = Keine Stimmabgabe gefunden.
 | 
			
		||||
MENU_INVALIDVOTE = Ungueltige Stimmabgabe.
 | 
			
		||||
MENU_NOVOTING = Bezeichnung der Abstimmung nicht gefunden.
 | 
			
		||||
MENU_WRONGVOTING = Wahlschein fuer andere Abstimmung.
 | 
			
		||||
MENU_NOBALLOTID = Keine Scheinkennung gefunden.
 | 
			
		||||
MENU_WRONGBALLOTID = Scheinkennung falsch.
 | 
			
		||||
MENU_ADDRESSNOTREGISTERED = Adresse nicht registriert.
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +42,7 @@ MENU_UNRECOGNIZED_LIST = Stimme
 | 
			
		|||
MENU_VIOLATEDRULE = Regel ${RULE} verletzt.
 | 
			
		||||
MENU_PROBLEMS = Die folgenden Probleme muessen beseitigt werden:
 | 
			
		||||
MENU_CAPTION = Auswahlmenue:
 | 
			
		||||
MENU_DIFF_BALLOT = Wahlschein mit Original vergleichen (diff)
 | 
			
		||||
MENU_SHOW_MAIL = Anzeigen der Wahlmail
 | 
			
		||||
MENU_CHANGE_PROPERTIES = Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
 | 
			
		||||
MENU_ADDRESS = Mailadresse
 | 
			
		||||
| 
						 | 
				
			
			@ -67,6 +70,9 @@ MENU_BALLOT_ID = Scheinkennung
 | 
			
		|||
MENU_BDSG = Datenschutzklausel
 | 
			
		||||
MENU_BDSG_ACCEPTED = Datenschutzklausel wurde akzeptiert
 | 
			
		||||
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_WARNING = Die Stimme wird nicht aufgezeichnet, und es wird keine Bestaetigung verschickt. ${MENU_IGNORE_STRING} eingeben, wenn Du sicher bist: 
 | 
			
		||||
MENU_IGNORE_STRING = JA
 | 
			
		||||
| 
						 | 
				
			
			@ -162,7 +168,7 @@ COUNT_DELETED = ${NUM} Stimme(n) geloescht.
 | 
			
		|||
VOTE_RENAMING_MAILBOX = Benenne Stimmdatei um...
 | 
			
		||||
VOTE_WRITE_RESULTS = Ergebnisdatei ${FILE} nicht schreibbar!
 | 
			
		||||
VOTE_CLOSE_RESULTS = Ergebnisdatei ${FILE} konnte nicht erfolgreich geschlossen werden!
 | 
			
		||||
VOTE_NO_VOTES = Keine Stimmen zu verarbeiten.
 | 
			
		||||
VOTE_NO_VOTEMAILS = Keine Stimmen zu verarbeiten.
 | 
			
		||||
VOTE_NUM_VOTES = ${COUNT} Stimmen bearbeitet.
 | 
			
		||||
VOTE_NOT_SAVED = ${COUNT} Stimmen bearbeitet, aber nicht gespeichert.
 | 
			
		||||
VOTE_FIRSTRUN = 'uvvote clean' aufrufen, um Ergebnisse zu speichern und Bestaetigungen zu verschicken.
 | 
			
		||||
| 
						 | 
				
			
			@ -173,6 +179,7 @@ VOTE_UNREGISTERED_ADDRESS = Adresse nicht registriert
 | 
			
		|||
VOTE_INVALID_VOTE = Ungueltige Stimmabgabe
 | 
			
		||||
VOTE_VIOLATED_RULE = Regel ${RULE} verletzt
 | 
			
		||||
VOTE_NO_VOTES = Keine Stimmen abgegeben
 | 
			
		||||
VOTE_WRONG_VOTING = Wahlschein gehoert nicht zu dieser Abstimmung
 | 
			
		||||
VOTE_INVALID_ACCOUNT = Ungueltiger Account
 | 
			
		||||
VOTE_INVALID_ADDRESS = Ungueltige Adresse
 | 
			
		||||
VOTE_INVALID_REALNAME = Ungueltiger Realname
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,15 +5,22 @@ pos             := value pos | fill-right 2
 | 
			
		|||
group-first 	:= value group | first-words 50 
 | 
			
		||||
group-more  	:= value group | drop-words 50 | create-lines 50
 | 
			
		||||
vote            := value vote  | fill-both 10
 | 
			
		||||
votetaker       := value mailfrom | fill-left 65
 | 
			
		||||
votetaker       := value mailfrom
 | 
			
		||||
voteaccount-line := value voteaccount | fill-both 70
 | 
			
		||||
 | 
			
		||||
== TEMPLATE =================================================================
 | 
			
		||||
Diese automatische Nachricht wurde dir nach Zaehlung deiner Stimme
 | 
			
		||||
zugesandt. Wenn alles stimmt, gibt es keinen Anlass fuer eine Reaktion.
 | 
			
		||||
 | 
			
		||||
Wenn deine Stimme falsch registriert wurde, stimme bitte erneut ab,
 | 
			
		||||
indem du diese Mail komplett zitierst und die falschen Wertungen
 | 
			
		||||
korrigierst (zwischen die eckigen Klammern schreiben). Dabei darf
 | 
			
		||||
keinesfalls die laufende Nummer am Zeilenanfang entfernt werden.
 | 
			
		||||
Beachte bitte, dass Du Deine Stimme an die Abstimmadresse senden
 | 
			
		||||
musst! Es genuegt daher nicht, einfach auf diese E-Mail zu antworten,
 | 
			
		||||
vielmehr muss die Antwort an die Adresse
 | 
			
		||||
[$voteaccount-line]
 | 
			
		||||
gerichtet sein.
 | 
			
		||||
 | 
			
		||||
Diese Wahl ist oeffentlich, und die Adressen aller Waehlerinnen und
 | 
			
		||||
Waehler werden am Ende bekanntgegeben. Wenn du deine Adresse & Stimme
 | 
			
		||||
| 
						 | 
				
			
			@ -29,8 +36,8 @@ Wahlscheinkennung gueltig!
 | 
			
		|||
[$name-line]
 | 
			
		||||
  (Real-Namen sind fuer diese Abstimmung vorgeschrieben. Wenn hier
 | 
			
		||||
   nicht Dein wirklicher Name steht, dann korrigiere die Zeile
 | 
			
		||||
   bitte und sende die Nachricht zurueck; sonst kann die Stimme
 | 
			
		||||
   spaeter als ungueltig gewertet werden.)
 | 
			
		||||
   bitte und sende die Nachricht erneut an die Abstimmadresse,
 | 
			
		||||
   sonst kann die Stimme spaeter als ungueltig gewertet werden.)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Deine Stimmabgabe wurde wie folgt erkannt:
 | 
			
		||||
| 
						 | 
				
			
			@ -39,8 +46,7 @@ Deine Stimmabgabe wurde wie folgt erkannt:
 | 
			
		|||
[@group-more|                        [$line]\n]|\n]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Danke fuer deine Stimmabgabe.  Eine Kopie des CfV kannst du von mir er-
 | 
			
		||||
halten (bitte Namen der Abstimmung angeben, falls mehrere laufen).
 | 
			
		||||
Danke fuer deine Stimmabgabe.
 | 
			
		||||
 | 
			
		||||
[$votetaker]
 | 
			
		||||
\[mit [$usevote_version]\]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ bdsgtext-more   := value bdsgtext | drop-words 50 | create-lines 50
 | 
			
		|||
 | 
			
		||||
=-=-=-=-=-=-=-=- Alles vor dieser Zeile bitte loeschen =-=-=-=-=-=-=-=-
 | 
			
		||||
 | 
			
		||||
WAHLSCHEIN fuer [$votename-first]
 | 
			
		||||
[$ballotintro] [$votename-first]
 | 
			
		||||
[@votename-more|                [$line]\n]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ votetaker       := value mailfrom | fill-left 65
 | 
			
		|||
 | 
			
		||||
=-=-=-=-=-=-=-=- Alles vor dieser Zeile bitte loeschen =-=-=-=-=-=-=-=-
 | 
			
		||||
 | 
			
		||||
WAHLSCHEIN fuer [$votename-first]
 | 
			
		||||
[$ballotintro] [$votename-first]
 | 
			
		||||
[@votename-more|                [$line]\n]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,9 +11,10 @@ group-more            := value group | drop-words 40 | create-lines 40
 | 
			
		|||
 | 
			
		||||
Ergebnisse [$votename-first]
 | 
			
		||||
[@votename-more|           [$line]\n]
 | 
			
		||||
([$numvalid] gueltige Stimmen)
 | 
			
		||||
 | 
			
		||||
 Ja  Nein : 2/3? >=60? : ang.? : Gruppe
 | 
			
		||||
Es wurden [$numvalid] gueltige Stimmen abgegeben.
 | 
			
		||||
 | 
			
		||||
 Ja  Nein : 2/3? >=15? : ang.? : Gruppe
 | 
			
		||||
---- ---- : ---- ----- : ----- : ---------------------------------------
 | 
			
		||||
[@count|[$yes] [$no] : [?cond1| Ja |Nein] [?cond2| Ja |Nein]  : [?result| Ja |Nein]  : [$group-first]
 | 
			
		||||
[@group-more|          :            :       : [$line]\n]\n]
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +25,7 @@ Gegen dieses Ergebnis kann innerhalb einer Woche nach seiner
 | 
			
		|||
Veroeffentlichung Einspruch erhoben werden. Der Einspruch ist per
 | 
			
		||||
E-Mail bei der Moderation von de.admin.news.announce (Adressen
 | 
			
		||||
siehe Signatur) einzulegen.
 | 
			
		||||
 | 
			
		||||
Wenn es keine ernsthaften Einsprueche gibt oder diese abgelehnt
 | 
			
		||||
werden, wird die Moderation von de.admin.news.announce das
 | 
			
		||||
Ergebnis danach umsetzen.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,8 @@ group-more            := value group | drop-words 40 | create-lines 40
 | 
			
		|||
 | 
			
		||||
Ergebnisse [$votename-first]
 | 
			
		||||
[@votename-more|           [$line]\n]
 | 
			
		||||
([$numvalid] gueltige Stimmen)
 | 
			
		||||
 | 
			
		||||
Es wurden [$numvalid] gueltige Stimmen abgegeben.
 | 
			
		||||
 | 
			
		||||
 Ja  Nein : J>=N? Ja/Nein : ang.? : Gruppe
 | 
			
		||||
---- ---- : ----- ------- : ----- : ---------------------------------------
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +25,7 @@ Gegen dieses Ergebnis kann innerhalb einer Woche nach seiner
 | 
			
		|||
Veroeffentlichung Einspruch erhoben werden. Der Einspruch ist per
 | 
			
		||||
E-Mail bei der Moderation von de.admin.news.announce (Adressen
 | 
			
		||||
siehe Signatur) einzulegen.
 | 
			
		||||
 | 
			
		||||
Wenn es keine ernsthaften Einsprueche gibt oder diese abgelehnt
 | 
			
		||||
werden, wird die Moderation von de.admin.news.announce das
 | 
			
		||||
Ergebnis danach umsetzen.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,19 +8,21 @@ votename-text-more    := value votename | drop-words 30 | create-lines 72
 | 
			
		|||
 | 
			
		||||
Ergebnisse [$votename-first]
 | 
			
		||||
[@votename-more|           [$line]\n]
 | 
			
		||||
([$numvalid] gueltige Stimmen)
 | 
			
		||||
 | 
			
		||||
Es wurden [$numvalid] gueltige Stimmen abgegeben.
 | 
			
		||||
 | 
			
		||||
Es gab [$yes] Ja-Stimmen und [$no] Nein-Stimmen[?numabstain| bei [$numabstain] Enthaltungen].
 | 
			
		||||
[?numinvalid|[$numinvalid] Stimme(n) wurden als ungueltig gewertet.]
 | 
			
		||||
 | 
			
		||||
Es wurde [?cond1|die|keine] 2/3-Mehrheit erreicht und es gingen [?cond2|mehr|weniger] als
 | 
			
		||||
60 Ja-Stimmen ein. Damit ist die [$votename-text-first]
 | 
			
		||||
15 Ja-Stimmen ein. Damit ist die [$votename-text-first]
 | 
			
		||||
[@votename-text-more|[$line] |\n][?cond1|[?cond2|angenommen|abgelehnt]|abgelehnt].
 | 
			
		||||
 | 
			
		||||
Gegen dieses Ergebnis kann innerhalb einer Woche nach seiner
 | 
			
		||||
Veroeffentlichung Einspruch erhoben werden. Der Einspruch ist per
 | 
			
		||||
E-Mail bei der Moderation von de.admin.news.announce (Adressen
 | 
			
		||||
siehe Signatur) einzulegen.
 | 
			
		||||
 | 
			
		||||
Wenn es keine ernsthaften Einsprueche gibt oder diese abgelehnt
 | 
			
		||||
werden, wird die Moderation von de.admin.news.announce das
 | 
			
		||||
Ergebnis danach umsetzen.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										21
									
								
								templates/wrong-voting
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								templates/wrong-voting
									
										
									
									
									
										Normal 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]\]
 | 
			
		||||
							
								
								
									
										23
									
								
								usevote.cfg
									
										
									
									
									
								
							
							
						
						
									
										23
									
								
								usevote.cfg
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -75,7 +75,11 @@ multigroup = 1
 | 
			
		|||
# wird nur Bedingung 1 ausgewertet und kann z.B. auf "$yes>$no" gesetzt
 | 
			
		||||
# werden.
 | 
			
		||||
condition1 = $yes>=2*$no
 | 
			
		||||
condition2 = $yes>=60
 | 
			
		||||
condition2 = $yes>=15
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
# (wird bei jedem Programmlauf neu erstellt!)
 | 
			
		||||
| 
						 | 
				
			
			@ -90,6 +94,9 @@ pop3 = 1
 | 
			
		|||
# Mailbox, in der die zu verarbeitenden Mails liegen (falls pop3=0)
 | 
			
		||||
votefile = votes
 | 
			
		||||
 | 
			
		||||
# Typ der Mailbox (mbox, maildir)
 | 
			
		||||
mailboxtype = mbox
 | 
			
		||||
 | 
			
		||||
# POP3-Einstellungen fuer Abruf der eingehenden Wahlscheine:
 | 
			
		||||
# Server, Port, Benutzername, Passwort
 | 
			
		||||
pop3server = 127.0.0.1
 | 
			
		||||
| 
						 | 
				
			
			@ -183,7 +190,7 @@ domailfile = tmp/domail
 | 
			
		|||
 | 
			
		||||
# MTA-Aufruf zum Verschicken der Bestaetigungsmails
 | 
			
		||||
# nuetzlich ist die Sendmail-Option -f zum Setzen des Absenders
 | 
			
		||||
#mailcmd = sendmail -oi -oem -femail@adresse
 | 
			
		||||
#mailcmd = sendmail -oi -oem -femail@adresse --
 | 
			
		||||
 | 
			
		||||
# Weiteres Kommando, welches nach jeder Mail aufgerufen werden soll (falls smtp=0).
 | 
			
		||||
# Sinnvoll ist ein "sleep x", wobei x bei langsamen Systemen hoeher
 | 
			
		||||
| 
						 | 
				
			
			@ -205,6 +212,9 @@ clearcmd = clear
 | 
			
		|||
# Windows-Verzeichnis kopieren (URL siehe README-Datei)
 | 
			
		||||
pager = less
 | 
			
		||||
 | 
			
		||||
# Shellbefehl fuer Dateivergleich
 | 
			
		||||
diff = diff -u
 | 
			
		||||
 | 
			
		||||
# Datei mit diversen Meldungen und Textfragmenten (Resourcendatei)
 | 
			
		||||
messagefile = messages.cfg
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -227,6 +237,10 @@ mailstart = "^From "
 | 
			
		|||
begin_divider = Alles vor 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
 | 
			
		||||
# Wahlschein genauso stehen!
 | 
			
		||||
nametext = Dein Realname, falls nicht im FROM-Header:
 | 
			
		||||
| 
						 | 
				
			
			@ -267,6 +281,10 @@ enth_stimme = (E|E\s*N\s*T\s*H\s*A\s*L\s*T\s*U\s*N\s*G)
 | 
			
		|||
# Achtung, sollte auch in den Templates im Bestaetigungstext angepasst werden
 | 
			
		||||
ann_stimme = A\s*N\s*N\s*U\s*L\s*L\s*I\s*E\s*R\s*U\s*N\s*G
 | 
			
		||||
 | 
			
		||||
# RegExp fuer Bestaetigung der Datenschutzklause (case-insensitive)
 | 
			
		||||
# Standardmaessig wird nur JA erkannt
 | 
			
		||||
bdsg_confirm = JA
 | 
			
		||||
 | 
			
		||||
# Template files (these files are in the template directory defined above)
 | 
			
		||||
tpl_mailheader = "mailheader"            # generally used mail header
 | 
			
		||||
tpl_bouncelist = "bouncelist"            # used by uvbounce.pl
 | 
			
		||||
| 
						 | 
				
			
			@ -290,4 +308,5 @@ tpl_invalid_name = "invalid-name"        # used by uvvote.pl
 | 
			
		|||
tpl_multiple_votes = "multiple-votes"    # used by uvvote.pl
 | 
			
		||||
tpl_no_ballot = "no-ballot"              # 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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								uvballot.pl
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										4
									
								
								uvballot.pl
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							| 
						 | 
				
			
			@ -1,8 +1,8 @@
 | 
			
		|||
#!/usr/bin/perl -w
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# UseVoteGer 4.09 Wahlscheingenerierung
 | 
			
		||||
# (c) 2001-2005 Marc Langer <uv@marclanger.de>
 | 
			
		||||
# UseVoteGer 4.13 Wahlscheingenerierung
 | 
			
		||||
# (c) 2001-2022 Marc Langer <uv@marclanger.de>
 | 
			
		||||
# 
 | 
			
		||||
# 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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								uvbounce.pl
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										4
									
								
								uvbounce.pl
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							| 
						 | 
				
			
			@ -1,8 +1,8 @@
 | 
			
		|||
#!/usr/bin/perl -w
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# UseVoteGer 4.09 Bounce-Verarbeitung
 | 
			
		||||
# (c) 2001-2005 Marc Langer <uv@marclanger.de>
 | 
			
		||||
# UseVoteGer 4.13 Bounce-Verarbeitung
 | 
			
		||||
# (c) 2001-2022 Marc Langer <uv@marclanger.de>
 | 
			
		||||
# 
 | 
			
		||||
# 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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										8
									
								
								uvcfv.pl
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										8
									
								
								uvcfv.pl
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							| 
						 | 
				
			
			@ -1,8 +1,8 @@
 | 
			
		|||
#!/usr/bin/perl -w
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# UseVoteGer 4.09 Personalisierte Wahlscheine
 | 
			
		||||
# (c) 2001-2005 Marc Langer <uv@marclanger.de>
 | 
			
		||||
# UseVoteGer 4.13 Personalisierte Wahlscheine
 | 
			
		||||
# (c) 2001-2022 Marc Langer <uv@marclanger.de>
 | 
			
		||||
# 
 | 
			
		||||
# 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
 | 
			
		||||
| 
						 | 
				
			
			@ -152,9 +152,9 @@ sub process_request {
 | 
			
		|||
    # check for suspicious addresses
 | 
			
		||||
    foreach my $element (@bad_addr) {
 | 
			
		||||
      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 $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
 | 
			
		||||
        return 0 if ($res eq 'i');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								uvcount.pl
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										4
									
								
								uvcount.pl
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							| 
						 | 
				
			
			@ -1,8 +1,8 @@
 | 
			
		|||
#!/usr/bin/perl -w
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# UseVoteGer 4.09 Stimmauswertung
 | 
			
		||||
# (c) 2001-2005 Marc Langer <uv@marclanger.de>
 | 
			
		||||
# UseVoteGer 4.13 Stimmauswertung
 | 
			
		||||
# (c) 2001-2022 Marc Langer <uv@marclanger.de>
 | 
			
		||||
# 
 | 
			
		||||
# 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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										40
									
								
								uvvote.pl
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										40
									
								
								uvvote.pl
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							| 
						 | 
				
			
			@ -1,8 +1,8 @@
 | 
			
		|||
#!/usr/bin/perl -w
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# UseVoteGer 4.09 Wahldurchfuehrung
 | 
			
		||||
# (c) 2001-2005 Marc Langer <uv@marclanger.de>
 | 
			
		||||
# UseVoteGer 4.13 Wahldurchfuehrung
 | 
			
		||||
# (c) 2001-2022 Marc Langer <uv@marclanger.de>
 | 
			
		||||
# 
 | 
			
		||||
# 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
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +123,7 @@ if ($clean) {
 | 
			
		|||
  my $ext = time;
 | 
			
		||||
 | 
			
		||||
  opendir (TMP, $config{tmpdir});
 | 
			
		||||
  my @tmpfiles = readdir (DIR);
 | 
			
		||||
  my @tmpfiles = readdir (TMP);
 | 
			
		||||
  closedir (TMP);
 | 
			
		||||
  opendir (FERTIG, $config{archivedir});
 | 
			
		||||
  my @fertigfiles = readdir (FERTIG);
 | 
			
		||||
| 
						 | 
				
			
			@ -135,16 +135,6 @@ if ($clean) {
 | 
			
		|||
  my $thisresult = "ergebnis-" . $ext;
 | 
			
		||||
  my $thisvotes = "stimmen-" . $ext;
 | 
			
		||||
  
 | 
			
		||||
  # POP3 not activated: rename votes file
 | 
			
		||||
  unless ($config{pop3}) {
 | 
			
		||||
    print UVmessage::get("VOTE_RENAMING_MAILBOX"), "\n";
 | 
			
		||||
    rename ($config{votefile}, "$config{tmpdir}/$thisvotes")
 | 
			
		||||
       or die UVmessage::get("ERR_RENAME_MAILFILE") . "$!\n\n";
 | 
			
		||||
  
 | 
			
		||||
    #  wait, so that current mail deliveries can finalize
 | 
			
		||||
    sleep 2;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # open results file
 | 
			
		||||
  open (RESULT, ">>$config{tmpdir}/$thisresult")
 | 
			
		||||
     or die UVmessage::get("VOTE_WRITE_RESULTS", (FILE=>$thisresult)) . "\n\n";
 | 
			
		||||
| 
						 | 
				
			
			@ -158,7 +148,7 @@ if ($clean) {
 | 
			
		|||
 | 
			
		||||
  # no mails: exit here
 | 
			
		||||
  unless ($count) {
 | 
			
		||||
    print UVmessage::get("VOTE_NO_VOTES") . "\n\n";
 | 
			
		||||
    print UVmessage::get("VOTE_NO_VOTEMAILS") . "\n\n";
 | 
			
		||||
    exit 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -224,6 +214,7 @@ sub process_vote {
 | 
			
		|||
  my $onevote = 0;             # 0=no votes, 1=everything OK, 2=vote cancelled
 | 
			
		||||
  my $voteerror = "";          # error message in case of invalid vote
 | 
			
		||||
  my $ballot_id = "";          # ballot id (German: Wahlscheinkennung)
 | 
			
		||||
  my $voting = "";             # voting (should be votename)
 | 
			
		||||
 | 
			
		||||
  # found address?
 | 
			
		||||
  if ($voter_addr) {
 | 
			
		||||
| 
						 | 
				
			
			@ -239,6 +230,15 @@ sub process_vote {
 | 
			
		|||
    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?
 | 
			
		||||
  if ($config{personal}) {
 | 
			
		||||
    if ($$body =~ /$config{ballotidtext}\s+([a-z0-9]+)/) {
 | 
			
		||||
| 
						 | 
				
			
			@ -273,7 +273,7 @@ sub process_vote {
 | 
			
		|||
    # this matches on a single appearance:
 | 
			
		||||
    if ($$body =~ /#$votenum\W*?\[(.+)\]/) {
 | 
			
		||||
      # one or more vote strings were found
 | 
			
		||||
      $onevote = 1;
 | 
			
		||||
      $onevote ||= 1; # set $onevote to 1 if it was 0
 | 
			
		||||
      my $votestring = $1;
 | 
			
		||||
      if ($votestring =~ /^\W*$config{ja_stimme}\W*$/i) {
 | 
			
		||||
        $vote = "J";
 | 
			
		||||
| 
						 | 
				
			
			@ -319,7 +319,7 @@ sub process_vote {
 | 
			
		|||
    # Should read like this: #a [ STIMME ] Text
 | 
			
		||||
    # (Text is configurable in usevote.cfg)
 | 
			
		||||
    unless ($$body =~ /$bdsg_regexp/s &&
 | 
			
		||||
            $$body =~ /#a\W*?\[\W*?$config{ja_stimme}\W*?\]\W*?$bdsg2_regexp/is) {
 | 
			
		||||
            $$body =~ /#a\W*?\[\W*?$config{bdsg_confirm}\W*?\]\W*?$bdsg2_regexp/is) {
 | 
			
		||||
 | 
			
		||||
      push (@errors, 'InvalidBDSG');
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -343,7 +343,7 @@ sub process_vote {
 | 
			
		|||
  # Errors encountered?
 | 
			
		||||
  if (@errors) {
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
    my $tpl;
 | 
			
		||||
| 
						 | 
				
			
			@ -402,6 +402,12 @@ sub process_vote {
 | 
			
		|||
      my $msg = $template->processTemplate($config{tpl_bdsg_error});
 | 
			
		||||
      UVsendmail::mail($voter_addr, "Fehler", $msg, $msgid) if ($config{voteack});
 | 
			
		||||
      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}) {
 | 
			
		||||
      $voteerror = UVmessage::get("VOTE_NO_VOTES");
 | 
			
		||||
      my $template = UVtemplate->new();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue