An application for managing observed trials motorbike and bicycle competitions. The documentation, code, and user interface are all in German.
Perl JavaScript HTML Other
Permalink
Failed to load latest commit information.
IO IO::Tee - Modul hinzufügen Nov 19, 2012
cgi-bin
htdocs Merge branch 'master' into otsv Oct 4, 2016
lib Auf Base64-Codierte Tags wechseln Jan 11, 2017
.gitignore
BUGS Dokumentieren, dass Zeit- und Zusatzpunkte im Moment nur ganzzahlig sind Jan 11, 2014
CONFIG.in CONFIG.in: Defaults auf Server-Config ändern Apr 25, 2016
Makefile Update-Scripts erzeugen Apr 29, 2016
README Perl JSON::Pointer Update to version 0.07 Sep 8, 2016
TRIALTOOL Dokumentieren, dass das Trialtool kein UTF-8 kann Jan 7, 2014
db-convert.pl db-convert: Kleinen Fehler beheben Apr 18, 2014
db-sync.pl Neue Spalte password in Tabelle benutzer Jul 30, 2016
hexdump Einfaches hexdump-Script für dat-Dateien hinzufügen Nov 25, 2012
jahreswertung.pl
make-trialinfo-update
perl-dump.pl Berechnung von Ausgabe von Tages- und Jahreswertung trennen Mar 18, 2014
tageswertung.pl Admin: Einzelpunkte und Fünfer in der Auswertung May 31, 2015
trialinfo-update.in Check auf initiale Version nicht mehr nötig May 12, 2016

README

TrialInfo
=========

TrialInfo ist ein Auswertungssystem für Trial Motorrad- und Fahrrad-
Wettbewerbe. Es unterstützt alle wesentlichen Schritte zur Verwaltung einzelner
Veranstaltungen und zur Erstellung von Gesamtwertungen über mehrere
Veranstaltungen.

Folgende Funktionen werden unterstützt:

 * Anlegen, Ändern und Löschen von Veranstaltungen.  Konfigurieren von
   Veranstaltungen (Wertungen, Klassen, befahrene Sektionen, usw.).

 * Anlegen und Ändern von Fahrern, Zuweisen von Startnummern, Auswahl der
   Starter einer Veranstaltung.

 * Verwaltung von Gruppen und Erstellung von Gruppenwertungen.

 * Erfassung der Ergebnisse (Punkte, Ausfall, Stechen, Start- und Zielzeit).

 * Erstellung verschiedener Fahrerlisten und von Ergebnislisten online und
   als PDF-Dateien.

 * Definition von Veranstaltungsreihen (enthaltene Veranstaltungen und Klassen,
   Anzahl der Läufe und Streichresultate, Startnummernänderungen zwischen
   Veranstaltungen).

 * Import von und Export auf Dateien. Import vom und Export in das Programm
   TrialTool von Ortwin Sann [1].

 * Import direkt von einem Server. Laufende Synchronisierung auf einen Server.

 * Präsentationsmodus (für einen externen Bildschirm).

Das System ist komplett über einen Web-Browser bedienbar.  Es kann von mehreren
Geräten aus gleichzeitig verwendet werden. Wird dabei versucht, die selben
Daten mehrfach zu verändern, dann werden diese Konflikte erkannt, und es kommt
zu Fehlermeldungen


Systemvoraussetzungen
=====================

 * Ein einigermaßen aktuelles Linux-System.  (Dieses System kann auch
   innerhalb einer virtuellen Maschine laufen.)

 * Die Scriptsprache Perl. Zusätzlich folgende Pakete oder Perl-Module:
   perl-DBD-MySQL, perl-CGI, perl-JSON, perl-Clone, perl-URI-Escape oder
   perl-Any-URI-Escape + perl-URI-Escape-XS, perl-Class-Accessor-Lite,
   perl-Module-Load, perl-Module-Loaded, perl-Encode-Locale, perl-IO-Zlib,
   perl-PDF-API2, perl-HTML-Entities-Interpolate.

   (Die Paketnamen weichen teilweise ab; unter Debian heißt perl-PDF-API2
   z.B. libpdf-api2-perl.)

 * Die Datenbank MySQL (bzw. MariaDB).

 * Den Apache Web-Server.


Konfiguration
=============

Datenbank
---------

In MySQL ist wichtig, dass eine transaktionsfähige Datenbank-Engine  (InnoDB,
nicht MyISAM) verwendet wird.


  Beispiel
  --------

  $ mysqladmin --user=root password
  New password: 
  Confirm new password: 

  $ mysql --user=root --password
  Enter password: 
  > CREATE DATABASE trialinfo CHARACTER SET utf8;
  > CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';
  > CREATE USER 'admin'@'%' IDENTIFIED BY 'password';
  > GRANT ALL PRIVILEGES ON trialinfo.* TO 'admin'@'%';


Die anfängliche Datenbankstruktur lässt sich danach mit "db-sync
--create-tables" erzeugen.


  Beispiel
  --------
  $ ./db-sync.pl --db='mysql:trialinfo;host=localhost' \
		 --user=admin \
		 --password=password \
		 --create-tables


Web Server
----------

Die Dateien im Verzeichnis "htdocs" müssen in einem Dokumentenverzeichnis
liegen; die Dateien im Verzeichnis "cgi-bin" in einem Verzeichnis, in dem der
Web Server CGI-Scripts ausführen darf.

