Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:erweiterungen:untis2moodle:start]] 

Inhaltsverzeichnis

Idee

Untis exportiert in der Standardeinstellung über den Druckdialog einen Satz von HTML-Dateien wenn man eine Webseite oder eine Lernplattform besitzt, kann man diesen Satz zur Veröffentlichung nutzen.

Dieses Skript:

  • kopiert (ggf. mehrere) Sätze von HTML-Dateien (in entsprechenden Unterordnern) an einen anderen Ort und
  • benennt diese Dateien nach einem festen Schema um, so dass sich die Dateinamen nicht mehr ändern
  • entledigt sich einiger „Design-Sünden“ und macht die Dateien in gewissem Umfang per CSS formatierbar
  • prüft, ob bei der Kopieroperation neue Dateien entstehen (neue Klassen/Kürzel) und weist auf Wunsch per Email darauf hin
  • reinigt automatisch alte HTML-Dateisätze im Originalverzeichnis

Damit ergibt sich ein (bei uns genutztes) Veröffentlichungsszenario bei Moodle: Aus Sicherheitsgründen erlaubt Moodle seit der Version 2 keine „lose herumliegenden Dateien“ mehr im Dateisystem. Damit ist ein einfacher Upload auf den Server nicht mehr möglich. Mit dem Hilfsmittel „Dateisystem-Repo“ gibt es aber einen vergleichsweise eleganten Weg, den Vertretungsplan innerhalb von Moodle und zugleich nur Zugangsberechtigten zur Verfügung zu stellen:

  • man erstellt für jeden Datensatz (Schüler/Lehrer) ein Dateisystem-Repository (normalerweise unter /var/lib/moodle/repository
  • man exportiert den Vertretungsplan aus Untis mit festgelegtem Namensschema (20130225) in entsprechende Verzeichnisse
  • dieses Skript kopiert die entstandenen Dateien, ändert aber den Namen entsprechend dem aktuellen Datum in „heute“, „morgen“, etc. um
  • in Moodle muss man nun einmalig mit Hilfe des Werkzeugs „Datei“ sämtliche Dateien eines Satzes (also praktisch heute_*.htm) und die generierte index.html sowie die CSS- und Logo-Dateien hinzufügen.

Danach kann über Moodle auf den gesamten Vertretungsplan zugegriffen werden. Sogar das Bookmarken einzelner Klassen ist möglich (ein Klassenlehrer kann in einem Kurs aus dem Repo nur den Klassenvertretungsplan hinzufügen, etc.). Trotzdem ist der Zugang nur für Moodle-Benutzer möglich, da kein direkter Zugriff auf die Dateien besteht.

Das Pendant zu diesem Skript ist untis2vplan - ein Skript, welches dieselben HTML-Dateien in eine einzelne HTML-Datei überträgt, die per CSS formatiert und z.B. auf Vertretungsbildschirmen angezeigt werden kann.

Skript

Dieses Skript läuft bei uns seit einigen Tagen im Testbetrieb. Da ggf. Anpassungen notwendig sind, ist es nicht ohne ein gewisses Maß an Hintergrundwissen übertragbar. Die Anwendung geschieht auf eigene Gefahr. Insbesondere der Paramete „cleanup“ sollte nur verwendet werden, wenn die HTML-Dateien der Untis-Ausgabe „verzichtbar“ sind.
#/bin/bash
# Untis exportiert in der Standardeinstellung über den Druckdialog einen Satz von HTML-Dateien
# wenn man eine Webseite oder eine Lernplattform besitzt, kann man diesen Satz zur Veröffentlichung nutzen
#
# Dieses Skript:
# - kopiert (ggf. mehrere) Sätze von HTML-Dateien (in entsprechenden Unterordnern) an einen anderen Ort und
# - benennt diese Dateien nach einem festen Schema um, so dass sich die Dateinamen nicht mehr ändern
# - entledigt sich einiger "Design-Sünden" und macht die Dateien in gewissem Umfang per CSS formatierbar
# - prüft, ob bei der Kopieroperation neue Dateien entstehen (neue Klassen/Kürzel) und weist auf Wunsch per Email darauf hin
# - reinigt automatisch alte HTML-Dateisätze im Originalverzeichnis
#
# Damit ergibt sich ein (bei uns genutztes) Veröffentlichungsszenario bei Moodle:
# Aus Sicherheitsgründen erlaubt Moodle seit der Version 2 keine "lose herumliegenden Dateien" mehr im Dateisystem.
# Damit ist ein einfacher Upload auf den Server nicht mehr möglich. Mit dem Hilfsmittel "Dateisystem-Repo" gibt es aber einen 
# vergleichsweise eleganten Weg, den Vertretungsplan innerhalb von Moodle und zugleich nur Zugangsberechtigten zur Verfügung zu stellen:
# - man erstellt für jeden Datensatz (Schüler/Lehrer) ein Dateisystem-Repository (normalerweise unter /var/lib/moodle/repository
# - man exportiert den Vertretungsplan aus Untis mit festgelegtem Namensschema (20130225) in entsprechende Verzeichnisse
# - dieses Skript kopiert die entstandenen Dateien, ändert aber den Namen entsprechend dem aktuellen Datum in "heute", "morgen", etc. um
# - in Moodle muss man nun einmalig mit Hilfe des Werkzeugs "Datei" sämtliche Dateien eines Satzes (also praktisch heute_*.htm) und 
#   die generierte index.html sowie die CSS- und Logo-Dateien hinzufügen.
# Danach kann über Moodle auf den gesamten Vertretungsplan zugegriffen werden. Sogar das Bookmarken einzelner Klassen ist möglich (ein 
# Klassenlehrer kann in einem Kurs aus dem Repo nur den Klassenvertretungsplan hinzufügen, etc.). Trotzdem ist der Zugang nur für 
# Moodle-Benutzer möglich, da kein direkter Zugriff auf die Dateien besteht.
#
# Das Pendant zu diesem Skript ist untis2vplan - ein Skript, welches dieselben HTML-Dateien in eine einzelne HTML-Datei überträgt, die per
# CSS formatiert und z.B. auf Vertretungsbildschirmen angezeigt werden kann.
#
# Lizenzinformationen am Ende der Datei (dieses Skript steht unter GPL)

# Variablen zum erzeugen der "Portalseite"
title="Corvinianum Northeim - Online-Vertretungsplan"
head="Corvi-Vertretungsplan <b>online</b>"
footer="<p>Bitte immer auch die Ausfälle (letztes Feld) überprüfen!!</p><p><b>Achtung:</b> Da einem die Technik immer einen Streich spielen kann, ist dieser Plan nur als zus&aumltzliher Service gedacht.Der verbindliche Vertretungsplan ist nach wie vor der, der in der Schule auf den Monitoren sichtbar ist!</p>"

# sonstige Einstellungen
frombase=/media                          # hier liegen die Vertretungsplanordner (-> subdirs)
tobase=/var/lib/corvi_moodle/repository  # hier sollen sie hin (-> subdirs)
subdirs=( vplans vplanl )                # subdirs definiert die jeweiligen Unterordner für verschiedene Vertretungspläne
future=1                                 # vieviele Tage in die Zukunft werden angezeigt (entspr. Inhalten von htmbase)
htmbase=( heute morgen uebermorgen )     # Basisnamen für die HTML-Dateien (Umbenennung statt Kopie wg. moodle)
refresh=5                                # wir oft sollen Webseiten aktualisiert werden (Meta Refresh)
cleanup=1                                # Soll das Skript alte Untis-Dateien aufräumen?
datform=+"%Y%m%d"                      # datform gibt das Datumsformat vor, nach dem die HTML-Dateien gespeichert wurden
filetodo="untis2moodle"
mailtodo="shoe@corvinianum.de"          # soll eine email mit fehlenden Dateien versandt werden? erfordert korrekt arbeitendes mutt
cssfile="index.css"                     # einzubindende css-Datei

# für die weiteren Datumsberechnungen erkennen wir, ob das Skript am WE startet
if [[ $(date +"%a") = "Sa" || $(date +"%a") = "So" ]]; then
  first=$(date -d "next monday" $datform)
else
  first=$(date $datform)
fi

# wandere durch die Unterverzeichnisse
for subdir in ${subdirs[@]}; do
  # aufräumen, falls gewünscht
  if [[ cleanup -eq 1 ]]; then
    for f in $(ls $frombase/$subdir/html/*.htm | grep '[0-9]\{8\}'); do
      test=$(basename $f); diff=$(echo "scale=0; ($(date -d ${test:0:8} +"%s")-$(date +"%s"))/86400" | bc)
      if [[ $diff -lt 0 ]]; then
	rm $f
      fi
    done
  fi
  # Begrüßungssite - zunächst der Kopf
  indexhtml="$tobase/$subdir/index.html"
  echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\"><html><head><title>$title</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><meta http-equiv=\"refresh\" content=\"$refresh\"><link rel=\"stylesheet\" type=\"text/css\" href=\"$cssfile\"/></head><body>" > $indexhtml
  echo "<table class=\"table\"><tr class=\"row\"><td class=\"left\"></td><td class=\"middle\"><div class=\"header\">$head<hr></div>" >> $indexhtml
  # wandere durch tage (bis future)
  for (( day=0; day<=$future; day++ )) ; do
    # Abfangen des Wochenendes
    case $(date -d "$first +$day day" +"%a") in
      "Sa")
        datum=$(date -d "next monday" $datform)
      ;;
      "So")
        datum=$(date -d "next tuesday" $datform)
      ;;
      *)
        datum=$(date -d "$first +$day day" $datform)
      ;;
    esac

    # existiert der passende Dateisatz nicht, wird dies in der Überseicht vermerkt
    if [[ $(ls $frombase/$subdir/html/* | grep -c -e $datum) -eq 0 ]]; then
      echo "<div class=\"noentry\">Der Vertretungsplan für den $(date -d "$first +$day day" +"%d.%m.%Y") steht noch nicht zur Verfügung</div><hr>"  >> $indexhtml
    else
      # existiert ein passender Dateisatz, extrahieren wir die Tabelle in ein Div
      echo "<div class=\"entry\">$(date -d "$first +$day day" +"%a, %d.%m.%Y")" >> $indexhtml
      # wir fügen die zeile für den Tag ein - und löschen allen möglichen Untis-Krempel
      iconv -f ISO-8859-1 -t UTF-8 $frombase/$subdir/html/$datum.htm | sed -n 13p | sed "s/$datum/${htmbase[$day]}/g;s/---/Ausf./"  | sed -e "s/^.*font><TABLE/<TABLE/;s/TABLE><A.*/TABLE><\/div><hr>/" >> $indexhtml
    fi
    # wandern durch den Dateisatz zu einem Datum
    for f in $(ls $frombase/$subdir/html/$datum\_*.htm); do
      # erzeuge neuen Dateinamen anhand von htmbase
      fneu=$(echo ${f##*/} | sed "s/$datum/${htmbase[$day]}/")
      if [[ -e $tobase/$subdir/$fneu ]]; then
        # Die Datei existiert: wandle Datei um, ersetze Links und füge Refresh-Tag ein
        echo "$subdir/$fneu wird ersetzt..."
        cp -p $f $tobase/$subdir/$fneu
        dos2unix $tobase/$subdir/$fneu
        sed -i "s/$datum/${htmbase[$day]}/g" $tobase/$subdir/$fneu
        # Löschen von Styles, Kopf, Werbung, Einfügen von Refresh-Tag und Stylesheet, Umbiefgen der Übersicht (wegen Konvertierung Umweg über tmp-Datei)
        iconv -f ISO-8859-1 -t UTF-8 $tobase/$subdir/$fneu | sed "s/Untis//g;s/2013//;s/Stundenplansoftware//;s/<style.*style>//;s/<TABLE border=\"0\" cellpadding=\"1\" >.*<\/TABLE>//;s/<\/head>/<meta http-equiv=\"refresh\" content=\"$refresh\"><link rel=\"stylesheet\" type=\"text\/css\" href=\"$cssfile\"\/><\/head>/"  | sed "s/<A HREF=\"${htmbase[$day]}.htm\"><img src=\"GpIndex.gif\" width=\"48\" height=\"48\" border=\"0\" alt=\"Verzweigung zu Index\"><\/A>/<A HREF=\"index.html\"><b>\&Uumlbersicht<\/b><\/A>/" > /tmp/vplan
        iconv -f UTF-8 -t ISO-8859-1 /tmp/vplan -o $tobase/$subdir/$fneu
        rm /tmp/vplan
      else
        # die Datei existiert nicht: ggf. mailen, in jedem Fall loggen (diese Datei MUSS noch bei Moodle registriert werden)
        if ! [ "$mailtodo" == "" ]; then
          echo "Vertretungsplan: $subdir/$fneu FEHLT"  mutt -s "Vertretungsplan -> Datei nicht vorhanden" $mailtodo
        fi
        echo "$subdir/$fneu FEHLT <--------------- beheben" >> $filetodo
        touch $tobase/$subdir/$fneu
      fi
    done
  done
  # Abschließen der Begrüßungsseite
  echo "<div class=\"footer\">$footer</div></td><td class=\"right\"></td></tr></table></body></html>" >> $indexhtml

done

# Copyright (C) 2013 Thomas Schröder
#  Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.
# Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.
# Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, siehe <http://www.gnu.org/licenses/>. 
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

CSS

Eine passende CSS-Datei (index.css), die die wesentlichen Designelemente enthält:

body { background-color: #EEEEEE; background-image: url("rabe.png"); background-repeat: no-repeat; background-size: 200px; background-position:10px 10px;}


.left { width: 10%; }
.right { width: 10%; }

.header { text-align: center; font-size: 26pt; margin-top: 40px; }
.footer { text-align: center; }

.noentry {text-align: center; font-size: 12pt; font-weight: bold; font-style: italic; }
.entry {text-align: center; font-size: 16pt; font-weight: bold}
table {margin-left: auto; margin-right: auto; font-size: 12pt; margin-top: 20px; margin-bottom: 20px; }
 [[anwenderwiki:erweiterungen:untis2moodle:start]] anwenderwiki/erweiterungen/untis2moodle/start.txt · Zuletzt geändert: 2013/03/24 22:15 (Externe Bearbeitung)