Usevote 4.0.13
[usenet/usevote.git] / README
1 UseVoteGer 4.13  (c) 2001-2022 Marc Langer
2
3 UseVoteGer is a voting software for usenet votes.
4
5 This script package is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Public License as published by the
7 Free Software Foundation.
8
9 Many thanks to:
10 - Ron Dippold (Usevote 3.0, 1993/94)
11 - Frederik Ramm (German translation, 1994)
12 - Wolfgang Behrens (UseVoteGer 3.1, based on Frederik's translation, 1998/99)
13 - Cornell Binder for some good advice and code fragments
14   (e.g. UVtemplate.pm, UVformats.pm)
15 - Thomas Hochstein for some patches
16
17 This is a complete rewrite of UseVoteGer 3.1 in Perl (former versions were
18 written in C). Not all functions of Usevote/UseVoteGer 3.x are implemented!
19  
20 -------------------------------------------------------------------------------
21
22 UseVoteGer 4.13 - Usenet-Abstimmungssoftware
23 ===========================================
24
25 von Marc Langer <uv@marclanger.de>
26
27 aktuelle Versionen: http://www.usevote.de
28
29
30 Inhaltsverzeichnis
31 ==================
32
33 1.  Kurzbeschreibung
34 2.  Usevote fuer Ungeduldige
35 3.  Kompatibilitaet zu frueheren Versionen
36 4.  Liste der Dateien
37 5.  Anfangs-Konfiguration
38 6.  Konfiguration fuer einzelne Abstimmungen
39 7.  Wahlschein generieren
40 8.  Stimmen verarbeiten
41 9.  Unzustellbare Bestaetigungen
42 10. 2. CfV / Result
43 11. Datenschutz
44 12. Personalisierte Wahlscheine
45 13. Die einzelnen Programme
46 14. Die Konfigurationsdateien
47 15. Templates
48
49
50 1. Kurzbeschreibung
51 ===================
52
53 Diese Software vereinfacht die Durchfuehrung von Usenet-Abstimmungen.
54 Usevote in der Urversion wurde von Ron Dippold fuer die Reorganisation
55 der Gruppe comp.sys.ibm.pc.games geschrieben und spaeter fuer die
56 allgemeine Verwendung verbessert.
57
58 Die deutsche Uebersetzung von Frederik Ramm diente jahrelang als
59 Grundlage fuer CfV-Auswertungen im deutschsprachigen Raum.
60 Wolfgang Behrens von den German Volunteer Votetakers (GVV) passte
61 es spaeter an neue Begebenheiten (z.B. personalisierte Wahlscheine)
62 an. Jedoch liefen die UseVoteGer 3.1beta-Versionen aufgrund eines
63 unbekannten Fehlers nicht auf jedem System (Segmentation Fault).
64
65 Um groessere Flexibilitaet und Plattformunabhaengigkeit zu bieten,
66 habe ich mich entschlossen, UseVoteGer in Perl neu zu implementieren.
67 Getestet wurde diese Version mit Perl 5.x unter Linux sowie
68 ActiveState Perl unter Windows 98.
69
70
71 2. Usevote fuer Ungeduldige
72 ===========================
73
74 I. Einmalig bei der Usevote-Erstinstallation
75    (1) usevote.cfg nach Bedarf anpassen (selbsterklaerend)
76        ACHTUNG: Unter Windows gibt es das Programm "less" nicht, da "more"
77        aber einigermassen broken ist, sollte man sich less fuer Windows
78        herunterladen: http://www.greenwoodsoftware.com/less/less381d.zip
79        Notfalls laesst sich auch in usevote.cfg die Einstellung "pager"
80        auf "more" setzen, aber viel Freude hat man damit nicht...
81    (2) Evtl. die Templates im gleichnamigen Unterverzeichnis fuer
82        eigenen Geschmack anpassen. Die Templates enthalten saemtliche
83        Texte fuer Bestaetigungs-/Fehlermails sowie die Ausgabeformate
84        und Texte fuer die CfVs und das Result.
85    (3) Perlmodule MIME::Parser, MIME::QuotedPrint, Digest::MD5,
86        Date::Parse und Email::Date installieren, falls noch nicht vorhanden.
87        Bei Benutzung von POP3 oder SMTP (siehe usevote.cfg) muss
88        Libnet installiert sein (Net::POP3 und Net::SMTP).
89        (Fuer Perl-Einsteiger: Unter Unix geht die Modul-Installation
90        sehr einfach mit "perl -MCPAN -e shell", ActivePerl fuer
91        Windows hat einen eigenen Paketmanager)
92
93
94 II. Fuer jedes Voting
95    (1) usevote.cfg auf das durchzufuehrende Voting anpassen
96        (selbsterklaerend)
97    (2) bei Sonderregeln (Abhaengigkeiten der einzelnen Abstimmungspunkte)
98        in usevote.rul Regeln definieren (selbsterklaerend)
99    (3) CfV erstellen und Wahlschein mit uvballot.pl generieren
100    (4) Fertigen CfV einreichen und auf Veroeffentlichung warten ;-)
101    (5) Bis zum 2. CfV regelmaessig (an den ersten Tagen mehrmals taeglich,
102        spaeter einmal taeglich) dies tun:
103        - uvvote.pl durchlaufen lassen
104        - im Verzeichnis tmp/ die Datei ergebnis.* (Ergebnis der Auswertung)
105          und evtl. ack.* (Bestaetigungsmails an die Waehler) kontrollieren
106        - Falls es Probleme gab: Bitte den Abschnit "Stimmen verarbeiten"
107          weiter unten in dieser Datei genau durchlesen. Dort steht
108          beschrieben, wie Fehler korrigiert werden koennen
109        - "uvvote.pl clean" aufrufen, um die Bestaetigungen zu verschicken
110          und das Ergebnis zu speichern/archivieren
111        - Falls Wahlbestaetigungen als unzustellbar zurueckkommen, solltest
112          Du diese zusammen in einer Datei speichern oder in ein spezielles
113          POP3-Postfach leiten
114    (6) Zwischenbestaetigung fuer den 2. CfV mit "uvcount.pl -l" erzeugen und
115        veroeffentlichen. Falls Wahlbestaetigungen als unzustellbar
116        zurueckkamen, kannst Du mit "uvbounce.pl dateiname" automatisch eine
117        Liste der ungueltigen Adressen erzeugen ("dateiname" ist die Datei,
118        in die Du zuvor die Bounces gespeichert hattest). Siehe auch Abschnitt
119        "Unzustellbare Bestaetigungen" weiter unten in dieser Datei, dort
120        ist auch erklaert, wie die Bounces aus einem POP3-Postfach gelesen
121        werden koennen.
122    (7) Bis zum Result wieder wie (5)
123    (8) Zum vorgegebenen Zeitpunkt die Wahl abschliessen,
124        mit "uvcount.pl -r -v" Endergebnis erzeugen und veroeffentlichen
125        (zuvor wiederum Liste der ungueltigen Mailadressen erzeugen, siehe
126        Punkt 6)
127
128 Weitere Details finden sich im Folgenden.
129 Jeder Nutzer dieser Software sollte sich diesen Text wenigstens einmal
130 komplett durchlesen.
131
132 Abschnitt 6 beschreibt, wie mehrere Abstimmungen gleichzeitig durchgefuehrt
133 werden koennen, ohne saemtliche Programmdateien zu kopieren.
134
135
136 3. Kompatibilitaet zu frueheren Versionen
137 =========================================
138
139 - englische Usevote-Versionen: keine Kompatibilitaet
140
141 - deutsche Usevote-Versionen (Usevote 3.0a, UseVoteGer 3.1):
142   * Wahlscheine haben neue Markierungen zum sicheren Erkennen
143     der Stimmen. Bisherige Wahlscheine sind mit dieser Version
144     nicht mehr einsetzbar!
145
146   * acktext.txt gibt es nicht mehr, statt dessen sind im Unterverzeichnis
147     "templates" Vorlagen zu finden, die diese Texte enthalten.
148
149   * usevote.cfg ist komplett inkompatibel
150
151   * usevote.rul: voll kompatibel, ohne Einschraenkungen
152
153   * Ergebnisdateien: Inhalt kompatibel, aber Namensgebung geaendert
154     (obwohl irrelevant, da Umstieg auf diese Version waehrend
155     einer laufenden Wahl nicht moeglich)
156
157   * scheinkennungen: Dateiformat gaendert (aus selbigen Gruenden
158     nicht weiter wichtig)
159
160   * uvshell: integriert in uvvote.pl, ueber usevote.cfg steuerbar
161     
162   * uvvote.pl: Aufrufparameter geaendert / Zusammenfuehrung mit uvshell
163   
164   * uvcfv.pl: Alte Funktionalitaet ist nicht mehr implementiert,
165     statt dessen dient das Tool jetzt zum Generieren der persoenlichen
166     Wahlscheine und Verschicken des CfV an die Waehler
167  
168   * uvcount.pl: Beinhaltet auch uvack und uvdup. Drei Einzelprogramme
169     schienen mir ineffizient.
170
171   * uvbounce.pl: Ausgabeformat etwas anders
172
173
174 4. Liste der Dateien
175 ====================
176
177 * Ausgelieferte Dateien:
178
179 CHANGES           Versionsaenderungen
180 COPYING           GNU General Public License
181 README            Diese Datei
182 UVconfig.pm       Routinen zum Einlesen und Pruefen der Konfiguration
183 UVformats.pm      Routinen zum Formatieren von Texten in Templates
184 UVmenu.pm         Routinen zur Interaktion mit dem Wahlleiter
185 UVmessage.pm      Routinen zum Parsen von Texten und Ersetzen von Platzhaltern
186 UVreadmail.pm     Routinen zum Einlesen und MIME-Decodieren der Mails
187 UVrules.pm        Routinen zur Regelverarbeitung (usevote.rul)
188 UVsendmail.pm     Routinen zum Erzeugen von Mails
189 UVtemplate.pm     Routinen zur Verarbeitung von Vorlagen (Templates)
190 bdsgtext.cfg      Spezieller Text fuer den Wahlschein (Hinweis auf
191                   DSGVO), muss ausserhalb der EU ggfls. angepasst werden
192                   oder kann dort ignoriert werden (bdsg=0 in usevote.cfg)
193 mailpatterns.cfg  Wildcards fuer verdaechtige Mailadressen
194 messages.cfg      Programm-Meldungen (Ressourcen-Datei)
195 scheinkennungen   Speicherung der Scheinkennungen bei personalisierten
196                   Wahlscheinen. Muss zu Beginn der Abstimmung leer sein.
197 usevote.cfg       Konfigurationsdatei
198 usevote.rul       Abstimmungsregeln
199 uvballot.pl       Wahlschein aus Abstimmungsdaten erstellen
200 uvbounce.pl       Listen von unzustellbaren Bestaetigungen erzeugen
201 uvcfv.pl          Erstellen und Verschicken von personalisierten Wahlscheinen
202 uvcount.pl        Stimmenzaehlung, Erstellen von Waehlerlisten und
203                   Aussortieren von doppelten Stimmabgaben
204 uvvote.pl         Stimmen verarbeiten (fuer die taegliche Arbeit)
205
206 templates/                Verzeichnis mit Templates (Vorlagen)
207   ack-mail                Template fuer Bestaetigungsmails
208   address-not-registered  Fehlermail: Noch keine Scheinkennung fuer Adresse
209                           vergeben
210   ballot                  Template fuer einen Wahlschein
211   ballot-personal         Template fuer personalisierten Wahlschein
212   ballot-request          Template fuer eine Wahlscheinanforderung
213   bdsg-error              Fehlermail: Datenschutzklausel nicht akzeptiert
214   bouncelist              Template fuer Liste der ungueltigen Mailadressen
215   cancelled               Template fuer Bestaetigung der Stimmannullierung
216   invalid-account         Fehlermail: Fragwuerdige Mailadresse (Role Account)
217   invalid-name            Fehlermail: Kein gueltiger Name in Mail/Wahlschein
218                           gefunden
219   mailheader              Template fuer den Header von Mails an die Waehler
220   multiple-votes          Fehlermail: Widerspruechliche Stimmen im Wahlschein
221   no-ballot               Fehlermail: Kein Wahlschein in Mail gefunden
222   no-ballotid             Fehlermail: Keine Wahlscheinkennung gefunden
223   no-votes                Fehlermail: Keine Stimmen abgegeben
224   result-multi            Template fuer ein Wahlergebnis mit mehreren Gruppen
225   result-single           Template fuer ein Wahlergebnis mit einer Gruppe
226   result-proportional     Template fuer ein Wahlergebnis, bei dem das Verhaeltnis
227                           oder die Differenz von Ja- und Nein-Stimmen entscheidet
228                           (z.B. Moderationsnachwahlen, "proportional=1" gesetzt)
229   rule-violated           Fehlermail: Wahlregeln aus usevote.rul verletzt
230   voterlist               Template fuer eine Waehlerliste (2. CfV)
231   votes-multi             Template fuer eine Stimmenliste mit mehreren Gruppen
232   votes-single            Template fuer eine Stimmenliste bei einer Gruppe
233   wrong-ballotid          Fehlermail: Falsche Wahlscheinkennung angegeben
234
235 * Beim Programmlauf erstellte Dateien (Name ist konfigurierbar):
236
237 ergebnis.alle     Saemtliche Einzelergebnisse zusammengefasst (wird 
238                   bei jedem Lauf von uvvote.pl neu erstellt)
239 errors.log        Fehlermeldungen, die beim Programmlauf auftauchen,
240                   werden hier abgelegt. Normalerweise bleibt die Datei
241                   leer, ansonsten wird beim Programmende eine Warnung
242                   mit Verweis auf die Datei ausgegeben.
243 uidlcache         Eindeutige IDs der abgerufenen Mails (bei Benutzung
244                   von POP3). Darf waehrend einer laufenden Abstimmung
245                   keinesfalls geloescht werden, um Mehrfachzaehlung von
246                   Stimmen zu verhindern.
247 uidlcache_req     dto, fuer die Mailbox mit den Wahlscheinanforderungen
248                   (bei Verwendung von personalisierten Wahlscheinen)
249 uidlcache_bounce  dto, fuer die Mailbox mit den Bounces (wird von
250                   uvbounce.pl ausgewertet)
251 usevote.lock      Temporaere Lockdatei, um gleichzeitiges Ausfuehren
252                   mehrerer Instanzen zu verhindern. Kann (falls vorhanden)
253                   gefahrlos geloescht werden, wenn gerade keines der
254                   Usevote-Scripts laeuft.
255
256 * Folgende Unterverzeichnisse werden von Usevote im aktuellen
257   Verzeichnis (CWD) angelegt:
258
259 fertig/           Verzeichnis fuer Archivierung verarbeiteter Dateien
260 tmp/              Verzeichnis fuer temporaere Dateien
261
262 * Von Usevote dort erstellte Dateien:
263
264 ack.*             Bestaetigungsmails (in tmp/)
265 ack.control       Steuerungsdatei fuer Bestaetigungsmails (in tmp/)
266 domail            Shellscript zum Verschicken der Mails (in tmp/)
267 ergebnis.*        Ergebnisdateien einzelner Durchlaeufe (zunaecht in tmp/,
268                   spaeter nach fertig/ verschoben und archiviert)
269 stimmen.*         Archivierte Stimmendateien (dto.)
270
271
272 5. Anfangs-Konfiguration
273 ========================
274  
275 Zuerst solltest Du "usevote.cfg" fuer Dein System anpassen (Details
276 dort in den Kommentarzeilen und weiter hinten in dieser Dokumentation).
277 Unter Windows werden die Regular Expressions fuer die Stimmenerkennung
278 moeglicherweise lauter unlesbare Zeichen enthalten (anderer Zeichensatz),
279 dort sollten saemtliche in Namen vorkommende Umlaute und Buchstaben mit
280 Accents etc. aufgefuehrt werden. Weiter ist bei Nutzung von Windows zu
281 beachten, dass das Kommando zum Loeschen des Bildschirms "cls" und nicht
282 "clear" heisst. Dazu gibt es auch eine Einstellung in usevote.cfg. Den
283 standardmaessig eingestellten Pager "less" gibt es unter Windows zunaechst
284 nicht, more ist aber so buggy, dass man sich am besten "less" fuer
285 Windows herunterladen sollte:
286 http://www.greenwoodsoftware.com/less/less381d.zip
287
288 Im Unterverzeichnis "templates" findest Du Vorlagen, die fuer die
289 einzelnen Bestaetigungstexte, Mails, Wahlscheine und Waehlerlisten
290 verwendet werden. Hier kannst Du unter Beachtung der Syntax (siehe
291 gesonderte Dokumentation) alle Texte an Deinen Geschmack und Deine
292 Beduerfnisse anpassen.
293
294
295 6. Konfiguration fuer einzelne Abstimmungen
296 ===========================================
297  
298 Fuer jede Abstimmung muss eine eigene Konfigurationsdatei geschrieben
299 werden. Aendere einfach usevote.cfg entsprechend der Regeln fuer die
300 betreffende Abstimmung. Falls Du haeufiger Wahlleiter spielst, solltest
301 Du Dir eine globale Konfigurationsdatei mit Standardeinstellungen
302 (z.B. als ~/.usevote-defaults.cfg) anlegen und in der usevote.cfg nur
303 noch die Einstellungen setzen, die sich fuer jede Abstimmunge aendern.
304 Die globale Datei kann am Anfang der usevote.cfg mit folgender Zeile
305 eingebunden werden:
306
307 include ~/.usevote-defaults.cfg
308
309 Zu beachten ist aber, dass jeweils die letzte Definition einer Option
310 benutzt wird. Die usevote.cfg sollte daher wirklich nur noch
311 abstimmungsspezifische Einstellungen enthalten, um nicht versehentlich
312 die globalen Optionen zu überschreiben.
313
314 Ausserdem muss die Datei "usevote.rul" geprueft werden. Wenn Deine
315 Abstimmung irgendwelche speziellen Regeln enthaelt (z.B. man kann
316 nur fuer Gruppe x stimmen, wenn man auch fuer y gestimmt hat, oder man
317 muss fuer den .misc-Abschnitt stimmen, wenn man fuer irgendeinen
318 anderen Abschnitt gestimmt hat), dann solltest Du diese Datei lesen
319 und entsprechend aendern. Allerdings empfiehlt es sich, bereits im
320 RfD deutlich auf die Regeln hinzuweisen, die zur Anwendung kommen sollen.
321 Die eingegebenen Regeln koennen dann mit "uvvote -t" getestet werden.
322
323 Es ist auch moeglich, mehrere Abstimmungen gleichzeitig durchzufuehren,
324 ohne die .pl und .pm Dateien jedesmal mitzukopieren. Folgende Dateien
325 sollten im Abstimmungsverzeichnis vorhanden sein (notwendig ist nur
326 usevote.cfg, darin können alle anderen Pfade angepasst werden):
327
328 ballot.sample
329 bdsgtext.cfg
330 mailpatterns.cfg
331 messages.cfg
332 scheinkennungen
333 usevote.cfg
334 usevote.rul
335
336 Ggf. sollte das "templates"-Verzeichnis kopiert werden, falls
337 individuelle Templates fuer einzelne Abstimmungen verwendet werden.
338
339 Außerdem muessen i.d.R. einige Pfade in der usevote.cfg angepasst
340 werden. Dadurch ist auch die Angabe eines anderen Verzeichnisses
341 fuer einige der oben genannten Konfigurationsdateien moeglich,
342 falls diese zentral gepflegt werden sollen (z.B. messages.cfg und
343 mailpatterns.cfg).
344
345 Damit die Usevote-Perlmodule gefunden werden, sollten sie im
346 selben Verzeichnis wie die Programmdateien liegen bleiben. Ansonsten
347 muss eine Umgebungsvariable gesetzt werden:
348
349 PERL5LIB=..
350
351 .. steht für das übergeordnete Verzeichnis. Ggf. muss hier ein
352 absoluter Pfad eingetragen werden, wenn das Abstimmungsverzeichnis
353 kein Unterverzeichnis des Usevote-Verzeichnisses ist.
354
355 Je nach Betriebssystem kann die obige Zeile etwas anders aussehen,
356 unter Windows sollte z.B. "SET PERL5LIB=C:\PERL\USEVOTE" in die
357 autoexec.bat aufgenommen oder sonstwie ausgeführt werden (Pfad
358 natürlich entsprechend anpassen).
359
360
361 7. Wahlschein generieren
362 ========================
363  
364 Der Wahlschein ist ein Abschnitt des CfV, den die Leute zur Stimmabgabe
365 ausfuellen und zurueckschicken sollen. Am einfachsten erzeugst Du
366 diesen nach Anpassung der Konfiguration und ggfls. des Templates
367 mit "uvballot.pl". Folgendes Format ist erforderlich:
368
369 #1  [ Stimme ]  
370 #2  [ Stimme ]
371 [...]
372
373 Eine zusaetzliche Beschreibung rechts daneben macht es dem Waehler
374 einfacher, ist aber fuer Usevote nicht zwingend erforderlich. Wichtig
375 sind nur die fortlaufenden Nummern, die entsprechend der Eintraege
376 in usevote.cfg zugeordnet werden.
377
378 Je nach Konfiguration koennen weitere Zeilen noetig sein, dazu spaeter.
379
380 Als Stimme in den eckigen Klammern werden diverse Strings erkannt,
381 die in usevote.cfg definiert werden koennen. JA, NEIN und ENTHALTUNG
382 sind Standard, einige Abwandlungen sind ebenfalls moeglich.
383 Zusaetzlich kann ANNULLIERUNG verwendet werden, um eine schon abgegebene
384 Stimme zu loeschen und somit nicht im Result aufzutauchen.
385
386 Bei der Verwendung von persoenlichen Wahlscheinen (Abschnitt 6a der
387 Wahlregeln fuer de.*) ist das Vorgehen etwas anders, siehe hierzu
388 den gesonderten Abschnitt weiter hinten.
389
390
391 8. Stimmen verarbeiten
392 ======================
393
394 Falls POP3 nicht benutzt werden soll (siehe usevote.cfg), werden alle
395 Wahlmails zu einer Abstimmung aus einer Mailboxdatei gelesen
396 (Name/Pfad der Datei in usevote.cfg einstellbar). Standardmaessig
397 wird das Unix-Mailboxformat erkannt, dieses ist aber ueber "mailstart"
398 in usevote.cfg konfigurierbar (bei komplett anderen Formaten muesste
399 der Quellcode geaendert werden).
400
401 Wechsele nun in das Verzeichnis, in dem die passenden
402 Konfigurationsdateien liegen (normalerweise werden diese aus
403 dem aktuellen Verzeichnis gelesen, was mehrere gleichzeitige
404 Verfahren moeglich macht) und starte uvvote.pl. Bei Problemen
405 mit einzelnen Stimmen wirst Du interaktiv durch Menues gefuehrt.
406 Meistens gibt es folgende Moeglichkeiten, die durch die
407 eingeklammerten Buchstaben und Zahlen aufgerufen werden koennen:
408
409 (0) Wahlschein mit Original vergleichen (diff)
410 (1) Anzeigen der Wahlmail
411
412 Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
413 (2) Mailadresse
414 (3) Waehlername
415 (4) Stimmen
416 (5) Scheinkennung
417 (6) Datenschutzklausel
418 (7) Abstimmung
419
420 (i) Diese Stimme ignorieren (ohne Benachrichtigung verwerfen)
421 (w) Weiter
422
423 Teilweise gibt es Unteroptionen:
424   (a) OK (Zweifel sind unbegründet, ist alles in Ordnung)
425   (b) Aendern (z.B. wenn der Realname von Usevote nicht vollstaendig
426       erkannt wurde)
427   (c) Ungueltig (es handelt sich nach Deinem Ermessen nicht um
428       eine gueltige Stimmabgabe)
429
430 Nun solltest Du zunaechst mit (1) die Mail ansehen und anhand
431 der bemaengelten Punkte entscheiden, ob der Wahlschein gueltig
432 oder ungueltig ist bzw. welche Maengel tatsaechlich zutreffen.
433 Mit (0) kannst Du einen Dateivergleich zu einem vorher hinterlegten
434 Musterwahlschein ausfuehren ("diff"), um Aenderungen/Fehler schneller
435 zu sehen.
436
437 Mit den Optionen (2) bis (7) kannst Du einzelne Eigenschaften
438 des Wahlscheins nachbessern (wenn Usevote z.B. einen Namen oder
439 eine Stimme nicht korrekt erkannt hat) oder auch einfach die
440 Korrektheit bestaetigen.
441
442 Wenn Du alle oben auf der Seite aufgelisteten Maengel beseitigst,
443 indem Du die entsprechenden Optionen waehlst, wird die Stimme
444 akzeptiert. Bleiben Zweifel unausgeraeumt, wird eine entsprechende
445 Fehlermail verschickt (Du erhaeltst dann noch eine gesonderte
446 Warnung).
447
448 Zum Schluss kannst Du (w) wählen, um fortzufahren. Möchtest Du,
449 dass eine Stimme komplett ignoriert wird (weil es sich z.B.
450 um Spam handelt), kannst Du (i) waehlen und die folgende
451 Sicherheitsfrage mit "JA" beantworten.
452
453 Ist uvvote.pl durchgelaufen, koennen im Unterverzeichnis tmp/
454 (wird ebenfalls aktuellen Verzeichnis angelegt!) die ermittelten
455 Ergebnisse und erzeugten Mails an die Waehler noch einmal geprueft
456 werden. Ist alles in Ordnung, werden mittels "uvvote.pl clean"
457 die Mails verschickt und die Ergebnisse gespeichert sowie die
458 Originalmails archiviert. Hierzu wird das Verzeichnis fertig/
459 verwendet.
460
461 Falls der komplette uvvote-Lauf verworfen werden soll, kann
462 die Datei mit den Waehlermails (stimmen-xyz im tmp-Verzeichnis,
463 xyz entspricht der aktuellen Unixtime waehrend des Durchlaufs)
464 wieder an den urspruenglichen Platz zurueckkopiert werden
465 (bei POP3: fuer den Neuversuch POP3 abschalten und die 
466 Maildatei einlesen lassen, da auf dem Server die Mails
467 moeglicherweise geloescht wurden) und das komplette tmp-Verzeichnis
468 geloescht werden. Anschliessend den uvvote-Lauf erneut durchfuehren.
469 Wichtig ist nur, dass das Verzeichnis fertig/ waehrend der ganzen
470 Abstimmung mitsamt seines Inhaltes erhalten bleibt.
471
472 Noch ein kurzes Wort zum Verschicken der Mails: Jede Mail wird
473 in einer gesonderten durchnummerierten Datei (ack.1, ack.2, ...)
474 gespeichert, zusaetzlich wird eine Steuerungsdatei ("ack.control")
475 erzeugt, welche zu jeder Mail Dateinamen und Empfaenger auflistet.
476 Je nach Einstellung werden die Mails dann per SMTP verschickt oder
477 es wird ein Shellscript ("domail") erzeugt, welches nach und 
478 nach die Mails in Sendmail einspeist. Zwecks Serialisierung ist
479 in usevote.cfg die Einstellung "sleepcmd" konfigurierbar,
480 normalerweise wird ein "sleep 1" nach jeder Mail ausgefuehrt.
481 Das Verschicken der Mails (und damit ggfls. der Aufruf von "domail")
482 erfolgt automatisch mit "uvvote.pl clean".
483
484 Unter Windows ist nur SMTP moeglich, es sei denn, es gibt
485 die Befehle sendmail, sleep und rm ;-)
486
487
488 9. Unzustellbare Bestaetigungen
489 ===============================
490
491 Leider kommt es immer mal wieder vor, dass jemand bei der Abstimmung
492 eine ungueltige Mailadresse angegeben hat. In diesem Fall erhaeltst Du
493 einen Bounce an die Absenderadresse zurueck (diese laesst sich in
494 usevote.cfg mit der Option "envelopefrom" einstellen bzw. bei 
495 direkten Aufruf eines Mailers über die entsprechende Kommandozeilenoption
496 in der mailcmd-Einstellung, z.B. bei Sendmail -f). Du solltest
497 solche Fehlermails in einer gesonderten Datei speichern oder in
498 einem gesonderten POP3-Postfach halten und beim Erstellen
499 des 2. CfVs und des Results uvbounce.pl aufrufen.
500
501 Ausgegeben wird von uvbounce.pl eine Liste mit ungueltigen Adressen,
502 die einfach an den Abschnitt "ungueltige Stimmen" des 2. CfVs bzw.
503 Results angehaengt werden kann. Nicht vergessen, die Stimmen manuell
504 aus der Liste der gueltigen Stimmen zu loeschen (falls Du die
505 Policy verfolgst, nur Stimmen mit gueltiger Absenderadresse zu werten,
506 was empfehlenswert ist) und bei Bedarf das Ergebnis zu korrigieren!
507
508
509 10. 2.CfV / Result
510 ===================
511
512 Zum Erstellen des 2. CfVs kannst Du erst einmal den 1. CfV als Vorlage
513 benutzen. Am Ende sollte allerdings eine Liste der Personen folgen,
514 die bereits abgestimmt haben. Diese laesst sich mit "uvcount.pl -l"
515 erzeugen. Moeglicherweise fragt uvcount.pl wegen scheinbar doppelter
516 Stimmabgaben nach und bietet an, eine oder beide Stimmen zu ignorieren.
517 Du solltest das dann genauer untersuchen und die passende Wahl treffen.
518
519 Vorsicht bei doppelten Namen: Es gibt einige doppelt vorkommende
520 Namen, hinter denen sich voellig unterschiedliche Personen
521 verbergen! Die Mailadresse sollte in solchen Faellen Auskunft
522 geben koennen, notfalls einmal nachfragen.
523
524 Das Endergebnis kannst Du mit "uvcount.pl -r" ausgeben lassen.
525 Bei Verfahren mit mehreren Abstimmungspunkten wird automatusch
526 das folgende tabellarische Format verwendet:
527
528  Ja  Nein : 2/3? >=15? : ang.? : Gruppe
529 ==== ==== : ==== ===== : ===== : =======================================
530  100   70 : Nein   Ja  :  Nein : Einrichtung von xyz
531
532 Bei Abstimmungen ueber nur einen Punkt gibt es auch die Moeglichkeit,
533 einen einfachen beschreibenden Text zu verwenden:
534 "Es gab 100 JA und 70 NEIN-Stimmen ...".
535
536 Falls in usevote.cfg die Einstellung "multigroup = 1" gesetzt ist,
537 wird immer die tabellarische Form gewaehlt, bei "multigroup = 0"
538 benutzt uvcount.pl bei nur einem Abstimmungspunkt den beschreibenden
539 Text. Überschreiben laesst sich dieses mit Aufrufparametern:
540
541 uvcount.pl -r -m     = Tabellarisch (m = multigroup)
542 uvcount.pl -r -o     = Text (o = onegroup)
543
544 Falls in usevote.cfg die Option "proportional = 1" aktiviert ist,
545 wird standardmaessig folgendes Ausgabeformat angewandt:
546
547  Ja  Nein : J>=N? Ja/Nein : ang.? : Gruppe
548 ==== ==== : ===== ======= : ===== : ====================================
549  100   70 :  Ja    1.429  :       : Einrichtung von abc
550   80   90 : Nein   0.888  :       : Einrichtung von xyz
551
552 Das genaue Aussehen ist im Template "result-proportional" aenderbar,
553 die Bedingungen und Auswertungsformeln sind ueber usevote.cfg
554 einzustellen (prop_formula und condition1). Die Spalte "ang.?" muss
555 in diesem Fall manuell ausgefüllt werden, da manchmal auch mehrere
556 Abstimmungsgegenstände angenommen werden, z.B. bei Moderationsnachwahlen
557 für verschiedene Posten.
558
559 Die Waehlerliste mit abgegebenen Stimmen erzeugst Du mit
560 "uvcount -v". Diese Option laesst sich auch mit -r kombinieren,
561 so dass Du Dir das doppelte Aussortieren von Duplikaten sparst.
562 Wichtig: Diese Liste darf erst im Result veroeffentlicht werden,
563 nicht im 2. CfV!
564
565 Falls ein trivialer Schutz vor Spammern gewuenscht ist, koennen durch
566 eine Aenderung in den Template "voterlist", "votes-single", "votes-multi"
567 und "bouncelist" alle Mailadressen verfremdet werden. Entweder Du fuegst
568 folgende Definition ein:
569
570 mail            := value mail | replace '@' ' -at - '
571
572 Oder Du veraenderst direkt die vorgegebenen Formate, indem Du
573 die Mailadresse mit Hilfe des Pipe-Symbols durch die replace-Funktion
574 schickst:
575
576 multi-line := value mail | replace '@' ' -at- ' | justify-behind name 72
577
578 Die Replace-Funktion erwartet wie im Beispiel gezeigt zwei Werte,
579 die zu ersetztende Zeichenfolge (hier das '@') und eine neue Zeichenfolge,
580 die statt dessen eingesetzt werden soll und frei gewaehlt werden kann.
581
582 Wie bereits beschrieben, sollte am Ende des 2. CfVs bzw. Results noch die
583 Liste der gebouncten Mailadressen angehaengt werden (z.B. mit dem Programm
584 uvbounce.pl) und bei Bedarf die urspruenglichen Stimmen geloescht und das
585 Ergebnis korrigiert werden.
586
587
588 11. Datenschutz
589 ===============
590
591 Zum Schutz der deutschen Wahlleiter wurden spezielle Klauseln
592 aufgenommen, die vom Waehler die Erlaubnis zur Verarbeitung
593 der Stimme verlangen. Die Option "bdsg" in usevote.cfg schaltet
594 diese Sonderbehandlung ein oder aus. Folgende Besonderheiten
595 gelten bei Aktivierung:
596
597 - Im Wahlschein ist ein spezieller Hinweistext enthalten, der
598   aus der Datei bdsgtext.cfg genommen wird. Beim Verarbeiten
599   abgegebener Stimmen wird der Abschnitt wieder mit der Datei
600   verglichen. Fehlt er oder wurde er veraendert, wird der
601   Wahlschein dem Wahlleiter zur Kontrolle vorgelegt.
602   Die Fehlerpruefung ignoriert Quote- und Leerzeichen sowie
603   Zeilenumbrueche, kann aber versagen, wenn dem Quotezeichen
604   Initialen vorangestellt sind (wie in manchen Mailboxnetzen
605   ueblich) oder eine Silbentrennung ueber den Text gelaufen ist.
606
607 - Ausserdem enthaelt der Wahlschein eine spezielle Frage,
608   die mit JA zu beantworten ist. Anderenfalls muss ebenfalls
609   Kontrolle durch den Wahlleiter erfolgen. Der Text dieser
610   Frage ist ueber usevote.cfg einzustellen.
611
612 Erfolgt eine derartige Kontroll-Vorlage beim uvvote.pl-Lauf,
613 sollte der Wahlleiter sich den Wahlschein genau anschauen
614 und dann entweder im Menue die Option (6)(a) waehlen oder
615 mit (w) fortfahren. Im letzteren Fall wird die Stimme
616 verworfen und eine Hinweismail zurueckgeschickt.
617
618 Wenn eine Wahlbestaetigung veraendert und zurueckgeschickt
619 wird, fehlt der entsprechende Datenschutzhinweis. Da in
620 diesem Fall die Zustimmung aber bereits bei der ersten
621 Stimmabgabe gegeben wurde, kann der Wahlleiter beruhigt
622 die Korrektheit wie oben beschrieben bestaetigen.
623
624
625 12. Personalisierte Wahlscheine
626 ===============================
627
628 Die Wahlregeln fuer de.* sehen im Abschnitt 6a ein Verfahren
629 mit persoenlichen Wahlscheinen vor, die mit einer speziellen
630 Kennung versehen mehr Sicherheit vor Manipulation bieten.
631
632 Um dieses Verfahren einzuschalten, muss zunaechst die Option
633 "personal = 1" in usevote.cfg gesetzt werden und das Template
634 "ballot-personal" im Unterverzeichnis "templates" um den Text
635 des CfVs erweitert werden (einfach statt des von Sternchen
636 umrandeten Kommentars in der Datei einfuegen). Bitte eventuell
637 im Text vorkommende eckige Klammern wie folgt unschaedlich
638 machen: \[Text\] (Backslash voranstellen), da in den Templates
639 diese Klammern spezielle Bedeutungen haben (siehe gesonderten
640 Abschnitt zu dem Thema in dieser Datei).
641
642 Der gepostete CfV enthaelt i.d.R. nur einen Dummy-Abschnitt
643 mit Hinweis auf die gesonderte Wahlscheinanforderung. So ein
644 Abschnitt kann mit uvballot.pl generiert werden.
645
646 Der dana-Moderation sollte beim Einreichen des CfVs auch
647 ein Dummy-Wahlschein mitgesendet werden, wie er bei der
648 Wahlscheinanforderung verschickt wird. Dieser laesst sich mit
649 "uvcfv.pl -t" erzeugen.
650
651 Die eingehenden Wahlscheinanforderungen sollten an eine
652 spezielle Mailadresse gehen und dann mit uvcfv.pl verarbeitet
653 werden. Je nach Konfiguration in usevote.cfg werden die
654 Mails aus einer Mailboxdatei oder per POP3 eingelesen und jeweils
655 mit einem personalisierten Wahlschein beantwortet. Bitte vor
656 dem Posten des CfVs einen Test durchfuehren, um sicherzustellen,
657 dass die generierten Wahlscheine korrekt sind und auch bei
658 der Auswertung akzeptiert werden (hierbei wird die speziell
659 eingefuegte Wahlscheinkennung in Verbindung mit der Absenderadresse
660 geprueft).
661
662
663 13. Die einzelnen Programme
664 ===========================
665
666 uvballot.pl
667   Generiert den Wahlschein fuer den CfV. Bei personalisierten
668   Wahlscheinen (personal = 1 in usevote.cfg) wird nur ein Dummy-
669   Abschnitt mit Hinweisen zur Wahlscheinanforderung ausgegeben.
670
671   Die Vorlage fuer den Wahlschein ist im templates-Unterverzeichnis
672   konfigurierbar:
673   - ballot               Standard-Wahlschein (personal=0)
674   - ballot-request       Dummy-Abschnitt mit Hinweisen zur
675                          Wahlscheinanforderung (personal=1)
676   - ballot-personal      Wahlschein mit Scheinkennung, wird von
677                          uvcfv.pl verwendet
678
679   Aufrufparameter:
680
681   -c config_file         liest die Konfiguration aus config_file
682                          (usevote.cfg falls nicht angegeben)
683   -h                    
684   --help                 zeigen einen Hilfetext an
685
686
687 uvbounce.pl
688   Liest Bounces aus den uebergebenen Dateien oder aus einer POP3-
689   Mailbox ein (Verhalten haengt von usevote.cfg ab) und generiert
690   eine Liste von unzustellbaren Adressen, die an den 2. CfV oder das
691   Result angehaengt werden kann. Falls POP3 in usevote.cfg
692   eingeschaltet und die Option -f (siehe unten) nicht benutzt wurde,
693   werden die uebergebenen Dateinamen ignoriert.
694
695   Die Mails werden aus den uebergebenen Mailboxdateien geloescht
696   und statt dessen in einer neuen Datei mit der Erweiterung ".processed"
697   gespeichert.
698
699   Die Vorlage fuer die ausgegebene Liste ist im templates-
700   Unterverzeichnis konfigurierbar (Datei "bouncelist").
701
702   Aufrufparamter:
703
704   -c config_file         liest die Konfiguration aus config_file
705   -f dateiname(n)   
706   --file dateiname(n)    lesen die Bounces aus den uebergebenen Dateien,
707                          auch wenn in der Konfigurationsdatei POP3
708                          eingeschaltet ist. Diese Option wird benoetigt,
709                          falls zwar die Stimmzettel per POP3 eingelesen
710                          werden sollen, nicht aber die Bounces.
711                          Die Dateinamen werden durch Leerzeichen getrennt.
712   -h
713   --help                 zeigen einen Hilfetext an
714
715
716 uvcfv.pl
717
718   Liest Mailboxen ein und beantwortet alle Mails mit personalisierten
719   CfVs (falls personal=1 in usevote.cfg).
720
721   Die Vorlage fuer die ausgegebene Liste ist im templates-
722   Unterverzeichnis konfigurierbar (Datei "ballot-personal").
723
724   Aufrufparamter:
725
726   -c config_file        liest die Konfiguration aus config_file
727                         (usevote.cfg falls nicht angegeben)
728   -t
729   --test                gibt einen Dummy-Wahlschein mit Scheinkennung
730                         an der Standardausgabe aus, zur Pruefungszwecken
731   -h
732   --help                zeigen einen Hilfetext an
733
734
735 uvcount.pl
736
737   Zaehlt Stimmen und gibt Waehlerlisten aus. Dient zur Erstellung
738   von 2.CfV und Result.
739
740   Es werden die folgenden Vorlagen aus dem templates-Unterverzeichnis
741   benutzt:
742
743   - result-multi       Ergebnisauszaehlung bei mehreren Gruppen
744   - result-single      Ergebnisauszaehlung bei nur einem Abstimmungs-
745                        gegenstand (nicht tabellarisch, sondern im
746                        Fliesstext), falls in usevote.cfg multigroup=0
747                        gesetzt ist oder die Option -o verwendet wird
748                        (siehe unten)
749   - voterlist          Reine Auflistung der bisherigen Waehler ohne
750                        Stimmen (fuer 2. CfV)
751   - votes-multi        Stimmenliste im Mehrgruppenformat (eine Liste
752                        mit allen Waehlern, rechts daneben die jeweils
753                        abgegebenen Stimmen)
754   - votes-single       Stimmenliste im Eingruppenformat (getrennte
755                        Listen mit Ja-, Nein- und Enthaltungsstimmen)
756
757   Aufrufparamter:
758
759   -c config_file      liest die Konfiguration aus config_file
760                       (usevote.cfg falls nicht angegeben)
761   -f result_file      liest die Stimmen aus result_file (ueberschreibt
762                       die "resultfile"-Angabe aus der Konfigurationsdatei)
763   -l
764   --list              Geben eine Liste aller Waehler aus (ohne Stimmen).
765   -v
766   --voters            Wie --list, aber mit Angabe der abgegebenen Stimmen.
767   -r
768   --result            Ausgabe des Endergebnisses (kann mit --list oder
769                       --voters kombiniert werden).
770   -m
771   --multigroup        Benutzt auch bei Eingruppenabstimmungen das
772                       Mehrgruppenformat beim Endergebnis (ueberschreibt
773                       die Einstellung aus usevote.cfg).
774                       Nur in Kombination mit --result verwendbar,
775                       schliesst --onegroup aus.
776   -o
777   --onegroup          Benutzt bei Eingruppenabstimmungen immer das
778                       Eingruppenformat beim Endergebnis (ueberschreibt
779                       die Einstellung aus usevote.cfg).
780                       Nur in Kombination mit --result verwendbar,
781                       schliesst --multigroup aus.
782   -n
783   --nodup             Verzichtet auf das Aussortieren von doppelten
784                       Stimmabgaben. Nicht empfohlen!
785   -h
786   --help              zeigen einen Hilfetext an
787
788
789
790 uvvote.pl
791
792   Liest Mailboxen aus einer Datei oder per POP3 ein wertet die Mails
793   als Stimmzettel aus. Erst beim Aufruf mit der Option "clean" werden
794   die Ergebnisse endgueltig gespeichert und die Bestaetigungsmails
795   verschickt.
796
797   Es werden diverse Vorlagen aus dem templates-Unterverzeichnis
798   benutzt, um Bestaetigungs- und Fehlermails zu generieren.
799
800   Aufrufparameter:
801
802   -c config_file       liest die Konfiguration aus config_file
803                        (usevote.cfg falls nicht angegeben)
804   -t
805   --test               fuehrt einen Test der Konfiguration durch und
806                        gibt das ermittelte Ergebnis aus.
807   -h
808   --help               zeigen einen Hilfetext an
809
810
811
812 14. Die Konfigurationsdateien
813 =============================
814
815 mailpatterns.cfg
816 ----------------
817
818 Diese Datei enthaelt einen regulaeren Ausdruck (Perl-Syntax) pro
819 Zeile. Passt die Mailadresse eines Abstimmenden auf eines der Muster,
820 wird dem Wahlleiter bei der Auswertung eine Warnung angezeigt.
821 In der Regel kann man diese ignorieren, weil heutzutage viele
822 Privatleute ihre eigene Domain haben und Role-Accounts wie news@
823 benutzen. Sieht man aber so etwas wie news@t-online.de ist
824 Vorsicht angebracht und man sollte durch Auswahl von "(W)eiter" 
825 die Stimme ungueltig werten und eine entsprechende Fehlermail
826 zurueckschicken lassen.
827
828
829 messages.cfg
830 ------------
831
832 Hier sind alle kuerzeren Texte enthalten, die Usevote ausgibt,
833 unabhaengig davon, ob sie nur dem Wahlleiter bei der Programmausfuehrung
834 ausgegeben werden oder in persoenlichen Mails bzw. dem Result
835 auftauchen. Laengere Textpassagen sind als eigene Dateien im
836 "templates"-Verzeichnis zu finden und bieten weitergehende
837 Formatierungsmoeglichkeiten.
838
839 Jede Zeile in der messages.cfg besteht aus einem Identifier, einem
840 Gleichheitszeichen und dem eigentlichen Text. Der Identifier ist
841 grundsaetzlich in Grossbuchstaben gehalten und vom Programmcode fest
842 vorgegeben. Aenderungen duerfen nur rechts vom Gleichzeichen vorgenommen
843 werden, wenn Dir z.B. Formulierungen nicht gefallen oder Du anders-
844 sprachige Ausgaben haben moechtest.
845
846 Variablen sind ueber ${VARIABLE} einzubauen, allerdings sind die
847 Variablennamen und deren Inhalte vom Programmcode vorgegeben und
848 sollten beibehalten werden. Es gibt keine vordefinierten Variablen,
849 die Du selbst einbauen kannst, es sei denn, Du erweiterst den
850 Programmcode an der entsprechenden Stelle.
851
852 Die einzigen Texte, die fest im Programmcode stehen, sind die
853 Hilfetexte der einzelnen Programme (ueber die Option -h oder --help
854 aufrufbar) sowie die Startmeldungen (Copyright etc.) und initiale
855 Fehlermeldungen (usevote.cfg oder messages.cfg nicht gefunden,
856 ungueltige oder falsch kombinierte Aufrufparameter).
857
858
859 usevote.rul
860 -----------
861
862 Mit dieser Datei koennen spezielle Regeln fuer eine gueltige Stimmabgabe
863 bei Mehrgruppenabstimmungen erstellt werden, z.B. dass man Punkt 3 oder 4
864 waehlen muss, wenn man fuer Punkt 2 gestimmt hat (quasi als weitergehende
865 Auswahlmoeglichkeit). Solche Regeln verkomplizieren aber die Abstimmung
866 und sollten nur in Ausnahmefaellen benutzt werden. Urspruenglich gedacht
867 war diese Moeglichkeit z.B. fuer .misc Gruppen, die zwangsweise bei einer
868 Aufteilung mit angelegt werden mussten. Dadurch, dass das in den
869 Wahlregeln fuer de.* als Automatismus eingebaut ist, kann man sich
870 so etwas meistens sparen. Fuer den Fall, dass bei einer vorgeschlagenen
871 neuen Gruppe der Name noch unklar ist, gibt ebenfalls das Benutzen
872 von speziellen Wahlregeln wenig Sinn, da man auch eine Meinung ueber
873 den Gruppennamen haben kann, wenn man eigentlich gegen die Gruppe ist.
874
875 Wenn Du aber ein Verfahren betreust, in dem Du solche Sonderregeln
876 benoetigst, kannst Du eine Regel pro Zeile in der folgenden Syntax schreiben:
877
878 if .jjjjj then J....
879
880 Eine Regel beginnt immer mit "if", und danach folgen eine Anzahl Symbole;
881 diese Anzahl muss gleich der Anzahl der Gruppen sein, ueber die abgestimmt
882 wird. Oben geht es also um eine Abstimmung ueber sechs Gruppen.
883 Die Symbole hinter "if" geben an, in welchem Fall diese Regel Anwendung
884 finden soll. Falls sie zutrifft, wird die Bedingung hinter "then"
885 geprueft (dort muessen nochmal so viele Symbole folgen, wie Gruppen
886 im Wahlschein vorkommen). Ist diese Bedingung nicht erfuellt, wird
887 der Wahlschein dem Wahlleiter als regelverletzend vorgelegt, und
888 wenn diese mit "(w)eiter" den Fehler bestaetigt, wird eine entsprechende
889 Fehlermeldung zurueckgeschickt und die Stimme als ungueltig gewertet.
890
891 Folgende Symbole sind erlaubt:
892
893    J   eine JA-Stimme
894    N   eine NEIN-Stimme
895    E   eine Enthaltung
896    S   eine JA- oder NEIN-Stimme
897    H   eine Enthaltung oder JA-Stimme
898    I   eine Enthaltung oder NEIN-Stimme
899    .   egal (Ja, nein oder Enthaltung)
900    j   eine oder mehrere der markierten Gruppen hat JA-Stimme
901    n    ""   ""    ""     ""     ""       ""    ""  NEIN-Stimme
902    e    ""   ""    ""     ""     ""       ""    ""  Enthaltung
903    s    ""   ""    ""     ""     ""       ""    ""  Ja- oder Nein-Stimme
904    h    ""   ""    ""     ""     ""       ""    ""  Enthaltung oder Ja-Stimme
905    i    ""   ""    ""     ""     ""       ""    ""  Enthaltung oder Nein-Stimme
906
907 Hier noch ein Beispiel:
908     if S... then .ss.
909     if .S.. then ..E.
910     if ..S. then .E..
911
912 Diese Regeln sagen: Wer fuer die erste Gruppe abstimmt, der muss auch
913 fuer die zweite und dritte Gruppe abstimmen - egal wie. Ausserdem muss er
914 (Regeln 2 und 3) sich bei 3 enthalten, wenn er bei 2 eine Stimme abgibt
915 und umgekehrt. Die vierte Gruppe wird hier gar nicht betroffen.
916
917
918 usevote.cfg
919 -----------
920
921 Dieses ist die zentrale Konfigurationsdatei fuer Usevote. Einige
922 Einstellungen sind nur einmal auf das System und Deine Gewohnheiten
923 anzupassen, andere muessen fuer jede Abstimmung geaendert werden.
924 Alle Einstellungen sind mit mehr oder weniger sinnvollen
925 Standardwerten vorgegeben, die sich bei leerer usevote.cfg mittels
926 "uvvote.pl -t" ermitteln lassen.
927
928 Es lassen sich durch eine Zeile "include dateiname" weitere 
929 Konfigurationsdateien einbinden. Die Stelle, an der dieses geschieht,
930 ist dabei wichtig, da die usevote.cfg von oben nach unten gelesen
931 wird (zusätzlich eingebundene Konfigurationsdateien werden an der
932 Stelle der "include"-Zeile eingefügt) und bei mehrmals vorkommenen
933 Optionen der jeweils letzte gesetzte Wert benutzt wird.
934 Daher sollte eine Datei mit systemweiten Defaults am besten am
935 Anfang der usevote.cfg eingebunden werden, die dort gesetzten
936 Optionen sollten aber unbedingt aus der usevote.cfg geloescht werden,
937 damit die systemweiten Einstellungen nicht gleich wieder ueberschrieben
938 werden.
939
940 Das Format ist allgemein:
941
942 Option = Wert
943
944 Der Wert muss in manchen Faellen 0 (=aus) oder ungleich 0 (=an) sein,
945 in anderen Faellen muss eine exakte Zahl oder Zeichenkette eingegeben
946 werden. 
947
948 Alles, was hinter einem # Zeichen steht, wird als Kommentar gewertet
949 und ignoriert. Steht hinter einem Wert so ein Kommentar, wird
950 normalerweise alles bis zum Kommentarzeichen noch in den String
951 einbezogen. In so einem Fall sollte der Wert von Anfuehrungszeichen
952 umschlossen werden. Im folgenden Beispiel wird ein Dateiname
953 definiert:
954
955 # Der Dateiname endet mit 10 Leerzeichen (bis zum Kommentarzeichen):
956 tpl_mailheader = mailheader          # Kommentar
957
958 # Der Dateiname enthaelt keine Leerzeichen, da mit Anfuehrungsstrichen
959 # begrenzt:
960 tpl_mailheader = "mailheader"        # Kommentar
961
962 Folgt kein Kommentar in der selben Zeile, koennen die Anfuehrungsstriche
963 weggelassen werden.
964
965 Hier eine Auflistung der immer anzupassenden Optionen
966 (BOOL bedeutet, dass 0 (aus) oder 1 (an) eingetragen werden muss):
967
968 votename         Name der Abstimmung
969 group1           Erster Abstimmungsgegenstand
970 group2           Zweiter (und so weiter durchnummerieren)
971 sampleballotfile Datei mit Musterwahlschein aus dem CfV fuer Dateivergleich (diff)
972 votefile         Mailbox mit eingehenden Stimmen (falls POP3 ausgeschaltet)
973 mailboxtype      Typ der Mailbox (mbox, maildir)
974 personal         Personalisierte Wahlscheine verwenden? [BOOL]
975                  (siehe gesonderten Abschnitt weiter oben)
976 voteaccount      Mailadresse, unter der abgestimmt werden kann
977                  (Reply-To im CfV auf diese Adresse setzen)
978 requestfile      Datei mit Anforderungsmails bei "personal=1", falls
979                  POP3 ausgeschaltet ist
980 bdsg             Datenschutzklausel generieren und auf deren Existenz 
981                  pruefen? [BOOL] (siehe gesonderten Abschnitt weiter oben)
982 replyto          Reply-To Header auswerten? [BOOL] (nicht empfohlen und in
983                  de.* von den GVV nicht praktiziert)
984 voteack          Jede Stimme mit einer Bestaetigungsmail beantworten? [BOOL]
985                  (in de.* so ueblich)
986 mailcc           weitere Mailadresse, an die eine Kopie jeder Bestaetigungs-
987                  oder Fehlermail geschickt wird (fuer Archivzwecke)
988 onestep          Mails direkt verschicken und Ergebnisse speichern? [BOOL]
989                  ("uvvote clean" Aufruf entfaellt)
990 multigroup       Fuer das Ergebnis auch bei Eingruppenabstimmung des
991                  Mehrgruppenformat waehlen? [BOOL]
992 condition1       Bedingungen fuer einen Erfolg der Abstimmung in Perl-Syntax
993 condition2       (normalerweise "$yes>=2*$no" und "$yes>=15"
994 resultfile       Datei fuer Gesamtergebnis (normalerweise ergebnis.alle)
995 idfile           Datei mit Scheinkennungen (bei "personal=1")
996 pop3             POP3 benutzen? [BOOL] (andernfalls Stimmen aus Datei lesen)
997 pop3server       POP3-Server fuer eingehende Wahlscheine
998 pop3port         POP3-Serverport (normalerweise 110)
999 pop3user         Benutzername
1000 pop3pass         Passwort
1001 pop3delete       Mails nach Abruf vom Server loeschen? [BOOL]
1002 pop3uidlcache    Dateiname zum Speichern bereits abgerufener Mail-IDs (UIDL)
1003 pop3*_req        entsprechende Optionen fuer Mailbox mit eingehenden
1004                  Wahlscheinanforderungen (bei "personal=1")
1005 pop3*_bounce     entsprechende Optionen fuer Mailbox mit Bounces (Fehlermails)
1006                  fuer die Verarbeitung durch uvbounce.pl
1007 smtp             SMTP zum Verschicken von Mails benutzen? [BOOL]
1008                  Andernfalls wird direkt an den MTA uebergeben (nur Unix)
1009 smtpserver       SMTP-Server
1010 smtpport         SMTP-Serverport (normalerweise 25)
1011 smtpauth         SMTP-Authentication nach RFC 2554 benutzen? [BOOL]
1012 smtpuser         SMTP-Benutzername
1013 smtppass         SMTP-Passwort
1014 smtphelo         String fuer die HELO-Greeting bei SMTP (Default: Hostname)
1015 fqdn             String fuer den Host-Teil der Message-ID
1016                  (Fully Qualified Domain Name) (Default: Hostname)
1017 archivedir       Verzeichnis fuer Archivierung von verarbeiteten Stimmen
1018 tmpdir           temporaeres Verzeichnis
1019 templatedir      Verzeichnis mit Templates (Vorlagen) fuer diverse Zwecke
1020                  (normalerweise "templates", dort liegen bereits vordefinierte
1021                  Templates, die i.d.R. nicht angepasst zu werden brauchen)
1022 formats          Konvertierungsfunktionen fuer die Templates, mit Komma getrennt
1023                  (mitgelieferte UVformats.pm muss hier aufgefuehrt werden,
1024                  desweiteren koennen eigene Module mit weiteren Funktionen
1025                  hier eingebunden werden)
1026 controlfile      Name der Steuerungsdatei fuer den Mailversand (tmp/ack.control)
1027 domailfile       Name des Shellscripts zum Versenden der Bestaetigungsmails
1028                  (falls smtp=0, normalerweise tmp/domail)
1029 mailcmd          Aufruf des Mail Transfer Agents (MTA) zum Verschicken der
1030                  Bestaetigungsmails (falls smtp=0), z.B.
1031                  "sendmail -oi -oem -femail@adresse --"
1032 sleepcmd         Weiteres Kommando, welches nach jeder Mail aufgerufen werden
1033                  soll (falls smtp=0). Sinnvoll ist ein "sleep x", wobei x bei
1034                  langsamen Systemen hoeher gewaehlt werden sollte.
1035 clearcmd         Shellbefehl zum Loeschen des Bildschirms (Standard: clear),
1036                  muss unter Windows auf "cls" geaendert werden. Falls Shell
1037                  oder Betriebssystem keinen solchen Befehl bereitstellen,
1038                  sollte ein Kommando verwendet werden, welches eine Trennlinie
1039                  oder aehnliches auf dem Bildschirm ausgibt, z.B. mit "echo"
1040 diff             Shellbefehl zum Dateivergleich (diff); es koennen auch 
1041                  Parameter angegeben werden, z.B. "diff -u". Das verwendete
1042                  Programm muss das Lesen einer Datei von STDIN erlauben
1043                  ("-" statt Dateinamen fuer Einlesen von Standardeingabekanal)
1044 pager            Shellbefehl zum seitenweisen Darstellen von Mails auf dem
1045                  Bildschirm (normalerweise "less"). Unter Windows muss "more"
1046                  benutzt werden, unter Unix hingegen gibt es moeglicherweise
1047                  bei "more" Probleme mit der Umleitung von STDERR in eine Datei
1048                  (wie es z.B. von uvvote.pl benoetigt wird), daher ist "less"
1049                  der Standardwert.
1050 mailfrom         Absender fuer den From-Header der Bestaetigungsmails. Wird
1051                  auch in Bestaetigungsmails als Unterschrift eingefuegt und
1052                  sollte daher am besten in folgendem Format sein:
1053                  Vorname Nachname <gvv@foo.bar>
1054                  (ohne Anfuehrungsstriche, falls rfc-konform moeglich)
1055 envelopefrom     Absender fuer den Envelope (Return-Path) der Bestaetigungsmails
1056                  bei Verwendung von SMTP (bitte nur die Adresse eintragen, ohne
1057                  Klammern und Zusaetze). Wenn SMTP ausgeschaltet ist, muss
1058                  diese Einstellung entsprechend der Mailer-Doku in "mailcmd"
1059                  gesetzt werden (z.B. bei Sendmail und kompatiblen mit -f)
1060 messagefile      Datei mit diversen Meldungen und Textfragmenten (messages.cfg)
1061 rulefile         Datei mit Wahlregeln (usevote.rul)
1062 badaddrfile      Datei mit verdaechtigen Mailadressen (mailpatterns.cfg)
1063 errorfile        Datei fuer Fehlermeldungen beim Programmlauf (errors.log)
1064 mailstart        Einleitungszeile fuer naechste Mail (RegExp), falls Mails
1065                  aus einer Datei eingelesen werden (smtp=0), normalerweise
1066                  "^From"
1067 begin_divider    Trennlinien vor und nach dem Wahlschein
1068 end_divider      ("Alles vor/nach dieser Zeile bitte loeschen")
1069 nametext         Text fuer die Namens-Angabe im Wahlschein. Muss im
1070                  Wahlschein genauso stehen und wird beim Standardtemplate
1071                  auch aus dieser Einstellung uebernommen. Beispieltext:
1072                  "Dein Realname, falls nicht im FROM-Header:"
1073 nametext2        Text fuer Namens-Angabe in Bestaetigungsmails
1074                  (dito, Standardwert "Waehlername:")
1075 addresstext      Text fuer die Adress-Angabe im Wahlschein
1076                  (dito, Standardwert "Waehleradresse:")
1077 ballotidtext     Text für die Angabe der Wahlscheinkennung (falls personal=1)
1078                  (dito, Standardwert "Wahlscheinkennung:")
1079 bdsgtext         Text fuer Datenschutzklausel (falls bdsg=1),  erscheint als
1080                  Abstimmungspunkt (z.B. "Datenschutzklausel - Zustimmung: Ich
1081                  bin mit der Verarbeitung meiner Daten wie oben beschrieben
1082                  einverstanden")
1083 bdsgfile         Datei mit Erklaerungstext fuer BDSG-Klausel (bdsgtext.cfg)
1084 rightmargin      Zeilenbreite bei Ausgaben, die nicht durch Templates
1085                  gesteuert werden. Hat vor allem auf Bildschirmausgaben
1086                  Auswirkung.
1087 name_re          Regulaerer Ausdruck fuer Erkennung eines gueltigen Realnamens.
1088                  Beispiel: "[a-zA-ZäöüáàâéèêíìîóòôúùûÄÖÜÁÁÂÉÈÊÍÌÎÓÒÔÚÙÛß-]{2,} +
1089                  .*[a-zA-ZäöüáàâéèêíìîóòôúùûÄÖÜÁÁÂÉÈÊÍÌÎÓÒÔÚÙÛß]{2,}"
1090                  (muss ohne Umbruch in eine Zeile)
1091
1092 Regulaere Ausdruecke fuer Erkennung der Stimmen
1093 (Gross-/Kleinschreibung spielt keine Rolle):
1094
1095 ja_stimme        Standardwert: (J\s*A|J|(D\s*A\s*)?F\s*U\s*E\s*R)
1096 nein_stimme      Standardwert: (N\s*E\s*I\s*N|N|(D\s*A\s*)?G\s*E\s*G\s*E\s*N)
1097 enth_stimme      Standardwert: (E|E\s*N\s*T\s*H\s*A\s*L\s*T\s*U\s*N\s*G)
1098 ann_stimme       Standardwert: A\s*N\s*N\s*U\s*L\s*L\s*I\s*E\s*R\s*U\s*N\s*G
1099
1100 Definition der verwendeten Templatedateien
1101 (werden im Unterverzeichnis "templates" mitgeliefert):
1102
1103 tpl_mailheader      "mailheader"         # generally used mail header
1104 tpl_bouncelist      "bouncelist"         # used by uvbounce.pl
1105 tpl_result_multi    "result-multi"       # used by uvcount.pl -r -m
1106 tpl_result_single   "result-single"      # used by uvcount.pl -r -o
1107 tpl_votes_multi     "votes-multi"        # used by uvcount.pl -v (multiple groups)
1108 tpl_votes_single    "votes-single"       # used by uvcount.pl -v (single group only)
1109 tpl_voterlist       "voterlist"          # used by uvcount.pl -l (2nd CfV)
1110 tpl_ballot          "ballot"             # used by uvballot.pl (personal = 0)
1111 tpl_ballot_request  "ballot-request"     # used by uvballot.pl (personal = 1)
1112 tpl_ballot_personal "ballot-personal"    # used by uvcfv.pl    (personal = 1)
1113 tpl_addr_reg        "address-not-registered"  # used by uvvote.pl   (personal = 1)
1114 tpl_no_ballotid     "no-ballotid"        # used by uvvote.pl   (personal = 1)
1115 tpl_wrong_ballotid  "wrong-ballotid"     # used by uvvote.pl   (personal = 1)
1116 tpl_bdsg_error      "bdsg-error"         # used by uvvote.pl   (bdsg = 1)
1117 tpl_ack_mail        "ack-mail"           # used by uvvote.pl   (voteack = 1)
1118 tpl_cancelled       "cancelled"          # used by uvvote.pl
1119 tpl_invalid_account "invalid-account"    # used by uvvote.pl
1120 tpl_invalid_name    "invalid-name"       # used by uvvote.pl
1121 tpl_multiple_votes  "multiple-votes"     # used by uvvote.pl
1122 tpl_no_ballot       "no-ballot"          # used by uvvote.pl
1123 tpl_no_votes        "no-votes"           # used by uvvote.pl
1124 tpl_rule_violated   "rule-violated"      # used by uvvote.pl  (siehe usevote.rul)
1125
1126
1127 15. Templates
1128 =============
1129
1130 Die mitgelieferten Templates befinden sich im Verzeichnis "templates".
1131 In usevote.cfg koennen weitere Verzeichnisse definiert werden, in
1132 denen auch nach Templates gesucht wird ("templatedir", kommaseparierte
1133 Liste mit Verzeichnissen). Außerdem koennen dort die Dateinamen der einzelnen
1134 Templates eingestellt werden, wodurch es moeglich ist, in einzelnen
1135 Abstimmungen andere, selbst definierte Templates zu verwenden, die in
1136 einem gesonderten Verzeichnis abgelegt sind.
1137
1138 Eine Templatedatei besteht aus zwei Teilen. Am Anfang werden die
1139 Formatierungen bestimmter Schluessel definiert und nach einem Trenner
1140 folgt der eigentlich Template-Koerper, der dann von Programm bearbeitet
1141 und ausgegeben wird.
1142
1143    format-key := function1 param | function2 param
1144
1145    == TEMPLATE ====================================
1146
1147    Ich bin nun das eigentliche Template:
1148
1149    format-key: [$format-key]
1150
1151 Der Trenner beginnt mit den Zeichen '== TEMPLATE' danach koennen beliebige
1152 Zeichen folgen um die beiden Sektionen optisch voneinander abzugrenzen.
1153
1154 Wenn es keine Formatierungsanweisungen gibt, kann der Trenner auch
1155 weggelassen werden. D.h. wenn kein Trenner gefunden wird, wird der
1156 komplette Text als Template-Koerper betrachtet.
1157
1158
1159 Template-Koerper
1160 ----------------
1161
1162 Im Template-Koerper werden die zu ersetzenden Token durch eckige
1163 Klammern abgegrenzt. Sollen eckige Klammern im Text ausgegeben werden,
1164 muessen diese durch einen Backslash freigestellt werden.
1165
1166    [$termersetzung] [@schleife] nur eine \[ Klammer
1167
1168
1169 Termersetzung:
1170
1171     Ersetzt den Token durch den Wert des angegeben Schluessels:
1172
1173       [$formatierung] [$schluessel]
1174
1175     Es wird zuerst nach einer Formatierung mit den entsprechenden
1176     Bezeichner gesucht. Ist diese vorhanden, werden die entsprechenden
1177     Funktionen ausgefuehrt (siehe folgender Abschnitt).
1178
1179     Kann kein Format gefunden werden, wird direkt in der im Programmcode
1180     gefuellten Datenstruktur nach einem Schluessel mit dem angegeben
1181     Bezeichner gesucht und sein Wert eingesetzt. Alle Einstellungen
1182     aus der usevote.cfg sind automatisch als Schluessel definiert, es
1183     kann also z.B. [$nametext] jederzeit verwendet werden. Eingesetzt
1184     wird an der Stelle der mit "nametext = " definierte Text aus
1185     usevote.cfg.
1186
1187     Schlussendlich ist es noch moeglich einen default-Wert zu
1188     definieren, der eingesetzt wird, wenn keiner der obigen Wege
1189     erfolgreich war:
1190
1191       Hallo [$name|Unbekannter]!
1192
1193     Diese Zeile gibt, wenn kein Name definiert wurde, das Wort
1194     "Unbekannter" aus.
1195
1196
1197 Bedingte Verzeigung:
1198
1199     Ueberprueft ob der Wert des angegebenen Formats/Schluessel boolsch
1200     WAHR ist. Dementsprechend wird der then oder else Block eingefuegt:
1201
1202       [?if|then|else] oder auch nur [?if|then]
1203
1204     Die then/else Bloecke werden natuerlich auch auf Tokens geparst und
1205     diese dementsprechend ersetzt.
1206
1207
1208 Schleifen/Listen:
1209
1210     Der nachfolgende Textblock wird fuer alle Elemente des durch den
1211     Schluessel bezeichneten Arrays ausgefuehrt und eingefuegt.
1212
1213       [@schluessel|block] oder [@schluessel|block|sep]
1214
1215     Als zweiter Parameter kann ein Separtor definiert werden, mit dem
1216     sich z.B. kommaseparierte Listen erzeugen lassen, da der Separator
1217     eben nur zwischen den Elementen eingefuegt wird.
1218
1219     Auch fuer Schleifen koennen Formatierungen genutzt werden.Allerdings
1220     darf kein String zurueckgegeben werden, sondern ein Array mit einer
1221     Menge von UVtemplate-Objekten.
1222
1223
1224 Kommentare:
1225
1226     Token die nach der Bearbeitungen entfernt werden:
1227
1228        [# mich sieht man nicht]
1229
1230
1231 Sonstiges:
1232
1233     Um in Listen einen Zeilenumbruch zu erzwingen, muss lediglich ein
1234     '\n' eingefuegt werden, falls eine kompakte Definition der Liste
1235     erfolgen soll.
1236
1237        [@names|[name] [email]\n]
1238
1239
1240 Formatierungen
1241 --------------
1242
1243 Eine Formatierung besteht eigentlich nur aus dem entsprechenden
1244 Namen und einer beliebigen Anzahl von Funktionsaufrufen:
1245
1246    format := funktion param1 "param 2" | funktion param
1247
1248 Aehnlich der Unix-Shell-Funktionalitaet, wird dabei die Ausgabe
1249 einer Funktion an die folgende weitergeleitet. So ist es moeglich,
1250 verschiedenste simple Formatierungen zu kombinieren um nicht fuer
1251 jeden Spezialfall eine neue Funktion schreiben zu muessen.
1252
1253 Die jeweilige Formatierungsfunktion erhaelt als Input die
1254 Datenstruktur, den Output der vorherigen Funktion und die definierten
1255 Parameter in der entsprechenden Reihenfolge.  
1256
1257 Zahlen und einfache Bezeichner koennen direkt definiert werden.
1258 Sollen Sonderzeichen oder Leerzeichen uebergeben werden, muessen
1259 diese gequotet werden. Dazu kann ' oder " verwendet werden.
1260
1261 Die Funktionen geben im Allgemeinen einen String zurueck. Im Rahmen
1262 von Listen können auch Arrays uebergeben werden.
1263
1264 Die erste Funktion duerfte ueblicherweise 'value' sein. Sie gibt
1265 den Wert des angegeben Schluessel zurueck, der dann von den
1266 folgenden Funktionen definiert wird:
1267
1268    name-60 := value name | fill-right 60
1269
1270 Das Format "name-60" definiert also den Wert des Schluessel "name",
1271 der um Leerzeichen aufgefuellt wird, bis eine Laenge von 60 Zeichen
1272 erreicht wird.
1273
1274    name-email := value name | justify-behind mail 72
1275
1276 "name-email" resultiert in einem String, der zwischen den Werten von
1277 "name" und "email" genau so viele Leerzeichen enthaelt, damit der
1278 gesamte String 72 Zeichen lang ist.
1279
1280 Wird dieses Format in einer Liste angewandt, erhaelt man eine Tabelle
1281 in der die linke Spalte linksbuendig und die rechte Spalte
1282 entsprechend rechtsbuendig ist.
1283
1284 Soweit ein kleiner Ueberblick ueber die Formatierungen. Ausfuehrliche
1285 Funktionsbeschreibungen und weitere Beispiele finden sich in der
1286 POD-Dokumentation des Moduls UVformat ("perldoc UVformat.pm").
1287
1288 Es ist moeglich, selbst eigene Module mit Formatierungsfunktionen
1289 zu schreiben und ueber die Option "formats" in usevote.cfg einzubinden.
1290 Am besten kann dazu UVformats.pm als Vorlage genommen werden.
1291 Wichtig: der Name einer Formatierungsfunktionen darf nur aus
1292 Gross- und Kleinbuchstaben, Zahlen und Minuszeichen bestehen.
1293 Unterstriche, Punkte etc. sind nicht erlaubt!
1294
1295 Falls eine elementare Funktion fehlt, kannst Du Dich auch gerne
1296 bei mir melden und ich pruefe, wie sie sich einbauen laesst.
1297
1298 Marc Langer, im Oktober 2005
This page took 0.24508 seconds and 3 git commands to generate.