Die *.shtml - Dateien müssen vom Web Server als Server Side Include-Dateien
(SSI) verarbeitet werden.

  Beispielkonfiguration für Apache:

    <VirtualHost *:80>
	DocumentRoot /home/agruen/trialinfo/htdocs
	ServerName trialinfo.home

	ScriptAlias /cgi-bin/ "/home/agruen/trialinfo/cgi-bin/"

	<Directory "/home/agruen/trialinfo/htdocs">
	    Options Indexes
	    AllowOverride All
	    Require all granted
	</Directory>

	<Directory "/home/agruen/trialinfo/cgi-bin">
	    Options None
	    AllowOverride All
	    Require all granted
	</Directory>
    </VirtualHost>

Die Verzeichnisse htdocs/veranstalter/, cgi-bin/veranstalter/, admin/, api/
geben auch Zugriff auf Funktionen, die üblicherweise nicht öffentlich
zugänglich sein sollen.

Je nach Konfiguration kann es sein, dass die Konfiguration für TrialInfo mit
dem Befehl "a2ensite" aktiviert werden muss.

Standardmäßig ist der Zugriff auf den Veranstalter-Bereich auf die Gruppe
"veranstalter" beschränkt.  Zum Rechtemodell in der Administration siehe unten.

Um Benutzer zu definieren, muss eine Datei .htpasswd erzeugt werden (Utility
"hdpasswd"). Diesen Benutzern müssen dann in der Datei .htgroup die
entsprechenden Gruppen zugewiesen werden.


Herunterladen und erzeugen diverser Dateien
-------------------------------------------

Um einige Dateien wie Angular.js herunterzuladen und passende .htaccess-Dateien
zu erzeugen, kann Make verwendet werden:

  $ make


Apache-Module
-------------

Auf manchen Systemen wie Ubuntu 15.04 müssen die verwendeten Apache-Module
mit folgendem Befehl aktiviert werden:

  $ a2enmod include.load cgid.load authz_groupfile.load rewrite.load


Scripts
-------

Die Scripts lassen sich über die Datei lib/Auswertung.pm konfigurieren.  Die
Einstellungen dort betreffen Dinge wie die Zugriffsdaten auf die Datenbank.

Achtung: Diese Datei lib/Auswertung.pm muss per Hand erzeugt werden, teilweise
BEVOR DIE SCRIPTS VERWENDET WERDEN KÖNNEN.  Eine Vorlage dafür befindet sich in
der Datei lib/Auswertung.pm.txt.


Veranstaltungsverwaltung
========================

Nach der Konfiguration der verschiedenen Komponenten ist die
Veranstaltungsverwaltung im Pfad /admin/ auf dem Web-Server verfügbar.


Rechtemodell und Rechteverwaltung
=================================

Auf den Administrationsbereich haben nur für den Web-Server definierte Benutzer
Zugriff.  Dabei sehen Benutzer nur diejenigen Veranstaltungen und
Veranstaltungsreihen, zu denen sie zumindest Lesezugriff haben.

Legt ein Benutzer eine neue Veranstaltung oder Veranstaltungsreihe an, dann
bekommt er dort Schreib-/Lesezugriff.  Falls der Benutzer zu diesem Zeitpunkt
noch nicht in der Datenbank existiert, wird er dort angelegt.

Zusätzlich können Benutzer als Administratoren markiert sein, dann haben sie
Schreib-/Lesezugriff auf alle Veranstaltungen und Veranstaltungsreihen.

Weiters lassen sich direkt in der Datenbank zusätzliche Rechte vergeben, es
lassen sich Gruppen von Benutzern definieren, und es kann definiert werden, wie
Berechtigungen zwischen Veranstaltungen "vererbt werden", wenn eine
Veranstaltung auf Basis einer anderen Veranstaltung erzeugt wird.

Veranstaltungen "erben" auch die Zugehörigkeit zu Veranstaltungsreihen von
ihrer Basisveranstaltung, sofern der Benutzer Schreibzugriff auf die jeweilige
Veranstaltungsreihe hat.


Reihung in der Jahreswertung
============================

Fahrer werden zunächst anhand ihrer Gesamtpunkteanzahl gereiht, wobei die
Punkte aus Streichresultaten abgezogen sind.

Bei gleichem Punktestand werden alle erzielten Ergebnisse inklusive der
Streichresultate verglichen.  Der Fahrer mit mehr guten Platzierungen, also mit
mehr ersten Plätzen, oder mit mehr zweiten Plätzen bei gleicher Anzahl erster
Plätze, usw., gewinnt.

Danach gewinnt der Fahrer mit mehr Streichpunkten.

Wenn danach immer noch Gleichstand herrscht, werden beide Fahrer momentan
gleich gereiht.


WeasyPrint
==========

WeasyPrint Wird verwendet, um am Server HTML nach PDF zu konvertieren.
Weasyprint ist zwar speziell für die Ergebnislisten mit ihren großen Tabellen
sehr langsam, dafür erzeugt es aber einen ordentlichen Seitenumbruch, was z.B.
WebKit-basierte Lösungen wie wkhtmltopdf nur sehr mangelhaft beherrschen.

  yum install weasyprint


Perl-Module
===========
git://github.com/zigorou/perl-json-pointer.git
git://github.com/zigorou/perl-json-patch.git


Lizenz
======

Dieser Text und die Programme stehen under der GNU Affero General Public License
Version 3, http://www.gnu.org/licenses/agpl-3.0.html.


Referenzen
==========

[1] http://www.ortwinsann.de/trialtool/