ac7e2c541a
Signed-off-by: Thomas Hochstein <thh@inter.net>
1285 lines
57 KiB
Plaintext
1285 lines
57 KiB
Plaintext
UseVoteGer 4.09 (c) 2001-2007 Marc Langer
|
||
|
||
UseVoteGer is a voting software for usenet votes.
|
||
|
||
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
|
||
Free Software Foundation.
|
||
|
||
Many thanks to:
|
||
- Ron Dippold (Usevote 3.0, 1993/94)
|
||
- Frederik Ramm (German translation, 1994)
|
||
- 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)
|
||
|
||
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
|
||
===========================================
|
||
|
||
von Marc Langer <uv@marclanger.de>
|
||
|
||
aktuelle Versionen: http://www.usevote.de
|
||
|
||
|
||
Inhaltsverzeichnis
|
||
==================
|
||
|
||
1. Kurzbeschreibung
|
||
2. Usevote fuer Ungeduldige
|
||
3. Kompatibilitaet zu frueheren Versionen
|
||
4. Liste der Dateien
|
||
5. Anfangs-Konfiguration
|
||
6. Konfiguration fuer einzelne Abstimmungen
|
||
7. Wahlschein generieren
|
||
8. Stimmen verarbeiten
|
||
9. Unzustellbare Bestaetigungen
|
||
10. 2. CfV / Result
|
||
11. Datenschutz
|
||
12. Personalisierte Wahlscheine
|
||
13. Die einzelnen Programme
|
||
14. Die Konfigurationsdateien
|
||
15. Templates
|
||
|
||
|
||
1. Kurzbeschreibung
|
||
===================
|
||
|
||
Diese Software vereinfacht die Durchfuehrung von Usenet-Abstimmungen.
|
||
Usevote in der Urversion wurde von Ron Dippold fuer die Reorganisation
|
||
der Gruppe comp.sys.ibm.pc.games geschrieben und spaeter fuer die
|
||
allgemeine Verwendung verbessert.
|
||
|
||
Die deutsche Uebersetzung von Frederik Ramm diente jahrelang als
|
||
Grundlage fuer CfV-Auswertungen im deutschsprachigen Raum.
|
||
Wolfgang Behrens von den German Volunteer Votetakers (GVV) passte
|
||
es spaeter an neue Begebenheiten (z.B. personalisierte Wahlscheine)
|
||
an. Jedoch liefen die UseVoteGer 3.1beta-Versionen aufgrund eines
|
||
unbekannten Fehlers nicht auf jedem System (Segmentation Fault).
|
||
|
||
Um groessere Flexibilitaet und Plattformunabhaengigkeit zu bieten,
|
||
habe ich mich entschlossen, UseVoteGer in Perl neu zu implementieren.
|
||
Getestet wurde diese Version mit Perl 5.x unter Linux sowie
|
||
ActiveState Perl unter Windows 98.
|
||
|
||
|
||
2. Usevote fuer Ungeduldige
|
||
===========================
|
||
|
||
I. Einmalig bei der Usevote-Erstinstallation
|
||
(1) usevote.cfg nach Bedarf anpassen (selbsterklaerend)
|
||
ACHTUNG: Unter Windows gibt es das Programm "less" nicht, da "more"
|
||
aber einigermassen broken ist, sollte man sich less fuer Windows
|
||
herunterladen: http://www.greenwoodsoftware.com/less/less381d.zip
|
||
Notfalls laesst sich auch in usevote.cfg die Einstellung "pager"
|
||
auf "more" setzen, aber viel Freude hat man damit nicht...
|
||
(2) Evtl. die Templates im gleichnamigen Unterverzeichnis fuer
|
||
eigenen Geschmack anpassen. Die Templates enthalten saemtliche
|
||
Texte fuer Bestaetigungs-/Fehlermails sowie die Ausgabeformate
|
||
und Texte fuer die CfVs und das Result.
|
||
(3) Perlmodule MIME::Parser, MIME::QuotedPrint, Digest::MD5,
|
||
Date::Parse und Email::Date installieren, falls noch nicht vorhanden.
|
||
Bei Benutzung von POP3 oder SMTP (siehe usevote.cfg) muss
|
||
Libnet installiert sein (Net::POP3 und Net::SMTP).
|
||
(Fuer Perl-Einsteiger: Unter Unix geht die Modul-Installation
|
||
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
|
||
(selbsterklaerend)
|
||
(2) bei Sonderregeln (Abhaengigkeiten der einzelnen Abstimmungspunkte)
|
||
in usevote.rul Regeln definieren (selbsterklaerend)
|
||
(3) CfV erstellen und Wahlschein mit uvballot.pl generieren
|
||
(4) Fertigen CfV einreichen und auf Veroeffentlichung warten ;-)
|
||
(5) Bis zum 2. CfV regelmaessig (an den ersten Tagen mehrmals taeglich,
|
||
spaeter einmal taeglich) dies tun:
|
||
- uvvote.pl durchlaufen lassen
|
||
- im Verzeichnis tmp/ die Datei ergebnis.* (Ergebnis der Auswertung)
|
||
und evtl. ack.* (Bestaetigungsmails an die Waehler) kontrollieren
|
||
- Falls es Probleme gab: Bitte den Abschnit "Stimmen verarbeiten"
|
||
weiter unten in dieser Datei genau durchlesen. Dort steht
|
||
beschrieben, wie Fehler korrigiert werden koennen
|
||
- "uvvote.pl clean" aufrufen, um die Bestaetigungen zu verschicken
|
||
und das Ergebnis zu speichern/archivieren
|
||
- Falls Wahlbestaetigungen als unzustellbar zurueckkommen, solltest
|
||
Du diese zusammen in einer Datei speichern oder in ein spezielles
|
||
POP3-Postfach leiten
|
||
(6) Zwischenbestaetigung fuer den 2. CfV mit "uvcount.pl -l" erzeugen und
|
||
veroeffentlichen. Falls Wahlbestaetigungen als unzustellbar
|
||
zurueckkamen, kannst Du mit "uvbounce.pl dateiname" automatisch eine
|
||
Liste der ungueltigen Adressen erzeugen ("dateiname" ist die Datei,
|
||
in die Du zuvor die Bounces gespeichert hattest). Siehe auch Abschnitt
|
||
"Unzustellbare Bestaetigungen" weiter unten in dieser Datei, dort
|
||
ist auch erklaert, wie die Bounces aus einem POP3-Postfach gelesen
|
||
werden koennen.
|
||
(7) Bis zum Result wieder wie (5)
|
||
(8) Zum vorgegebenen Zeitpunkt die Wahl abschliessen,
|
||
mit "uvcount.pl -r -v" Endergebnis erzeugen und veroeffentlichen
|
||
(zuvor wiederum Liste der ungueltigen Mailadressen erzeugen, siehe
|
||
Punkt 6)
|
||
|
||
Weitere Details finden sich im Folgenden.
|
||
Jeder Nutzer dieser Software sollte sich diesen Text wenigstens einmal
|
||
komplett durchlesen.
|
||
|
||
Abschnitt 6 beschreibt, wie mehrere Abstimmungen gleichzeitig durchgefuehrt
|
||
werden koennen, ohne saemtliche Programmdateien zu kopieren.
|
||
|
||
|
||
3. Kompatibilitaet zu frueheren Versionen
|
||
=========================================
|
||
|
||
- englische Usevote-Versionen: keine Kompatibilitaet
|
||
|
||
- deutsche Usevote-Versionen (Usevote 3.0a, UseVoteGer 3.1):
|
||
* Wahlscheine haben neue Markierungen zum sicheren Erkennen
|
||
der Stimmen. Bisherige Wahlscheine sind mit dieser Version
|
||
nicht mehr einsetzbar!
|
||
|
||
* acktext.txt gibt es nicht mehr, statt dessen sind im Unterverzeichnis
|
||
"templates" Vorlagen zu finden, die diese Texte enthalten.
|
||
|
||
* usevote.cfg ist komplett inkompatibel
|
||
|
||
* usevote.rul: voll kompatibel, ohne Einschraenkungen
|
||
|
||
* Ergebnisdateien: Inhalt kompatibel, aber Namensgebung geaendert
|
||
(obwohl irrelevant, da Umstieg auf diese Version waehrend
|
||
einer laufenden Wahl nicht moeglich)
|
||
|
||
* scheinkennungen: Dateiformat gaendert (aus selbigen Gruenden
|
||
nicht weiter wichtig)
|
||
|
||
* uvshell: integriert in uvvote.pl, ueber usevote.cfg steuerbar
|
||
|
||
* uvvote.pl: Aufrufparameter geaendert / Zusammenfuehrung mit uvshell
|
||
|
||
* uvcfv.pl: Alte Funktionalitaet ist nicht mehr implementiert,
|
||
statt dessen dient das Tool jetzt zum Generieren der persoenlichen
|
||
Wahlscheine und Verschicken des CfV an die Waehler
|
||
|
||
* uvcount.pl: Beinhaltet auch uvack und uvdup. Drei Einzelprogramme
|
||
schienen mir ineffizient.
|
||
|
||
* uvbounce.pl: Ausgabeformat etwas anders
|
||
|
||
|
||
4. Liste der Dateien
|
||
====================
|
||
|
||
* Ausgelieferte Dateien:
|
||
|
||
CHANGES Versionsaenderungen
|
||
COPYING GNU General Public License
|
||
README Diese Datei
|
||
UVconfig.pm Routinen zum Einlesen und Pruefen der Konfiguration
|
||
UVformats.pm Routinen zum Formatieren von Texten in Templates
|
||
UVmenu.pm Routinen zur Interaktion mit dem Wahlleiter
|
||
UVmessage.pm Routinen zum Parsen von Texten und Ersetzen von Platzhaltern
|
||
UVreadmail.pm Routinen zum Einlesen und MIME-Decodieren der Mails
|
||
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)
|
||
mailpatterns.cfg Wildcards fuer verdaechtige Mailadressen
|
||
messages.cfg Programm-Meldungen (Ressourcen-Datei)
|
||
scheinkennungen Speicherung der Scheinkennungen bei personalisierten
|
||
Wahlscheinen. Muss zu Beginn der Abstimmung leer sein.
|
||
usevote.cfg Konfigurationsdatei
|
||
usevote.rul Abstimmungsregeln
|
||
uvballot.pl Wahlschein aus Abstimmungsdaten erstellen
|
||
uvbounce.pl Listen von unzustellbaren Bestaetigungen erzeugen
|
||
uvcfv.pl Erstellen und Verschicken von personalisierten Wahlscheinen
|
||
uvcount.pl Stimmenzaehlung, Erstellen von Waehlerlisten und
|
||
Aussortieren von doppelten Stimmabgaben
|
||
uvvote.pl Stimmen verarbeiten (fuer die taegliche Arbeit)
|
||
|
||
templates/ Verzeichnis mit Templates (Vorlagen)
|
||
ack-mail Template fuer Bestaetigungsmails
|
||
address-not-registered Fehlermail: Noch keine Scheinkennung fuer Adresse
|
||
vergeben
|
||
ballot Template fuer einen Wahlschein
|
||
ballot-personal Template fuer personalisierten Wahlschein
|
||
ballot-request Template fuer eine Wahlscheinanforderung
|
||
bdsg-error Fehlermail: Datenschutzklausel nicht akzeptiert
|
||
bouncelist Template fuer Liste der ungueltigen Mailadressen
|
||
cancelled Template fuer Bestaetigung der Stimmannullierung
|
||
invalid-account Fehlermail: Fragwuerdige Mailadresse (Role Account)
|
||
invalid-name Fehlermail: Kein gueltiger Name in Mail/Wahlschein
|
||
gefunden
|
||
mailheader Template fuer den Header von Mails an die Waehler
|
||
multiple-votes Fehlermail: Widerspruechliche Stimmen im Wahlschein
|
||
no-ballot Fehlermail: Kein Wahlschein in Mail gefunden
|
||
no-ballotid Fehlermail: Keine Wahlscheinkennung gefunden
|
||
no-votes Fehlermail: Keine Stimmen abgegeben
|
||
result-multi Template fuer ein Wahlergebnis mit mehreren Gruppen
|
||
result-single Template fuer ein Wahlergebnis mit einer Gruppe
|
||
result-proportional Template fuer ein Wahlergebnis, bei dem das Verhaeltnis
|
||
oder die Differenz von Ja- und Nein-Stimmen entscheidet
|
||
(z.B. Moderationsnachwahlen, "proportional=1" gesetzt)
|
||
rule-violated Fehlermail: Wahlregeln aus usevote.rul verletzt
|
||
voterlist Template fuer eine Waehlerliste (2. CfV)
|
||
votes-multi Template fuer eine Stimmenliste mit mehreren Gruppen
|
||
votes-single Template fuer eine Stimmenliste bei einer Gruppe
|
||
wrong-ballotid Fehlermail: Falsche Wahlscheinkennung angegeben
|
||
|
||
* Beim Programmlauf erstellte Dateien (Name ist konfigurierbar):
|
||
|
||
ergebnis.alle Saemtliche Einzelergebnisse zusammengefasst (wird
|
||
bei jedem Lauf von uvvote.pl neu erstellt)
|
||
errors.log Fehlermeldungen, die beim Programmlauf auftauchen,
|
||
werden hier abgelegt. Normalerweise bleibt die Datei
|
||
leer, ansonsten wird beim Programmende eine Warnung
|
||
mit Verweis auf die Datei ausgegeben.
|
||
uidlcache Eindeutige IDs der abgerufenen Mails (bei Benutzung
|
||
von POP3). Darf waehrend einer laufenden Abstimmung
|
||
keinesfalls geloescht werden, um Mehrfachzaehlung von
|
||
Stimmen zu verhindern.
|
||
uidlcache_req dto, fuer die Mailbox mit den Wahlscheinanforderungen
|
||
(bei Verwendung von personalisierten Wahlscheinen)
|
||
uidlcache_bounce dto, fuer die Mailbox mit den Bounces (wird von
|
||
uvbounce.pl ausgewertet)
|
||
usevote.lock Temporaere Lockdatei, um gleichzeitiges Ausfuehren
|
||
mehrerer Instanzen zu verhindern. Kann (falls vorhanden)
|
||
gefahrlos geloescht werden, wenn gerade keines der
|
||
Usevote-Scripts laeuft.
|
||
|
||
* Folgende Unterverzeichnisse werden von Usevote im aktuellen
|
||
Verzeichnis (CWD) angelegt:
|
||
|
||
fertig/ Verzeichnis fuer Archivierung verarbeiteter Dateien
|
||
tmp/ Verzeichnis fuer temporaere Dateien
|
||
|
||
* Von Usevote dort erstellte Dateien:
|
||
|
||
ack.* Bestaetigungsmails (in tmp/)
|
||
ack.control Steuerungsdatei fuer Bestaetigungsmails (in tmp/)
|
||
domail Shellscript zum Verschicken der Mails (in tmp/)
|
||
ergebnis.* Ergebnisdateien einzelner Durchlaeufe (zunaecht in tmp/,
|
||
spaeter nach fertig/ verschoben und archiviert)
|
||
stimmen.* Archivierte Stimmendateien (dto.)
|
||
|
||
|
||
5. Anfangs-Konfiguration
|
||
========================
|
||
|
||
Zuerst solltest Du "usevote.cfg" fuer Dein System anpassen (Details
|
||
dort in den Kommentarzeilen und weiter hinten in dieser Dokumentation).
|
||
Unter Windows werden die Regular Expressions fuer die Stimmenerkennung
|
||
moeglicherweise lauter unlesbare Zeichen enthalten (anderer Zeichensatz),
|
||
dort sollten saemtliche in Namen vorkommende Umlaute und Buchstaben mit
|
||
Accents etc. aufgefuehrt werden. Weiter ist bei Nutzung von Windows zu
|
||
beachten, dass das Kommando zum Loeschen des Bildschirms "cls" und nicht
|
||
"clear" heisst. Dazu gibt es auch eine Einstellung in usevote.cfg. Den
|
||
standardmaessig eingestellten Pager "less" gibt es unter Windows zunaechst
|
||
nicht, more ist aber so buggy, dass man sich am besten "less" fuer
|
||
Windows herunterladen sollte:
|
||
http://www.greenwoodsoftware.com/less/less381d.zip
|
||
|
||
Im Unterverzeichnis "templates" findest Du Vorlagen, die fuer die
|
||
einzelnen Bestaetigungstexte, Mails, Wahlscheine und Waehlerlisten
|
||
verwendet werden. Hier kannst Du unter Beachtung der Syntax (siehe
|
||
gesonderte Dokumentation) alle Texte an Deinen Geschmack und Deine
|
||
Beduerfnisse anpassen.
|
||
|
||
|
||
6. Konfiguration fuer einzelne Abstimmungen
|
||
===========================================
|
||
|
||
Fuer jede Abstimmung muss eine eigene Konfigurationsdatei geschrieben
|
||
werden. Aendere einfach usevote.cfg entsprechend der Regeln fuer die
|
||
betreffende Abstimmung. Falls Du haeufiger Wahlleiter spielst, solltest
|
||
Du Dir eine globale Konfigurationsdatei mit Standardeinstellungen
|
||
(z.B. als ~/.usevote-defaults.cfg) anlegen und in der usevote.cfg nur
|
||
noch die Einstellungen setzen, die sich fuer jede Abstimmunge aendern.
|
||
Die globale Datei kann am Anfang der usevote.cfg mit folgender Zeile
|
||
eingebunden werden:
|
||
|
||
include ~/.usevote-defaults.cfg
|
||
|
||
Zu beachten ist aber, dass jeweils die letzte Definition einer Option
|
||
benutzt wird. Die usevote.cfg sollte daher wirklich nur noch
|
||
abstimmungsspezifische Einstellungen enthalten, um nicht versehentlich
|
||
die globalen Optionen zu <20>berschreiben.
|
||
|
||
Ausserdem muss die Datei "usevote.rul" geprueft werden. Wenn Deine
|
||
Abstimmung irgendwelche speziellen Regeln enthaelt (z.B. man kann
|
||
nur fuer Gruppe x stimmen, wenn man auch fuer y gestimmt hat, oder man
|
||
muss fuer den .misc-Abschnitt stimmen, wenn man fuer irgendeinen
|
||
anderen Abschnitt gestimmt hat), dann solltest Du diese Datei lesen
|
||
und entsprechend aendern. Allerdings empfiehlt es sich, bereits im
|
||
RfD deutlich auf die Regeln hinzuweisen, die zur Anwendung kommen sollen.
|
||
Die eingegebenen Regeln koennen dann mit "uvvote -t" getestet werden.
|
||
|
||
Es ist auch moeglich, mehrere Abstimmungen gleichzeitig durchzufuehren,
|
||
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):
|
||
|
||
bdsgtext.cfg
|
||
mailpatterns.cfg
|
||
messages.cfg
|
||
scheinkennungen
|
||
usevote.cfg
|
||
usevote.rul
|
||
|
||
Ggf. sollte das "templates"-Verzeichnis kopiert werden, falls
|
||
individuelle Templates fuer einzelne Abstimmungen verwendet werden.
|
||
|
||
Au<EFBFBD>erdem muessen i.d.R. einige Pfade in der usevote.cfg angepasst
|
||
werden. Dadurch ist auch die Angabe eines anderen Verzeichnisses
|
||
fuer einige der oben genannten Konfigurationsdateien moeglich,
|
||
falls diese zentral gepflegt werden sollen (z.B. messages.cfg und
|
||
mailpatterns.cfg).
|
||
|
||
Damit die Usevote-Perlmodule gefunden werden, sollten sie im
|
||
selben Verzeichnis wie die Programmdateien liegen bleiben. Ansonsten
|
||
muss eine Umgebungsvariable gesetzt werden:
|
||
|
||
PERL5LIB=..
|
||
|
||
.. steht f<>r das <20>bergeordnete Verzeichnis. Ggf. muss hier ein
|
||
absoluter Pfad eingetragen werden, wenn das Abstimmungsverzeichnis
|
||
kein Unterverzeichnis des Usevote-Verzeichnisses ist.
|
||
|
||
Je nach Betriebssystem kann die obige Zeile etwas anders aussehen,
|
||
unter Windows sollte z.B. "SET PERL5LIB=C:\PERL\USEVOTE" in die
|
||
autoexec.bat aufgenommen oder sonstwie ausgef<65>hrt werden (Pfad
|
||
nat<EFBFBD>rlich entsprechend anpassen).
|
||
|
||
|
||
7. Wahlschein generieren
|
||
========================
|
||
|
||
Der Wahlschein ist ein Abschnitt des CfV, den die Leute zur Stimmabgabe
|
||
ausfuellen und zurueckschicken sollen. Am einfachsten erzeugst Du
|
||
diesen nach Anpassung der Konfiguration und ggfls. des Templates
|
||
mit "uvballot.pl". Folgendes Format ist erforderlich:
|
||
|
||
#1 [ Stimme ]
|
||
#2 [ Stimme ]
|
||
[...]
|
||
|
||
Eine zusaetzliche Beschreibung rechts daneben macht es dem Waehler
|
||
einfacher, ist aber fuer Usevote nicht zwingend erforderlich. Wichtig
|
||
sind nur die fortlaufenden Nummern, die entsprechend der Eintraege
|
||
in usevote.cfg zugeordnet werden.
|
||
|
||
Je nach Konfiguration koennen weitere Zeilen noetig sein, dazu spaeter.
|
||
|
||
Als Stimme in den eckigen Klammern werden diverse Strings erkannt,
|
||
die in usevote.cfg definiert werden koennen. JA, NEIN und ENTHALTUNG
|
||
sind Standard, einige Abwandlungen sind ebenfalls moeglich.
|
||
Zusaetzlich kann ANNULLIERUNG verwendet werden, um eine schon abgegebene
|
||
Stimme zu loeschen und somit nicht im Result aufzutauchen.
|
||
|
||
Bei der Verwendung von persoenlichen Wahlscheinen (Abschnitt 6a der
|
||
Wahlregeln fuer de.*) ist das Vorgehen etwas anders, siehe hierzu
|
||
den gesonderten Abschnitt weiter hinten.
|
||
|
||
|
||
8. Stimmen verarbeiten
|
||
======================
|
||
|
||
Falls POP3 nicht benutzt werden soll (siehe usevote.cfg), werden alle
|
||
Wahlmails zu einer Abstimmung aus einer Mailboxdatei gelesen
|
||
(Name/Pfad der Datei in usevote.cfg einstellbar). Standardmaessig
|
||
wird das Unix-Mailboxformat erkannt, dieses ist aber ueber "mailstart"
|
||
in usevote.cfg konfigurierbar (bei komplett anderen Formaten muesste
|
||
der Quellcode geaendert werden).
|
||
|
||
Wechsele nun in das Verzeichnis, in dem die passenden
|
||
Konfigurationsdateien liegen (normalerweise werden diese aus
|
||
dem aktuellen Verzeichnis gelesen, was mehrere gleichzeitige
|
||
Verfahren moeglich macht) und starte uvvote.pl. Bei Problemen
|
||
mit einzelnen Stimmen wirst Du interaktiv durch Menues gefuehrt.
|
||
Meistens gibt es folgende Moeglichkeiten, die durch die
|
||
eingeklammerten Buchstaben und Zahlen aufgerufen werden koennen:
|
||
|
||
(1) Anzeigen der Wahlmail
|
||
|
||
Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
|
||
(2) Mailadresse
|
||
(3) Waehlername
|
||
(4) Stimmen
|
||
(5) Scheinkennung
|
||
(6) Datenschutzklausel
|
||
|
||
(i) Diese Stimme ignorieren (ohne Benachrichtigung verwerfen)
|
||
(w) Weiter
|
||
|
||
Teilweise gibt es Unteroptionen:
|
||
(a) OK (Zweifel sind unbegr<67>ndet, ist alles in Ordnung)
|
||
(b) Aendern (z.B. wenn der Realname von Usevote nicht vollstaendig
|
||
erkannt wurde)
|
||
(c) Ungueltig (es handelt sich nach Deinem Ermessen nicht um
|
||
eine gueltige Stimmabgabe)
|
||
|
||
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 den Optionen (2) bis (6) 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.
|
||
|
||
Wenn Du alle oben auf der Seite aufgelisteten Maengel beseitigst,
|
||
indem Du die entsprechenden Optionen waehlst, wird die Stimme
|
||
akzeptiert. Bleiben Zweifel unausgeraeumt, wird eine entsprechende
|
||
Fehlermail verschickt (Du erhaeltst dann noch eine gesonderte
|
||
Warnung).
|
||
|
||
Zum Schluss kannst Du (w) w<>hlen, um fortzufahren. M<>chtest Du,
|
||
dass eine Stimme komplett ignoriert wird (weil es sich z.B.
|
||
um Spam handelt), kannst Du (i) waehlen und die folgende
|
||
Sicherheitsfrage mit "JA" beantworten.
|
||
|
||
Ist uvvote.pl durchgelaufen, koennen im Unterverzeichnis tmp/
|
||
(wird ebenfalls aktuellen Verzeichnis angelegt!) die ermittelten
|
||
Ergebnisse und erzeugten Mails an die Waehler noch einmal geprueft
|
||
werden. Ist alles in Ordnung, werden mittels "uvvote.pl clean"
|
||
die Mails verschickt und die Ergebnisse gespeichert sowie die
|
||
Originalmails archiviert. Hierzu wird das Verzeichnis fertig/
|
||
verwendet.
|
||
|
||
Falls der komplette uvvote-Lauf verworfen werden soll, kann
|
||
die Datei mit den Waehlermails (stimmen-xyz im tmp-Verzeichnis,
|
||
xyz entspricht der aktuellen Unixtime waehrend des Durchlaufs)
|
||
wieder an den urspruenglichen Platz zurueckkopiert werden
|
||
(bei POP3: fuer den Neuversuch POP3 abschalten und die
|
||
Maildatei einlesen lassen, da auf dem Server die Mails
|
||
moeglicherweise geloescht wurden) und das komplette tmp-Verzeichnis
|
||
geloescht werden. Anschliessend den uvvote-Lauf erneut durchfuehren.
|
||
Wichtig ist nur, dass das Verzeichnis fertig/ waehrend der ganzen
|
||
Abstimmung mitsamt seines Inhaltes erhalten bleibt.
|
||
|
||
Noch ein kurzes Wort zum Verschicken der Mails: Jede Mail wird
|
||
in einer gesonderten durchnummerierten Datei (ack.1, ack.2, ...)
|
||
gespeichert, zusaetzlich wird eine Steuerungsdatei ("ack.control")
|
||
erzeugt, welche zu jeder Mail Dateinamen und Empfaenger auflistet.
|
||
Je nach Einstellung werden die Mails dann per SMTP verschickt oder
|
||
es wird ein Shellscript ("domail") erzeugt, welches nach und
|
||
nach die Mails in Sendmail einspeist. Zwecks Serialisierung ist
|
||
in usevote.cfg die Einstellung "sleepcmd" konfigurierbar,
|
||
normalerweise wird ein "sleep 1" nach jeder Mail ausgefuehrt.
|
||
Das Verschicken der Mails (und damit ggfls. der Aufruf von "domail")
|
||
erfolgt automatisch mit "uvvote.pl clean".
|
||
|
||
Unter Windows ist nur SMTP moeglich, es sei denn, es gibt
|
||
die Befehle sendmail, sleep und rm ;-)
|
||
|
||
|
||
9. Unzustellbare Bestaetigungen
|
||
===============================
|
||
|
||
Leider kommt es immer mal wieder vor, dass jemand bei der Abstimmung
|
||
eine ungueltige Mailadresse angegeben hat. In diesem Fall erhaeltst Du
|
||
einen Bounce an die Absenderadresse zurueck (diese laesst sich in
|
||
usevote.cfg mit der Option "envelopefrom" einstellen bzw. bei
|
||
direkten Aufruf eines Mailers <20>ber die entsprechende Kommandozeilenoption
|
||
in der mailcmd-Einstellung, z.B. bei Sendmail -f). Du solltest
|
||
solche Fehlermails in einer gesonderten Datei speichern oder in
|
||
einem gesonderten POP3-Postfach halten und beim Erstellen
|
||
des 2. CfVs und des Results uvbounce.pl aufrufen.
|
||
|
||
Ausgegeben wird von uvbounce.pl eine Liste mit ungueltigen Adressen,
|
||
die einfach an den Abschnitt "ungueltige Stimmen" des 2. CfVs bzw.
|
||
Results angehaengt werden kann. Nicht vergessen, die Stimmen manuell
|
||
aus der Liste der gueltigen Stimmen zu loeschen (falls Du die
|
||
Policy verfolgst, nur Stimmen mit gueltiger Absenderadresse zu werten,
|
||
was empfehlenswert ist) und bei Bedarf das Ergebnis zu korrigieren!
|
||
|
||
|
||
10. 2.CfV / Result
|
||
===================
|
||
|
||
Zum Erstellen des 2. CfVs kannst Du erst einmal den 1. CfV als Vorlage
|
||
benutzen. Am Ende sollte allerdings eine Liste der Personen folgen,
|
||
die bereits abgestimmt haben. Diese laesst sich mit "uvcount.pl -l"
|
||
erzeugen. Moeglicherweise fragt uvcount.pl wegen scheinbar doppelter
|
||
Stimmabgaben nach und bietet an, eine oder beide Stimmen zu ignorieren.
|
||
Du solltest das dann genauer untersuchen und die passende Wahl treffen.
|
||
|
||
Vorsicht bei doppelten Namen: Es gibt einige doppelt vorkommende
|
||
Namen, hinter denen sich voellig unterschiedliche Personen
|
||
verbergen! Die Mailadresse sollte in solchen Faellen Auskunft
|
||
geben koennen, notfalls einmal nachfragen.
|
||
|
||
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
|
||
==== ==== : ==== ===== : ===== : =======================================
|
||
100 70 : Nein Ja : Nein : Einrichtung von xyz
|
||
|
||
Bei Abstimmungen ueber nur einen Punkt gibt es auch die Moeglichkeit,
|
||
einen einfachen beschreibenden Text zu verwenden:
|
||
"Es gab 100 JA und 70 NEIN-Stimmen ...".
|
||
|
||
Falls in usevote.cfg die Einstellung "multigroup = 1" gesetzt ist,
|
||
wird immer die tabellarische Form gewaehlt, bei "multigroup = 0"
|
||
benutzt uvcount.pl bei nur einem Abstimmungspunkt den beschreibenden
|
||
Text. <20>berschreiben laesst sich dieses mit Aufrufparametern:
|
||
|
||
uvcount.pl -r -m = Tabellarisch (m = multigroup)
|
||
uvcount.pl -r -o = Text (o = onegroup)
|
||
|
||
Falls in usevote.cfg die Option "proportional = 1" aktiviert ist,
|
||
wird standardmaessig folgendes Ausgabeformat angewandt:
|
||
|
||
Ja Nein : J>=N? Ja/Nein : ang.? : Gruppe
|
||
==== ==== : ===== ======= : ===== : ====================================
|
||
100 70 : Ja 1.429 : : Einrichtung von abc
|
||
80 90 : Nein 0.888 : : Einrichtung von xyz
|
||
|
||
Das genaue Aussehen ist im Template "result-proportional" aenderbar,
|
||
die Bedingungen und Auswertungsformeln sind ueber usevote.cfg
|
||
einzustellen (prop_formula und condition1). Die Spalte "ang.?" muss
|
||
in diesem Fall manuell ausgef<65>llt werden, da manchmal auch mehrere
|
||
Abstimmungsgegenst<EFBFBD>nde angenommen werden, z.B. bei Moderationsnachwahlen
|
||
f<EFBFBD>r verschiedene Posten.
|
||
|
||
Die Waehlerliste mit abgegebenen Stimmen erzeugst Du mit
|
||
"uvcount -v". Diese Option laesst sich auch mit -r kombinieren,
|
||
so dass Du Dir das doppelte Aussortieren von Duplikaten sparst.
|
||
Wichtig: Diese Liste darf erst im Result veroeffentlicht werden,
|
||
nicht im 2. CfV!
|
||
|
||
Falls ein trivialer Schutz vor Spammern gewuenscht ist, koennen durch
|
||
eine Aenderung in den Template "voterlist", "votes-single", "votes-multi"
|
||
und "bouncelist" alle Mailadressen verfremdet werden. Entweder Du fuegst
|
||
folgende Definition ein:
|
||
|
||
mail := value mail | replace '@' ' -at - '
|
||
|
||
Oder Du veraenderst direkt die vorgegebenen Formate, indem Du
|
||
die Mailadresse mit Hilfe des Pipe-Symbols durch die replace-Funktion
|
||
schickst:
|
||
|
||
multi-line := value mail | replace '@' ' -at- ' | justify-behind name 72
|
||
|
||
Die Replace-Funktion erwartet wie im Beispiel gezeigt zwei Werte,
|
||
die zu ersetztende Zeichenfolge (hier das '@') und eine neue Zeichenfolge,
|
||
die statt dessen eingesetzt werden soll und frei gewaehlt werden kann.
|
||
|
||
Wie bereits beschrieben, sollte am Ende des 2. CfVs bzw. Results noch die
|
||
Liste der gebouncten Mailadressen angehaengt werden (z.B. mit dem Programm
|
||
uvbounce.pl) und bei Bedarf die urspruenglichen Stimmen geloescht und das
|
||
Ergebnis korrigiert werden.
|
||
|
||
|
||
11. Datenschutz
|
||
===============
|
||
|
||
Zum Schutz der deutschen Wahlleiter wurden spezielle Klauseln
|
||
aufgenommen, die vom Waehler die Erlaubnis zur Verarbeitung
|
||
der Stimme verlangen. Die Option "bdsg" in usevote.cfg schaltet
|
||
diese Sonderbehandlung ein oder aus. Folgende Besonderheiten
|
||
gelten bei Aktivierung:
|
||
|
||
- Im Wahlschein ist ein spezieller Hinweistext enthalten, der
|
||
aus der Datei bdsgtext.cfg genommen wird. Beim Verarbeiten
|
||
abgegebener Stimmen wird der Abschnitt wieder mit der Datei
|
||
verglichen. Fehlt er oder wurde er veraendert, wird der
|
||
Wahlschein dem Wahlleiter zur Kontrolle vorgelegt.
|
||
Die Fehlerpruefung ignoriert Quote- und Leerzeichen sowie
|
||
Zeilenumbrueche, kann aber versagen, wenn dem Quotezeichen
|
||
Initialen vorangestellt sind (wie in manchen Mailboxnetzen
|
||
ueblich) oder eine Silbentrennung ueber den Text gelaufen ist.
|
||
|
||
- Ausserdem enthaelt der Wahlschein eine spezielle Frage,
|
||
die mit JA zu beantworten ist. Anderenfalls muss ebenfalls
|
||
Kontrolle durch den Wahlleiter erfolgen. Der Text dieser
|
||
Frage ist ueber usevote.cfg einzustellen.
|
||
|
||
Erfolgt eine derartige Kontroll-Vorlage beim uvvote.pl-Lauf,
|
||
sollte der Wahlleiter sich den Wahlschein genau anschauen
|
||
und dann entweder im Menue die Option (6)(a) waehlen oder
|
||
mit (w) fortfahren. Im letzteren Fall wird die Stimme
|
||
verworfen und eine Hinweismail zurueckgeschickt.
|
||
|
||
Wenn eine Wahlbestaetigung veraendert und zurueckgeschickt
|
||
wird, fehlt der entsprechende Datenschutzhinweis. Da in
|
||
diesem Fall die Zustimmung aber bereits bei der ersten
|
||
Stimmabgabe gegeben wurde, kann der Wahlleiter beruhigt
|
||
die Korrektheit wie oben beschrieben bestaetigen.
|
||
|
||
|
||
12. Personalisierte Wahlscheine
|
||
===============================
|
||
|
||
Die Wahlregeln fuer de.* sehen im Abschnitt 6a ein Verfahren
|
||
mit persoenlichen Wahlscheinen vor, die mit einer speziellen
|
||
Kennung versehen mehr Sicherheit vor Manipulation bieten.
|
||
|
||
Um dieses Verfahren einzuschalten, muss zunaechst die Option
|
||
"personal = 1" in usevote.cfg gesetzt werden und das Template
|
||
"ballot-personal" im Unterverzeichnis "templates" um den Text
|
||
des CfVs erweitert werden (einfach statt des von Sternchen
|
||
umrandeten Kommentars in der Datei einfuegen). Bitte eventuell
|
||
im Text vorkommende eckige Klammern wie folgt unschaedlich
|
||
machen: \[Text\] (Backslash voranstellen), da in den Templates
|
||
diese Klammern spezielle Bedeutungen haben (siehe gesonderten
|
||
Abschnitt zu dem Thema in dieser Datei).
|
||
|
||
Der gepostete CfV enthaelt i.d.R. nur einen Dummy-Abschnitt
|
||
mit Hinweis auf die gesonderte Wahlscheinanforderung. So ein
|
||
Abschnitt kann mit uvballot.pl generiert werden.
|
||
|
||
Der dana-Moderation sollte beim Einreichen des CfVs auch
|
||
ein Dummy-Wahlschein mitgesendet werden, wie er bei der
|
||
Wahlscheinanforderung verschickt wird. Dieser laesst sich mit
|
||
"uvcfv.pl -t" erzeugen.
|
||
|
||
Die eingehenden Wahlscheinanforderungen sollten an eine
|
||
spezielle Mailadresse gehen und dann mit uvcfv.pl verarbeitet
|
||
werden. Je nach Konfiguration in usevote.cfg werden die
|
||
Mails aus einer Mailboxdatei oder per POP3 eingelesen und jeweils
|
||
mit einem personalisierten Wahlschein beantwortet. Bitte vor
|
||
dem Posten des CfVs einen Test durchfuehren, um sicherzustellen,
|
||
dass die generierten Wahlscheine korrekt sind und auch bei
|
||
der Auswertung akzeptiert werden (hierbei wird die speziell
|
||
eingefuegte Wahlscheinkennung in Verbindung mit der Absenderadresse
|
||
geprueft).
|
||
|
||
|
||
13. Die einzelnen Programme
|
||
===========================
|
||
|
||
uvballot.pl
|
||
Generiert den Wahlschein fuer den CfV. Bei personalisierten
|
||
Wahlscheinen (personal = 1 in usevote.cfg) wird nur ein Dummy-
|
||
Abschnitt mit Hinweisen zur Wahlscheinanforderung ausgegeben.
|
||
|
||
Die Vorlage fuer den Wahlschein ist im templates-Unterverzeichnis
|
||
konfigurierbar:
|
||
- ballot Standard-Wahlschein (personal=0)
|
||
- ballot-request Dummy-Abschnitt mit Hinweisen zur
|
||
Wahlscheinanforderung (personal=1)
|
||
- ballot-personal Wahlschein mit Scheinkennung, wird von
|
||
uvcfv.pl verwendet
|
||
|
||
Aufrufparameter:
|
||
|
||
-c config_file liest die Konfiguration aus config_file
|
||
(usevote.cfg falls nicht angegeben)
|
||
-h
|
||
--help zeigen einen Hilfetext an
|
||
|
||
|
||
uvbounce.pl
|
||
Liest Bounces aus den uebergebenen Dateien oder aus einer POP3-
|
||
Mailbox ein (Verhalten haengt von usevote.cfg ab) und generiert
|
||
eine Liste von unzustellbaren Adressen, die an den 2. CfV oder das
|
||
Result angehaengt werden kann. Falls POP3 in usevote.cfg
|
||
eingeschaltet und die Option -f (siehe unten) nicht benutzt wurde,
|
||
werden die uebergebenen Dateinamen ignoriert.
|
||
|
||
Die Vorlage fuer die ausgegebene Liste ist im templates-
|
||
Unterverzeichnis konfigurierbar (Datei "bouncelist").
|
||
|
||
Aufrufparamter:
|
||
|
||
-c config_file liest die Konfiguration aus config_file
|
||
-f dateiname(n)
|
||
--file dateiname(n) lesen die Bounces aus den uebergebenen Dateien,
|
||
auch wenn in der Konfigurationsdatei POP3
|
||
eingeschaltet ist. Diese Option wird benoetigt,
|
||
falls zwar die Stimmzettel per POP3 eingelesen
|
||
werden sollen, nicht aber die Bounces.
|
||
Die Dateinamen werden durch Leerzeichen getrennt.
|
||
-h
|
||
--help zeigen einen Hilfetext an
|
||
|
||
|
||
uvcfv.pl
|
||
|
||
Liest Mailboxen ein und beantwortet alle Mails mit personalisierten
|
||
CfVs (falls personal=1 in usevote.cfg).
|
||
|
||
Die Vorlage fuer die ausgegebene Liste ist im templates-
|
||
Unterverzeichnis konfigurierbar (Datei "ballot-personal").
|
||
|
||
Aufrufparamter:
|
||
|
||
-c config_file liest die Konfiguration aus config_file
|
||
(usevote.cfg falls nicht angegeben)
|
||
-t
|
||
--test gibt einen Dummy-Wahlschein mit Scheinkennung
|
||
an der Standardausgabe aus, zur Pruefungszwecken
|
||
-h
|
||
--help zeigen einen Hilfetext an
|
||
|
||
|
||
uvcount.pl
|
||
|
||
Zaehlt Stimmen und gibt Waehlerlisten aus. Dient zur Erstellung
|
||
von 2.CfV und Result.
|
||
|
||
Es werden die folgenden Vorlagen aus dem templates-Unterverzeichnis
|
||
benutzt:
|
||
|
||
- result-multi Ergebnisauszaehlung bei mehreren Gruppen
|
||
- result-single Ergebnisauszaehlung bei nur einem Abstimmungs-
|
||
gegenstand (nicht tabellarisch, sondern im
|
||
Fliesstext), falls in usevote.cfg multigroup=0
|
||
gesetzt ist oder die Option -o verwendet wird
|
||
(siehe unten)
|
||
- voterlist Reine Auflistung der bisherigen Waehler ohne
|
||
Stimmen (fuer 2. CfV)
|
||
- votes-multi Stimmenliste im Mehrgruppenformat (eine Liste
|
||
mit allen Waehlern, rechts daneben die jeweils
|
||
abgegebenen Stimmen)
|
||
- votes-single Stimmenliste im Eingruppenformat (getrennte
|
||
Listen mit Ja-, Nein- und Enthaltungsstimmen)
|
||
|
||
Aufrufparamter:
|
||
|
||
-c config_file liest die Konfiguration aus config_file
|
||
(usevote.cfg falls nicht angegeben)
|
||
-f result_file liest die Stimmen aus result_file (ueberschreibt
|
||
die "resultfile"-Angabe aus der Konfigurationsdatei)
|
||
-l
|
||
--list Geben eine Liste aller Waehler aus (ohne Stimmen).
|
||
-v
|
||
--voters Wie --list, aber mit Angabe der abgegebenen Stimmen.
|
||
-r
|
||
--result Ausgabe des Endergebnisses (kann mit --list oder
|
||
--voters kombiniert werden).
|
||
-m
|
||
--multigroup Benutzt auch bei Eingruppenabstimmungen das
|
||
Mehrgruppenformat beim Endergebnis (ueberschreibt
|
||
die Einstellung aus usevote.cfg).
|
||
Nur in Kombination mit --result verwendbar,
|
||
schliesst --onegroup aus.
|
||
-o
|
||
--onegroup Benutzt bei Eingruppenabstimmungen immer das
|
||
Eingruppenformat beim Endergebnis (ueberschreibt
|
||
die Einstellung aus usevote.cfg).
|
||
Nur in Kombination mit --result verwendbar,
|
||
schliesst --multigroup aus.
|
||
-n
|
||
--nodup Verzichtet auf das Aussortieren von doppelten
|
||
Stimmabgaben. Nicht empfohlen!
|
||
-h
|
||
--help zeigen einen Hilfetext an
|
||
|
||
|
||
|
||
uvvote.pl
|
||
|
||
Liest Mailboxen aus einer Datei oder per POP3 ein wertet die Mails
|
||
als Stimmzettel aus. Erst beim Aufruf mit der Option "clean" werden
|
||
die Ergebnisse endgueltig gespeichert und die Bestaetigungsmails
|
||
verschickt.
|
||
|
||
Es werden diverse Vorlagen aus dem templates-Unterverzeichnis
|
||
benutzt, um Bestaetigungs- und Fehlermails zu generieren.
|
||
|
||
Aufrufparameter:
|
||
|
||
-c config_file liest die Konfiguration aus config_file
|
||
(usevote.cfg falls nicht angegeben)
|
||
-t
|
||
--test fuehrt einen Test der Konfiguration durch und
|
||
gibt das ermittelte Ergebnis aus.
|
||
-h
|
||
--help zeigen einen Hilfetext an
|
||
|
||
|
||
|
||
14. Die Konfigurationsdateien
|
||
=============================
|
||
|
||
mailpatterns.cfg
|
||
----------------
|
||
|
||
Diese Datei enthaelt einen regulaeren Ausdruck (Perl-Syntax) pro
|
||
Zeile. Passt die Mailadresse eines Abstimmenden auf eines der Muster,
|
||
wird dem Wahlleiter bei der Auswertung eine Warnung angezeigt.
|
||
In der Regel kann man diese ignorieren, weil heutzutage viele
|
||
Privatleute ihre eigene Domain haben und Role-Accounts wie news@
|
||
benutzen. Sieht man aber so etwas wie news@t-online.de ist
|
||
Vorsicht angebracht und man sollte durch Auswahl von "(W)eiter"
|
||
die Stimme ungueltig werten und eine entsprechende Fehlermail
|
||
zurueckschicken lassen.
|
||
|
||
|
||
messages.cfg
|
||
------------
|
||
|
||
Hier sind alle kuerzeren Texte enthalten, die Usevote ausgibt,
|
||
unabhaengig davon, ob sie nur dem Wahlleiter bei der Programmausfuehrung
|
||
ausgegeben werden oder in persoenlichen Mails bzw. dem Result
|
||
auftauchen. Laengere Textpassagen sind als eigene Dateien im
|
||
"templates"-Verzeichnis zu finden und bieten weitergehende
|
||
Formatierungsmoeglichkeiten.
|
||
|
||
Jede Zeile in der messages.cfg besteht aus einem Identifier, einem
|
||
Gleichheitszeichen und dem eigentlichen Text. Der Identifier ist
|
||
grundsaetzlich in Grossbuchstaben gehalten und vom Programmcode fest
|
||
vorgegeben. Aenderungen duerfen nur rechts vom Gleichzeichen vorgenommen
|
||
werden, wenn Dir z.B. Formulierungen nicht gefallen oder Du anders-
|
||
sprachige Ausgaben haben moechtest.
|
||
|
||
Variablen sind ueber ${VARIABLE} einzubauen, allerdings sind die
|
||
Variablennamen und deren Inhalte vom Programmcode vorgegeben und
|
||
sollten beibehalten werden. Es gibt keine vordefinierten Variablen,
|
||
die Du selbst einbauen kannst, es sei denn, Du erweiterst den
|
||
Programmcode an der entsprechenden Stelle.
|
||
|
||
Die einzigen Texte, die fest im Programmcode stehen, sind die
|
||
Hilfetexte der einzelnen Programme (ueber die Option -h oder --help
|
||
aufrufbar) sowie die Startmeldungen (Copyright etc.) und initiale
|
||
Fehlermeldungen (usevote.cfg oder messages.cfg nicht gefunden,
|
||
ungueltige oder falsch kombinierte Aufrufparameter).
|
||
|
||
|
||
usevote.rul
|
||
-----------
|
||
|
||
Mit dieser Datei koennen spezielle Regeln fuer eine gueltige Stimmabgabe
|
||
bei Mehrgruppenabstimmungen erstellt werden, z.B. dass man Punkt 3 oder 4
|
||
waehlen muss, wenn man fuer Punkt 2 gestimmt hat (quasi als weitergehende
|
||
Auswahlmoeglichkeit). Solche Regeln verkomplizieren aber die Abstimmung
|
||
und sollten nur in Ausnahmefaellen benutzt werden. Urspruenglich gedacht
|
||
war diese Moeglichkeit z.B. fuer .misc Gruppen, die zwangsweise bei einer
|
||
Aufteilung mit angelegt werden mussten. Dadurch, dass das in den
|
||
Wahlregeln fuer de.* als Automatismus eingebaut ist, kann man sich
|
||
so etwas meistens sparen. Fuer den Fall, dass bei einer vorgeschlagenen
|
||
neuen Gruppe der Name noch unklar ist, gibt ebenfalls das Benutzen
|
||
von speziellen Wahlregeln wenig Sinn, da man auch eine Meinung ueber
|
||
den Gruppennamen haben kann, wenn man eigentlich gegen die Gruppe ist.
|
||
|
||
Wenn Du aber ein Verfahren betreust, in dem Du solche Sonderregeln
|
||
benoetigst, kannst Du eine Regel pro Zeile in der folgenden Syntax schreiben:
|
||
|
||
if .jjjjj then J....
|
||
|
||
Eine Regel beginnt immer mit "if", und danach folgen eine Anzahl Symbole;
|
||
diese Anzahl muss gleich der Anzahl der Gruppen sein, ueber die abgestimmt
|
||
wird. Oben geht es also um eine Abstimmung ueber sechs Gruppen.
|
||
Die Symbole hinter "if" geben an, in welchem Fall diese Regel Anwendung
|
||
finden soll. Falls sie zutrifft, wird die Bedingung hinter "then"
|
||
geprueft (dort muessen nochmal so viele Symbole folgen, wie Gruppen
|
||
im Wahlschein vorkommen). Ist diese Bedingung nicht erfuellt, wird
|
||
der Wahlschein dem Wahlleiter als regelverletzend vorgelegt, und
|
||
wenn diese mit "(w)eiter" den Fehler bestaetigt, wird eine entsprechende
|
||
Fehlermeldung zurueckgeschickt und die Stimme als ungueltig gewertet.
|
||
|
||
Folgende Symbole sind erlaubt:
|
||
|
||
J eine JA-Stimme
|
||
N eine NEIN-Stimme
|
||
E eine Enthaltung
|
||
S eine JA- oder NEIN-Stimme
|
||
H eine Enthaltung oder JA-Stimme
|
||
I eine Enthaltung oder NEIN-Stimme
|
||
. egal (Ja, nein oder Enthaltung)
|
||
j eine oder mehrere der markierten Gruppen hat JA-Stimme
|
||
n "" "" "" "" "" "" "" NEIN-Stimme
|
||
e "" "" "" "" "" "" "" Enthaltung
|
||
s "" "" "" "" "" "" "" Ja- oder Nein-Stimme
|
||
h "" "" "" "" "" "" "" Enthaltung oder Ja-Stimme
|
||
i "" "" "" "" "" "" "" Enthaltung oder Nein-Stimme
|
||
|
||
Hier noch ein Beispiel:
|
||
if S... then .ss.
|
||
if .S.. then ..E.
|
||
if ..S. then .E..
|
||
|
||
Diese Regeln sagen: Wer fuer die erste Gruppe abstimmt, der muss auch
|
||
fuer die zweite und dritte Gruppe abstimmen - egal wie. Ausserdem muss er
|
||
(Regeln 2 und 3) sich bei 3 enthalten, wenn er bei 2 eine Stimme abgibt
|
||
und umgekehrt. Die vierte Gruppe wird hier gar nicht betroffen.
|
||
|
||
|
||
usevote.cfg
|
||
-----------
|
||
|
||
Dieses ist die zentrale Konfigurationsdatei fuer Usevote. Einige
|
||
Einstellungen sind nur einmal auf das System und Deine Gewohnheiten
|
||
anzupassen, andere muessen fuer jede Abstimmung geaendert werden.
|
||
Alle Einstellungen sind mit mehr oder weniger sinnvollen
|
||
Standardwerten vorgegeben, die sich bei leerer usevote.cfg mittels
|
||
"uvvote.pl -t" ermitteln lassen.
|
||
|
||
Es lassen sich durch eine Zeile "include dateiname" weitere
|
||
Konfigurationsdateien einbinden. Die Stelle, an der dieses geschieht,
|
||
ist dabei wichtig, da die usevote.cfg von oben nach unten gelesen
|
||
wird (zus<75>tzlich eingebundene Konfigurationsdateien werden an der
|
||
Stelle der "include"-Zeile eingef<65>gt) und bei mehrmals vorkommenen
|
||
Optionen der jeweils letzte gesetzte Wert benutzt wird.
|
||
Daher sollte eine Datei mit systemweiten Defaults am besten am
|
||
Anfang der usevote.cfg eingebunden werden, die dort gesetzten
|
||
Optionen sollten aber unbedingt aus der usevote.cfg geloescht werden,
|
||
damit die systemweiten Einstellungen nicht gleich wieder ueberschrieben
|
||
werden.
|
||
|
||
Das Format ist allgemein:
|
||
|
||
Option = Wert
|
||
|
||
Der Wert muss in manchen Faellen 0 (=aus) oder ungleich 0 (=an) sein,
|
||
in anderen Faellen muss eine exakte Zahl oder Zeichenkette eingegeben
|
||
werden.
|
||
|
||
Alles, was hinter einem # Zeichen steht, wird als Kommentar gewertet
|
||
und ignoriert. Steht hinter einem Wert so ein Kommentar, wird
|
||
normalerweise alles bis zum Kommentarzeichen noch in den String
|
||
einbezogen. In so einem Fall sollte der Wert von Anfuehrungszeichen
|
||
umschlossen werden. Im folgenden Beispiel wird ein Dateiname
|
||
definiert:
|
||
|
||
# Der Dateiname endet mit 10 Leerzeichen (bis zum Kommentarzeichen):
|
||
tpl_mailheader = mailheader # Kommentar
|
||
|
||
# Der Dateiname enthaelt keine Leerzeichen, da mit Anfuehrungsstrichen
|
||
# begrenzt:
|
||
tpl_mailheader = "mailheader" # Kommentar
|
||
|
||
Folgt kein Kommentar in der selben Zeile, koennen die Anfuehrungsstriche
|
||
weggelassen werden.
|
||
|
||
Hier eine Auflistung der immer anzupassenden Optionen
|
||
(BOOL bedeutet, dass 0 (aus) oder 1 (an) eingetragen werden muss):
|
||
|
||
votename Name der Abstimmung
|
||
group1 Erster Abstimmungsgegenstand
|
||
group2 Zweiter (und so weiter durchnummerieren)
|
||
votefile Mailbox mit eingehenden Stimmen (falls POP3 ausgeschaltet)
|
||
personal Personalisierte Wahlscheine verwenden? [BOOL]
|
||
(siehe gesonderten Abschnitt weiter oben)
|
||
voteaccount Mailadresse, unter der abgestimmt werden kann
|
||
(Reply-To im CfV auf diese Adresse setzen)
|
||
requestfile Datei mit Anforderungsmails bei "personal=1", falls
|
||
POP3 ausgeschaltet ist
|
||
bdsg Datenschutzklausel generieren und auf deren Existenz
|
||
pruefen? [BOOL] (siehe gesonderten Abschnitt weiter oben)
|
||
replyto Reply-To Header auswerten? [BOOL] (nicht empfohlen und in
|
||
de.* von den GVV nicht praktiziert)
|
||
voteack Jede Stimme mit einer Bestaetigungsmail beantworten? [BOOL]
|
||
(in de.* so ueblich)
|
||
mailcc weitere Mailadresse, an die eine Kopie jeder Bestaetigungs-
|
||
oder Fehlermail geschickt wird (fuer Archivzwecke)
|
||
onestep Mails direkt verschicken und Ergebnisse speichern? [BOOL]
|
||
("uvvote clean" Aufruf entfaellt)
|
||
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"
|
||
resultfile Datei fuer Gesamtergebnis (normalerweise ergebnis.alle)
|
||
idfile Datei mit Scheinkennungen (bei "personal=1")
|
||
pop3 POP3 benutzen? [BOOL] (andernfalls Stimmen aus Datei lesen)
|
||
pop3server POP3-Server fuer eingehende Wahlscheine
|
||
pop3port POP3-Serverport (normalerweise 110)
|
||
pop3user Benutzername
|
||
pop3pass Passwort
|
||
pop3delete Mails nach Abruf vom Server loeschen? [BOOL]
|
||
pop3uidlcache Dateiname zum Speichern bereits abgerufener Mail-IDs (UIDL)
|
||
pop3*_req entsprechende Optionen fuer Mailbox mit eingehenden
|
||
Wahlscheinanforderungen (bei "personal=1")
|
||
pop3*_bounce entsprechende Optionen fuer Mailbox mit Bounces (Fehlermails)
|
||
fuer die Verarbeitung durch uvbounce.pl
|
||
smtp SMTP zum Verschicken von Mails benutzen? [BOOL]
|
||
Andernfalls wird direkt an den MTA uebergeben (nur Unix)
|
||
smtpserver SMTP-Server
|
||
smtpport SMTP-Serverport (normalerweise 25)
|
||
smtpauth SMTP-Authentication nach RFC 2554 benutzen? [BOOL]
|
||
smtpuser SMTP-Benutzername
|
||
smtppass SMTP-Passwort
|
||
smtphelo String fuer die HELO-Greeting bei SMTP (Default: Hostname)
|
||
fqdn String fuer den Host-Teil der Message-ID
|
||
(Fully Qualified Domain Name) (Default: Hostname)
|
||
archivedir Verzeichnis fuer Archivierung von verarbeiteten Stimmen
|
||
tmpdir temporaeres Verzeichnis
|
||
templatedir Verzeichnis mit Templates (Vorlagen) fuer diverse Zwecke
|
||
(normalerweise "templates", dort liegen bereits vordefinierte
|
||
Templates, die i.d.R. nicht angepasst zu werden brauchen)
|
||
formats Konvertierungsfunktionen fuer die Templates, mit Komma getrennt
|
||
(mitgelieferte UVformats.pm muss hier aufgefuehrt werden,
|
||
desweiteren koennen eigene Module mit weiteren Funktionen
|
||
hier eingebunden werden)
|
||
controlfile Name der Steuerungsdatei fuer den Mailversand (tmp/ack.control)
|
||
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"
|
||
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.
|
||
clearcmd Shellbefehl zum Loeschen des Bildschirms (Standard: clear),
|
||
muss unter Windows auf "cls" geaendert werden. Falls Shell
|
||
oder Betriebssystem keinen solchen Befehl bereitstellen,
|
||
sollte ein Kommando verwendet werden, welches eine Trennlinie
|
||
oder aehnliches auf dem Bildschirm ausgibt, z.B. mit "echo"
|
||
pager Shellbefehl zum seitenweisen Darstellen von Mails auf dem
|
||
Bildschirm (normalerweise "less"). Unter Windows muss "more"
|
||
benutzt werden, unter Unix hingegen gibt es moeglicherweise
|
||
bei "more" Probleme mit der Umleitung von STDERR in eine Datei
|
||
(wie es z.B. von uvvote.pl benoetigt wird), daher ist "less"
|
||
der Standardwert.
|
||
mailfrom Absender fuer den From-Header der Bestaetigungsmails. Wird
|
||
auch in Bestaetigungsmails als Unterschrift eingefuegt und
|
||
sollte daher am besten in folgendem Format sein:
|
||
Vorname Nachname <gvv@foo.bar>
|
||
(ohne Anfuehrungsstriche, falls rfc-konform moeglich)
|
||
envelopefrom Absender fuer den Envelope (Return-Path) der Bestaetigungsmails
|
||
bei Verwendung von SMTP (bitte nur die Adresse eintragen, ohne
|
||
Klammern und Zusaetze). Wenn SMTP ausgeschaltet ist, muss
|
||
diese Einstellung entsprechend der Mailer-Doku in "mailcmd"
|
||
gesetzt werden (z.B. bei Sendmail und kompatiblen mit -f)
|
||
messagefile Datei mit diversen Meldungen und Textfragmenten (messages.cfg)
|
||
rulefile Datei mit Wahlregeln (usevote.rul)
|
||
badaddrfile Datei mit verdaechtigen Mailadressen (mailpatterns.cfg)
|
||
errorfile Datei fuer Fehlermeldungen beim Programmlauf (errors.log)
|
||
mailstart Einleitungszeile fuer naechste Mail (RegExp), falls Mails
|
||
aus einer Datei eingelesen werden (smtp=0), normalerweise
|
||
"^From"
|
||
begin_divider Trennlinien vor und nach dem Wahlschein
|
||
end_divider ("Alles vor/nach dieser Zeile bitte loeschen")
|
||
nametext Text fuer die Namens-Angabe im Wahlschein. Muss im
|
||
Wahlschein genauso stehen und wird beim Standardtemplate
|
||
auch aus dieser Einstellung uebernommen. Beispieltext:
|
||
"Dein Realname, falls nicht im FROM-Header:"
|
||
nametext2 Text fuer Namens-Angabe in Bestaetigungsmails
|
||
(dito, Standardwert "Waehlername:")
|
||
addresstext Text fuer die Adress-Angabe im Wahlschein
|
||
(dito, Standardwert "Waehleradresse:")
|
||
ballotidtext Text f<>r die Angabe der Wahlscheinkennung (falls personal=1)
|
||
(dito, Standardwert "Wahlscheinkennung:")
|
||
bdsgtext Text fuer Datenschutzklausel (falls bdsg=1), erscheint als
|
||
Abstimmungspunkt (z.B. "Datenschutzklausel - Zustimmung: Ich
|
||
bin mit der Verarbeitung meiner Daten wie oben beschrieben
|
||
einverstanden")
|
||
bdsgfile Datei mit Erklaerungstext fuer BDSG-Klausel (bdsgtext.cfg)
|
||
rightmargin Zeilenbreite bei Ausgaben, die nicht durch Templates
|
||
gesteuert werden. Hat vor allem auf Bildschirmausgaben
|
||
Auswirkung.
|
||
name_re Regulaerer Ausdruck fuer Erkennung eines gueltigen Realnamens.
|
||
Beispiel: "[a-zA-Z<><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-]{2,} +
|
||
.*[a-zA-Z<><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]{2,}"
|
||
(muss ohne Umbruch in eine Zeile)
|
||
|
||
Regulaere Ausdruecke fuer Erkennung der Stimmen
|
||
(Gross-/Kleinschreibung spielt keine Rolle):
|
||
|
||
ja_stimme Standardwert: (J\s*A|J|(D\s*A\s*)?F\s*U\s*E\s*R)
|
||
nein_stimme Standardwert: (N\s*E\s*I\s*N|N|(D\s*A\s*)?G\s*E\s*G\s*E\s*N)
|
||
enth_stimme Standardwert: (E|E\s*N\s*T\s*H\s*A\s*L\s*T\s*U\s*N\s*G)
|
||
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
|
||
|
||
Definition der verwendeten Templatedateien
|
||
(werden im Unterverzeichnis "templates" mitgeliefert):
|
||
|
||
tpl_mailheader "mailheader" # generally used mail header
|
||
tpl_bouncelist "bouncelist" # used by uvbounce.pl
|
||
tpl_result_multi "result-multi" # used by uvcount.pl -r -m
|
||
tpl_result_single "result-single" # used by uvcount.pl -r -o
|
||
tpl_votes_multi "votes-multi" # used by uvcount.pl -v (multiple groups)
|
||
tpl_votes_single "votes-single" # used by uvcount.pl -v (single group only)
|
||
tpl_voterlist "voterlist" # used by uvcount.pl -l (2nd CfV)
|
||
tpl_ballot "ballot" # used by uvballot.pl (personal = 0)
|
||
tpl_ballot_request "ballot-request" # used by uvballot.pl (personal = 1)
|
||
tpl_ballot_personal "ballot-personal" # used by uvcfv.pl (personal = 1)
|
||
tpl_addr_reg "address-not-registered" # used by uvvote.pl (personal = 1)
|
||
tpl_no_ballotid "no-ballotid" # used by uvvote.pl (personal = 1)
|
||
tpl_wrong_ballotid "wrong-ballotid" # used by uvvote.pl (personal = 1)
|
||
tpl_bdsg_error "bdsg-error" # used by uvvote.pl (bdsg = 1)
|
||
tpl_ack_mail "ack-mail" # used by uvvote.pl (voteack = 1)
|
||
tpl_cancelled "cancelled" # used by uvvote.pl
|
||
tpl_invalid_account "invalid-account" # used by uvvote.pl
|
||
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_rule_violated "rule-violated" # used by uvvote.pl (siehe usevote.rul)
|
||
|
||
|
||
15. Templates
|
||
=============
|
||
|
||
Die mitgelieferten Templates befinden sich im Verzeichnis "templates".
|
||
In usevote.cfg koennen weitere Verzeichnisse definiert werden, in
|
||
denen auch nach Templates gesucht wird ("templatedir", kommaseparierte
|
||
Liste mit Verzeichnissen). Au<41>erdem koennen dort die Dateinamen der einzelnen
|
||
Templates eingestellt werden, wodurch es moeglich ist, in einzelnen
|
||
Abstimmungen andere, selbst definierte Templates zu verwenden, die in
|
||
einem gesonderten Verzeichnis abgelegt sind.
|
||
|
||
Eine Templatedatei besteht aus zwei Teilen. Am Anfang werden die
|
||
Formatierungen bestimmter Schluessel definiert und nach einem Trenner
|
||
folgt der eigentlich Template-Koerper, der dann von Programm bearbeitet
|
||
und ausgegeben wird.
|
||
|
||
format-key := function1 param | function2 param
|
||
|
||
== TEMPLATE ====================================
|
||
|
||
Ich bin nun das eigentliche Template:
|
||
|
||
format-key: [$format-key]
|
||
|
||
Der Trenner beginnt mit den Zeichen '== TEMPLATE' danach koennen beliebige
|
||
Zeichen folgen um die beiden Sektionen optisch voneinander abzugrenzen.
|
||
|
||
Wenn es keine Formatierungsanweisungen gibt, kann der Trenner auch
|
||
weggelassen werden. D.h. wenn kein Trenner gefunden wird, wird der
|
||
komplette Text als Template-Koerper betrachtet.
|
||
|
||
|
||
Template-Koerper
|
||
----------------
|
||
|
||
Im Template-Koerper werden die zu ersetzenden Token durch eckige
|
||
Klammern abgegrenzt. Sollen eckige Klammern im Text ausgegeben werden,
|
||
muessen diese durch einen Backslash freigestellt werden.
|
||
|
||
[$termersetzung] [@schleife] nur eine \[ Klammer
|
||
|
||
|
||
Termersetzung:
|
||
|
||
Ersetzt den Token durch den Wert des angegeben Schluessels:
|
||
|
||
[$formatierung] [$schluessel]
|
||
|
||
Es wird zuerst nach einer Formatierung mit den entsprechenden
|
||
Bezeichner gesucht. Ist diese vorhanden, werden die entsprechenden
|
||
Funktionen ausgefuehrt (siehe folgender Abschnitt).
|
||
|
||
Kann kein Format gefunden werden, wird direkt in der im Programmcode
|
||
gefuellten Datenstruktur nach einem Schluessel mit dem angegeben
|
||
Bezeichner gesucht und sein Wert eingesetzt. Alle Einstellungen
|
||
aus der usevote.cfg sind automatisch als Schluessel definiert, es
|
||
kann also z.B. [$nametext] jederzeit verwendet werden. Eingesetzt
|
||
wird an der Stelle der mit "nametext = " definierte Text aus
|
||
usevote.cfg.
|
||
|
||
Schlussendlich ist es noch moeglich einen default-Wert zu
|
||
definieren, der eingesetzt wird, wenn keiner der obigen Wege
|
||
erfolgreich war:
|
||
|
||
Hallo [$name|Unbekannter]!
|
||
|
||
Diese Zeile gibt, wenn kein Name definiert wurde, das Wort
|
||
"Unbekannter" aus.
|
||
|
||
|
||
Bedingte Verzeigung:
|
||
|
||
Ueberprueft ob der Wert des angegebenen Formats/Schluessel boolsch
|
||
WAHR ist. Dementsprechend wird der then oder else Block eingefuegt:
|
||
|
||
[?if|then|else] oder auch nur [?if|then]
|
||
|
||
Die then/else Bloecke werden natuerlich auch auf Tokens geparst und
|
||
diese dementsprechend ersetzt.
|
||
|
||
|
||
Schleifen/Listen:
|
||
|
||
Der nachfolgende Textblock wird fuer alle Elemente des durch den
|
||
Schluessel bezeichneten Arrays ausgefuehrt und eingefuegt.
|
||
|
||
[@schluessel|block] oder [@schluessel|block|sep]
|
||
|
||
Als zweiter Parameter kann ein Separtor definiert werden, mit dem
|
||
sich z.B. kommaseparierte Listen erzeugen lassen, da der Separator
|
||
eben nur zwischen den Elementen eingefuegt wird.
|
||
|
||
Auch fuer Schleifen koennen Formatierungen genutzt werden.Allerdings
|
||
darf kein String zurueckgegeben werden, sondern ein Array mit einer
|
||
Menge von UVtemplate-Objekten.
|
||
|
||
|
||
Kommentare:
|
||
|
||
Token die nach der Bearbeitungen entfernt werden:
|
||
|
||
[# mich sieht man nicht]
|
||
|
||
|
||
Sonstiges:
|
||
|
||
Um in Listen einen Zeilenumbruch zu erzwingen, muss lediglich ein
|
||
'\n' eingefuegt werden, falls eine kompakte Definition der Liste
|
||
erfolgen soll.
|
||
|
||
[@names|[name] [email]\n]
|
||
|
||
|
||
Formatierungen
|
||
--------------
|
||
|
||
Eine Formatierung besteht eigentlich nur aus dem entsprechenden
|
||
Namen und einer beliebigen Anzahl von Funktionsaufrufen:
|
||
|
||
format := funktion param1 "param 2" | funktion param
|
||
|
||
Aehnlich der Unix-Shell-Funktionalitaet, wird dabei die Ausgabe
|
||
einer Funktion an die folgende weitergeleitet. So ist es moeglich,
|
||
verschiedenste simple Formatierungen zu kombinieren um nicht fuer
|
||
jeden Spezialfall eine neue Funktion schreiben zu muessen.
|
||
|
||
Die jeweilige Formatierungsfunktion erhaelt als Input die
|
||
Datenstruktur, den Output der vorherigen Funktion und die definierten
|
||
Parameter in der entsprechenden Reihenfolge.
|
||
|
||
Zahlen und einfache Bezeichner koennen direkt definiert werden.
|
||
Sollen Sonderzeichen oder Leerzeichen uebergeben werden, muessen
|
||
diese gequotet werden. Dazu kann ' oder " verwendet werden.
|
||
|
||
Die Funktionen geben im Allgemeinen einen String zurueck. Im Rahmen
|
||
von Listen k<>nnen auch Arrays uebergeben werden.
|
||
|
||
Die erste Funktion duerfte ueblicherweise 'value' sein. Sie gibt
|
||
den Wert des angegeben Schluessel zurueck, der dann von den
|
||
folgenden Funktionen definiert wird:
|
||
|
||
name-60 := value name | fill-right 60
|
||
|
||
Das Format "name-60" definiert also den Wert des Schluessel "name",
|
||
der um Leerzeichen aufgefuellt wird, bis eine Laenge von 60 Zeichen
|
||
erreicht wird.
|
||
|
||
name-email := value name | justify-behind mail 72
|
||
|
||
"name-email" resultiert in einem String, der zwischen den Werten von
|
||
"name" und "email" genau so viele Leerzeichen enthaelt, damit der
|
||
gesamte String 72 Zeichen lang ist.
|
||
|
||
Wird dieses Format in einer Liste angewandt, erhaelt man eine Tabelle
|
||
in der die linke Spalte linksbuendig und die rechte Spalte
|
||
entsprechend rechtsbuendig ist.
|
||
|
||
Soweit ein kleiner Ueberblick ueber die Formatierungen. Ausfuehrliche
|
||
Funktionsbeschreibungen und weitere Beispiele finden sich in der
|
||
POD-Dokumentation des Moduls UVformat ("perldoc UVformat.pm").
|
||
|
||
Es ist moeglich, selbst eigene Module mit Formatierungsfunktionen
|
||
zu schreiben und ueber die Option "formats" in usevote.cfg einzubinden.
|
||
Am besten kann dazu UVformats.pm als Vorlage genommen werden.
|
||
Wichtig: der Name einer Formatierungsfunktionen darf nur aus
|
||
Gross- und Kleinbuchstaben, Zahlen und Minuszeichen bestehen.
|
||
Unterstriche, Punkte etc. sind nicht erlaubt!
|
||
|
||
Falls eine elementare Funktion fehlt, kannst Du Dich auch gerne
|
||
bei mir melden und ich pruefe, wie sie sich einbauen laesst.
|
||
|
||
Marc Langer, im Oktober 2005
|