# Copyright 2003-2005 Chris Huebsch
# Zusammen mit Jakob Voss
# Unterstuetzt von Marcel Karras
# Version 2.3b vom 12.06.2006

0. Das Tutorial: http://chu.in-chemnitz.de/programmieren/xslt/tutorial/
   erlaeutert Datails.

1. Erzeugen eines Fragebogens als XML (Vorlage question1.xml)

  Root-Objekt ist questionaire
   @title: Titel der Umfrage
   @baseurl: URL des Umfragedokumentes
   @submiturl: URL des Scriptes zum Speichern der Eingaben
   @db_host: MySql-Datenbanksserver
   @db_name: Datenbankname im MySql
   @db_user: Nutzer fr MySql
   @db_pass: Kennwort fr MySql und evtl. MD5-Geheimnis
   @db_table: Tabellenname im MySql
   @restrict: (optional) Erschwert durch ID-Vergabe das 
              mehrmalige Ausfllen von Fragebgen. 
              Mgliche Werte: url, inline
   @css-stylesheet: URL zu einem CSS-File (siehe format.css)

  Alle diese Parameter knnen auch per Kommandozeile bergeben werden und
    berschreiben dann die Werte im XML.

  Normale HTML-Elemente (p, b, i, font, img, div, br, hr, h1-h5) werden
    durchgereicht (auch ausserhalb von Fragen)

  Fragen: 
  Jede Frage hat ein Kind namens <qtext> (mit HTML-Markup)
  Optional sind 0 bis n <atext> Antworten (je nach Typ)

  selectquestion (Auswahlen)
    @type=or: Mehrere Antworten koennen ausgewaehlt werden (Checkbox)
    @type=xor: Eine Antwort kann ausgewaehlt werden (Radiobox)
    @type=dropdown: Eine Antwort kann ausgewaehlt werden (html-option)

    Beim Typ xor und dropdown kann der in die Datenbank einzutragende
    Wert auch manuell festgelegt werden. Dazu gibt man das Attribut
    value bei /jedem/ atext an. Es mssen ganze Zahlen verwendet werden.

    Beim Typ xor kann pro Zeile maximal ein <atext> angegeben werden.

  rangequestion (Bereichsauswahl)
    zwischen @left und @right werden @count Radiobuttons erzeugt

  txtquestion (Einzeilie Eingabefelder)
    Es koennen mehrere <atext> mit einem eingebetteten <input> angegeben werden.
    Ansonsten wird <input> automatisch erzeugt
    (-> bei mehreren evtl. Matrixfrage verwenden)

  txtareaquestion (Mehrzeilige Eingabe)
    @rows und @cols optional

  matrixquestion (Matrixfrage)
    @type (text, or, dropdown, xorr, xorc, mixed) Wahl des Inhaltstyps
      text: Pro Matrixfeld eine Texteingabe
      or: Jedes Matrixfeld kann unabhaengig der anderen aktiviert werden
      dropdown: Matrixfeld enthaelt eine Auswahlliste
      xorr: Aus jeder Matrixzeile kann nur ein Feld aktiviert werden
      xorc: Aus jeder Matrixspalte kann nur ein Feld aktiviert werden
      mixed: Pro Spalte ein eigener Typ. Festlegen im atext als type-Attribut
        verwendbare Typen: or, xor, text
    Jeder Typ hat je ein Unterelement namens <rows> bzw. <columns>
      dropdown zustzlich noch <fields>
    diese Elemente enthalten wiederum beliebig viele <atext>-Elemente
      fr Zeilen- / Spaltenberschriften bzw. die Inhalte der 
      dropdown-Felder
    Nummerierung der Felder:
      text, or, dropdown: zeilenweise nummeriert (f<nr>_<zeile>_<spalte>)
      xorr: zeilenweise (f<nr>_<zeile>) von oben nach unten
      xorc: spaltenweise (f<nr>_<spalte>) von links nach rechts

      Beim Typ dropdown kann der in die Datenbank einzutragende Wert manuell
      vergeben werden. Jedes atext-Element der fields-Liste ist dazu mit einem
      value-Attribut zu versehen.

      Analoges gilt fr die Typen xorc und xorr. Bei xorc sind die
      value-Attribute bei den atext-Elementen der columns-Liste anzugeben
      Bei xorr bei den atext-Elementen der rows-Liste.

  <section>-Knoten knnen Fragen gruppieren und werden mit Hilfe von CSS und
      Java-Script(!!!) einzeln aufgedeckt. ACTUNG: Kompatibilitt beachten!

  <submit>-Knoten ist Optional und kann @value als Aufschrift enthalten
    <success> Text bei erfolgreicher Eingabe
    <failid> Text wird ausgegeben, wenn ID ungltig ist
    <failused> Text wird ausgegeben, wenn ID bereits verwendet wurde

2. Generieren der Dokumente/Scripte

  a) Eingabeformular erzeugen
    (Muss bei @restrict=url als PHP erzeugt werden, sonst html)
    xsltproc tohtml.xsl fb.xml > $basurl
  b) Speicherscript erzeugen (als PHP)
    xsltproc tophp.xsl fb.xml > $submiturl
  c) Datenbankanlegescript erzeugen
    xsltproc tosql.xsl fb.xml > fb.sql
  d) Datenbankscript in mysql importieren
    mysql -h $db_host < fb.sql
  e) optional Auswertescript erzeugen
    xsltproc tostat.xsl fb.xml > fb_stat.php
  f) optional Auswertescript fr csv erzeugen
    xsltproc tocsv.xsl fb.xml > fb_stat_csv.php
  g) optional HTML-Ansicht mit Fragennummern erzeugen
    xsltproc -stringparam with-ids yes tohtml.xsl fb.xml > fb_html_id.html
  h) optional ID-Listen-Script erzeugen
    xsltproc toids.xsl > fb_id.php

3. Scripte Onlinestellen/Aktivieren

  a) Eingabeformular und Speicherscript auf php-tauglichen Webserver
  b) optional Auswertescript
  c) optional ID-Listen generieren und verschicken/ausdrucken
    (Browser, Drucker, Schere)
