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:
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:
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.
#/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ätzliher 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>\Übersicht<\/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/.
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; }