MVC-Framework und Benutzeroberflche Maximilian Weller Datenbankdesign und Klassenstruktur Moritz Willig
Werner-von-Siemens-Schule Wetzlar
2012/13
Copyright 2012-2013 Max Weller, Moritz Willig This work is licensed under the Creative Commons AttributionNonCommercial-NoDerivs 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-ncnd/3.0/.
Weitere Informationen, eine stets aktuelle Version dieses Dokuments sowie den Quelltext der Software finden Sie auch unter http://notendb-hilfe.wikilab.de/
Inhaltsverzeichnis
1 Einfhrung ................................................................................ 5
1.1 Hintergrund und Entstehung .......................................................................... 5 1.2 Verwendete Typographie ................................................................................. 6 1.3 Problemstellung .................................................................................................... 6 1.3.1 Datenbanksystem................................................................................................6 1.3.2 Weiterverarbeitung ...........................................................................................7 1.3.3 Weitere Anforderungen und Ziele ...............................................................7 1.3.4 Sicherheit ................................................................................................................7 1.4 Client-Server-Prinzip .......................................................................................... 8 1.5 Verwendete Programmiersprachen, Techniken und Module ............ 8 1.6 Verwendete Entwicklertools ......................................................................... 10
MVC-Framework..................................................................... 11
2.1 Code-Architektur ................................................................................................ 11 2.2 Das Model-View-Controller-Konzept ......................................................... 11 2.3 MVC_Framework ................................................................................................ 12 2.3.1 Ordnerstruktur .................................................................................................. 12 2.3.2 Konfiguration und Installationsassistent ............................................. 14 2.3.3 Erweiterung der Konfiguration in der notendb2 .............................. 14 2.3.4 Routing der HTTP-Anfragen ....................................................................... 15 2.3.5 Schnittstelle der Controller ......................................................................... 16 2.3.6 Routing-Beispiele ............................................................................................. 16
3.1 Datenbank ............................................................................................................. 17 3.1.1 Kriterien und Planung ................................................................................... 17 3.1.2 Umsetzung ........................................................................................................... 19 3.1.3 Sptere nderungen ....................................................................................... 21
Back-end ................................................................................ 22
4.1 Modelle ................................................................................................................... 22 4.1.1 Strukturierung der Modelle ........................................................................ 22 4.1.2 Modelle im MVC Framework....................................................................... 23 4.2 Sessionverwaltung ............................................................................................. 26 4.2.1 Lehrer Login ....................................................................................................... 26
5.1 Willkommensbildschirm ................................................................................. 28 5.2 Controller ............................................................................................................... 30 5.2.1 controller.php .................................................................................................... 30 5.2.2 Alle Controller.................................................................................................... 31 5.3 Benutzeroberflche ........................................................................................... 33 5.3.1 Benutzermen ................................................................................................... 33 5.3.2 Administrationsmen..................................................................................... 33 5.3.3 Hauptmen ......................................................................................................... 33 5.3.4 Schnellauswahl fr Datei.............................................................................. 33 5.3.5 Onlinehilfe ........................................................................................................... 33 5.3.6 Detaillierte Liste aller aktuellen Dateien .............................................. 33
Praxis ..................................................................................... 35
6.1 Systemvoraussetzungen ................................................................................. 35 6.2 Installation ............................................................................................................ 36 6.3 Leitfaden zur Administration........................................................................ 38 6.4 Beispiel einer Erweiterung ............................................................................ 38 6.4.1 Datenbankfeld hinzufgen .......................................................................... 39 6.4.2 Modell anpassen (SchuelerModel) ........................................................... 39 6.4.3 Liste anpassen ................................................................................................... 40
7
7.1 7.2 7.3 7.4
Ausblick .................................................................................. 41
Fazit ......................................................................................................................... 41 Offene Punkte ...................................................................................................... 41 Mgliche Erweiterungen................................................................................. 41 Mgliche Verwendungen ................................................................................ 42
Anlagen .................................................................................. 43
1 Einfhrung
Thema dieser Besonderen Lernleistung ist die Entwicklung einer Notenerfassungssoftware. In diesem Dokument beschreiben wir die Entstehung und Implementierung dieser Software sowie die technischen und organisatorischen Hintergrnde. Die entstandene Software trgt den internen Namen notendb2, der sich auch in der Dokumentation wiederfindet.
Anfangs war es vorgesehen, dass fr jedes Halbjahr die Kursthemen neu eingegeben werden mussten. Dies erwies sich als unpraktisch, sodass wir mit den Kursvorlagen eine Mglichkeit integrierten, die Kursdaten einmalig einzulesen und spter anzupassen. 2 Bei der gleichzeitigen Bearbeitung von Kurslisten durch mehrere Nutzer konnte es zu Datenverlusten kommen. Auch dieser Fehler wurde bereits sehr frh bei einem Probelauf mit Untersttzung von mehreren Tutoren entdeckt, bevor er Schden an echten Daten verursachen konnte.
1.3 Problemstellung
Im Folgenden beschreiben wir detailliert das Problem, welches wir bearbeitet haben. Auf einige der nummerierten Punkte wird spter verwiesen, um gesondert auf ihre Umsetzung einzugehen.
1.3.1 Datenbanksystem
Die fr die Zeugnisse des Beruflichen Gymnasiums der Werner-vonSiemens-Schule erforderlichen Daten, also Noten und Fehlstunden, sollen in einer Datenbank zur spteren Weiterverarbeitung erfasst werden. 1 Die Lehrer der Schule sollen verwaltet werden und die Mglichkeit haben, sich mit einem Krzel und einem Passwort am System anzumelden. 2 Zu jedem Lehrer sollen Anrede, Titel, Vorname, Name und Krzel gespeichert werden. Ferner soll gespeichert werden, ob es sich um einen Administrator handelt. 3 Zur einfacheren Handhabung sollen Kursvorlagen verwaltet werden, aus denen Kurse abgeleitet werden knnen. 4 Zu jeder Kursvorlage soll das Fach, das Thema, die Art des Kurses (Grundkurs / Leistungskurs), die Anzahl der Wochenstunden sowie eine Sortierreihenfolge und die Ausgabezeile auf dem Zeugnis gespeichert werden. 5 Es sollen Schler und Kurse verwaltet werden, wobei ein Schler an mehreren Kursen teilnehmen kann, und ein Kurs mehrere teilnehmende Schler haben kann. Zu jeder Kursteilnahme soll eine Zeugnisnote, die Anzahl der Fehlstunden sowie die Anzahl der unentschuldigten Fehlstunden verwaltet werden. Zu jedem Kurs sollen die gleichen Daten wie zu einer Kursvorlage gespeichert werden, da diese zur Archivierung kopiert werden.
Auerdem soll zu jedem Kurs gespeichert werden, aus welcher Kursvorlage er erstellt wurde. 9 Des Weiteren sollen die Kursleiter (Lehrer) verwaltet werden, wobei ein Lehrer mehrere Kurse leiten kann, aber auch ein Kurs mehrere Kursleiter haben kann. 10 Die Schler, Kurse und Zuordnungen sollen fr jede Jahrgangsstufe in einem jeden Schulhalbjahr in einem unabhngigen Datenbestand (Datei) verwaltet werden, um die Daten leichter archivieren zu knnen. 11 Jeder Datei werden durch den Administrator ein oder mehrere Lehrer zugeordnet, die fr die Verwaltung dieser Datei zustndig sind (Tutor). Ein Lehrer kann Tutor fr mehrere Dateien sein.
1.3.2 Weiterverarbeitung
12 Die eingegebenen Daten sollen von den Tutoren zur weiteren Verwendung exportiert werden knnen. 13 Hierbei soll eine Auswahl der Daten nach Tutorengruppe mglich sein. 14 Die Daten sollen allgemeine Angaben zum Schler, die Liste seiner belegten Kurse, die Lehrer, Themen und Noten in diesen Kursen sowie die Summe der entschuldigten und Gesamtfehlstunden enthalten. 15 Die Daten sollen zur Ausgabe eines Zeugnisses geeignet sein, beispielsweise mit der Seriendruck-Funktion von Microsoft Word.
1.3.4 Sicherheit
Aufgrund der sensiblen Daten, die mit dieser Software verwaltet werden, soll besonderer Wert auf Datenschutz und Sicherheit gelegt werden. 19 Jeder Benutzer muss mit Benutzername und Passwort authentifiziert werden.
20 Nur autorisierte Benutzer (Lehrer) sollen Zugang zu den Daten erhalten. 21 Lehrer sollen nur Zugang zu Daten ihrer eigenen Kurse erhalten. 22 Tutoren sollen Zugang zu Daten einer Tutorengruppe bzw. einer Jahrgangsstufe erhalten. 23 Die Verbindung zur Software ber das Netzwerk soll mit einer gesicherten Verbindung erfolgen, um das Aussphen von Zugngen oder Daten zu verhindern. 24 Die Software sollte nach Mglichkeit nicht anfllig fr gngige Angriffsmethoden3 sein.
1.4 Client-Server-Prinzip
Um die Anforderungen 16 und 17 zu erfllen und dabei sicherzustellen, dass die Daten stets berall in der aktuellsten Version vorliegen, ist die Implementierung als Client-Server-Architektur auf Basis des HTTP-Protokolls naheliegend. Wir haben uns also dazu entschieden, die Software als serverseitige PHP-Anwendung zu entwickeln, die ihre Dienste ber einen Apache-Webserver und das von diesem implementierte HTTP-Protokoll einem Web-Browser zur Verfgung stellt. Dies hat den groen Vorteil, dass auf den ClientSystemen auer einem (standardmig vorhandenen) Web-Browser keine weitere Software installiert und aktuell gehalten werden muss. Auerdem kann so Anforderung 23 leicht erfllt werden, indem HTTPS aktiviert wird.
Hierbei wurde besonders der Schutz vor SQL-Injection sowie vor Variableninjizierung mittels register_globals beachtet. 4 Quellen und weitere Informationen zu PHP: http://www.php.net http://de.wikipedia.org/wiki/PHP
Standardbibliothek. Letzteres kann jedoch durch Entwicklung von objektorientierten Wrapperklassen fr wichtige Bereiche wie den Datenbankzugriff behoben werden. Dies haben wir in unserem selbst entwickelten Framework, welches im nchsten Kapitel beschrieben wird, umgesetzt. Die verhltnismig geringe Ausfhrungsgeschwindigkeit von PHPSkripten stellt in dieser Anwendung dagegen kein Problem dar, da die Anzahl der Aufrufe, verglichen mit anderen Anwendungsfllen, extrem gering ist. Zur Datenhaltung nutzen wir das relationale Datenbankverwaltungssystem MySQL5, welches ebenfalls zu den am weitesten verbreiteten zhlt. Es ist wie PHP als freie Open-SourceSoftware verfgbar. Clientseitig werden, wie es bei Webanwendungen zwangslufig der Fall ist, HTML, CSS und JavaScript eingesetzt. Bei HTML (kurz fr Hypertext Markup Language) handelt es sich um eine Auszeichnungssprache zur Strukturierung von Inhalten6. Cascading Style Sheets (CSS) sind die dazu gehrige Sprache fr Formatvorlagen, die ntig ist, um die Ausgabe zu gestalten. JavaScript wird in unserer Anwendung nur vereinzelt genutzt, hauptschlich um Eingabeberprfungen und hnliche Aufgaben bereits clientseitig vornehmen zu knnen und somit durch schnellere Rckmeldungen die Benutzerfreundlichkeit zu erhhen. Wir verwenden zur besseren Browserkompatibilitt und zur Erleichterung der Entwicklung die JavaScript-Bibliothek jQuery7.
5 6
8 9
2 MVC-Framework
2.1 Code-Architektur
Das Projekt ist nach dem in der Softwareentwicklung seit ber 30 Jahren verbreiteten Model-View-Controller-Konzept17 strukturiert. Dieses Konzept erleichtert die sptere Erweiterung der Software sowie die Anpassung an genderte Anforderungen. Es hat sich whrend der Entwicklung der Anwendung bereits bewhrt, da Wnsche und Feedback der Nutzer sowohl whrend als auch nach der Entwicklung schnell umgesetzt werden konnten.
Daten in den Modellen ndern. Auerdem entscheidet der Controller anhand verschiedener Bedingungen (z.B. Rechte des Benutzers), ob die mglichen Benutzeraktionen in der Prsentation eingeschrnkt werden mssen. Die Aufgabe des View (dt. Prsentation) ist die Darstellung der Daten aus den Modellen. Es ermglicht dem Benutzer, die Daten einzusehen und sie ber entsprechende Steuerelemente zu manipulieren. Ein View kann aus mehreren Unter-Views in Form einer Baumstruktur zusammengesetzt sein. Es entspricht damit dem composite pattern.
2.3 MVC_Framework
Als Grundlage zur Umsetzung dieses Projektes haben wir ein PHPFramework nach diesem Konzept entwickelt. Es trgt den internen Namen MVC_Framework. Wir haben uns bewusst zur Entwicklung eines eigenen Frameworks entschieden, einerseits aufgrund des damit einhergehenden Lerneffekts und dem besseren Verstndnis als bei der Nutzung eines vorgefertigten Frameworks, andererseits um die Anwendung mglichst einfach zu halten und nur die Funktionen zu integrieren, die tatschlich bentigt werden.
2.3.1 Ordnerstruktur
Durch unser Framework ist eine bestimmte Ordnerstruktur fr die Anwendung vorgegeben, in die die einzelnen Code-Dateien entsprechend ihrer Aufgabe eingeordnet werden. Im folgenden wird kurz beschrieben, welche Dateien und Ordner es gibt, und welchen Zweck diese haben. Zu einigen gibt es weiter unten einen gesonderten Abschnitt, der genauere Informationen enthlt. 2.3.1.1 /index.php Diese Datei stellt den zentralen Einsprungspunkt des Frameworks dar. Alle Aufrufe der Anwendung landen zunchst in der index.php. Sie ist dafr zustndig, alle bentigten Grundmodule sowie die Konfiguration zu laden und schlielich das Routing-Modul anzustoen. 2.3.1.2 /.htconfig.php und /install.php In der /.htconfig.php wird ein assoziatives Array mit dem Namen $SITE_CONFIG definiert, welches anwendungsglobale Konfigurationseinstellungen enthlt. Sie sollte normalerweise nicht manuell bearbeitet werden, sondern nur mittels des unter /install.php erreichbaren Installationsassistenten.
2.3.1.3 /create_tables.sql Dieses SQL-Skript enthlt die ntigen Befehle, um die Datenbankstruktur fr die Anwendung zu erzeugen. 2.3.1.4 /.htaccess Die Konfigurationsdatei fr den Apache-Webserver stellt ein, dass alle Aufrufe auf die oben beschriebene /index.php umgeleitet werden und macht diese damit zum globalen Einsprungspunkt des Frameworks. Davon wird nur die /install.php und der Ordner /content/ ausgenommen. 2.3.1.5 /system/ Der Systemordner enthlt die Hauptbestandteile des Frameworks sowie einige Hilfsfunktionen und wird in einem eigenen Kapitel beschrieben. Normalerweise sind hier bei der Entwicklung einer Anwendung auf Basis des Frameworks keine nderungen erforderlich. 2.3.1.6 /model/ Hier werden die Modelle als PHP-Dateien abgelegt, die die jeweilige Modellklasse enthalten. Modelle werden mit dem Aufruf load_model(beispiel); geladen. 2.3.1.7 /controller/ Dieses Verzeichnis enthlt die Controllerklassen (Steuerung), die in eigenen PHP-Dateien abgelegt sind. Eine beispiel.php enthielte also die Klasse BeispielController. Die Klassen erben immer (egal ob direkt oder indirekt) von Controller. Die Methoden der Controller sind direkt zugeordnet zu den HTTP-Zugriffspfaden. Diese Zuordnung wird im Abschnitt Routing der HTTP-Anfragen genauer erlutert. 2.3.1.8 /controller/controller.php Diese Datei enthlt die abstrakte Basisklasse Controller, von der alle Controller direkt oder indirekt abzuleiten sind. Es kann sinnvoll sein, hier Attribute und Methoden zu definieren, sowie Modelle zu laden, die in allen Controllern bentigt werden (z.B. zur Sitzungs-, Rechte- und Benutzerverwaltung). Hinweis: Es ist aufgrund dieser Benennung weder mglich noch sinnvoll, einen ControllerController zu erstellen.
Erw.
Beschreibung Name der Datenbank Saltwert zur Sicherung des PasswortHashs Wenn nicht gesetzt, wird bei jedem Aufruf automatisch der Installationsassistent gestartet. Wird nach dessen Abschluss automatisch auf true gesetzt. Prfix zur Generierung interner Links (z.B. http://notendb.example.org/ oder /notendb2/) Muss mit / enden.
URL_PREFIX
(autom. gen.)
LOGIN_ROOTPASW
Passwort fr den SuperadministratorZugang root. Erforderlich, um den Installationsassistent ggf. erneut zu ffnen. Angezeigter Name der Anwendung. Erscheint in der Kopfzeile und im Browsertitel (<title>-Tag) Hintergrundfarbe der Kopfzeile der Anwendung URL zu einem Bild, welches auf der Begrungsseite nach Einloggen erscheint (z.B. Schullogo)
HEADER_SITE_TITLE
NotenVerwaltung #202020
HEADER_BG_COLOR HEADER_WELCOME_IMAGE
x x
Teile) zerlegt zurckgibt. Die Pfadkomponenten bestimmen den zu ladenden Controller und die darin aufzurufende Methode. Das Routing erfolgt unabhngig von Sitzungszustand und HTTPMethode. Diese Umstnde werden im Controller selbst bercksichtigt.
2.3.6 Routing-Beispiele
Aufruf
GET / GET /admin/dashboard POST /kurs/edit/25 GET /example
Controller-Klasse
DefaultController AdminController KursController
Methodenaufruf
index() dashboard() edit(25) index()
controller/example.php ExampleController
18
http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29
seiner Kurse eingeben oder ndern zu drfen. Ein Lehrer kann mehrere Kurse besitzen, ein Kurs kann durch mehrere Lehrer geleitet werden knnen. 5. Kurse mssen einem Jahrgang/Halbjahr zugeordnet sein 6. Ein Jahrgang/Halbjahr muss Tutoren enthalten Die Tutoren der Jahrgnge sind den entsprechenden Jahrgngen zuzuordnen. Diese Zuordnung ist unabhngig von den Kursen, die sie im Jahrgang unterrichten. Auerdem wurden Lehrer- und Schlerdaten aus der Lehrer- und Schlerdatenbank19 (LUSD) des Hessischen Kultusministeriums in den Datenbestand importiert. Diese schon vorhandenen Datenstze konnten somit in der Datenbank integriert und ohne manuelle Bearbeitung oder Eingabe weiterverwendet werden. Aus den oben genannten Kriterien ergibt sich das folgende ERM, welches als grundlegende Datenbankstruktur des Notensystems anzusehen ist:
Die Kombination Jahrgang/Halbjahr/Klassenstufe ist eindeutig und wird deshalb in der Datenbank unter dem Begriff Datei gefhrt.
19
http://www.lusdportal.hessen.de
3.1.2 Umsetzung
Die Umsetzung des ERMs in ein relationales Datenbankmodell wurde mit einigen Einschrnkungen in der dritten Normalform durchgefhrt. Eine Ausnahme bilden hier die Schlerdaten, welche fr jede Datei neu gespeichert werden. Dies ist notwendig, um Zeugnisse reproduzierbar in der Datenbank zu halten. Bei einer nderung der Schlerdaten drfen diese nicht ltere Zeugnisse betreffen und werden deshalb fr jede Datei, und damit mit jedem Halbjahr, erneut angelegt. 3.1.2.1 Bezeichnungen Die Verbindungstabellen zur Auflsung der n:m-Beziehungen der Lehrer-Kurs und Schler-Kurs-Tabellen wurden nach dem Muster rel_tabelle1_tabelle2 angelegt. Da die Bezeichnung Tutor die Verbindung Lehrer-Datei in der Realitt bezeichnet, wurde von dem vorherigen Muster abgewichen und die Tabelle mit der Bezeichnung Tutor angelegt. Tabellenattribute, welche eindeutige IDs enthalten wurden nach folgendem Schema benannt: Der erste Buchstabe das Tabellennamens (als Kleinbuchstabe)+id wurden kombiniert. Beispiel: Der Primary Key der Tabelle datei wurde aus dem Anfangsbuchstaben d und id zu did zusammengefhrt. Bei Namenskonflikten (welcher in der Datenbank bei den Tabellen kurs und kurs_template vorlag) wurde der zweite Buchstabe oder der erste Buchstabe des zweiten Wortes mit einbezogen: kurs wurde zu kuid kurs_template wurde zu ktid Bei Verbindungstabellen wurde die ID immer mit rid (r fr Relation) benannt, um eine Verwechslung mit anderen IDs zu vermeiden. Bei Foreign-Keys (im folgenden FK) in relationen Tabellen wurde ein r_ der Tabellen ID vorangestellt um das Attribut als Foreign-Key zu kennzeichnen: Beispiel: Die Tabelle rel_lehrer_kurs enthlt somit zwei Foreign-Keys auf die Tabellen lehrer und kurs mit folgender Bezeichnung: FK auf lehrer : r_ + foreign id wird zu r_lid FK auf kurs : r_ + foreign id wird zu r_kuid
3.1.2.2 Umsetzung der Tabellen In der Umsetzung des ERM-Diagramms wurden die Anforderungen in den folgenden Tabellen aufgelst: datei Die Verbindung Jahrgang/Halbjahr/Klassenstufe ist das grundlegende Element der Tabellenstruktur. Diese Tabelle verbindet Tutoren, Schler und Kurse und gruppiert sie somit in der Datenbank zu logischen Zusammenschlssen. kurs Ein Kurs stellt die fr das Zeugnis und den Zeugnisdruck geforderten Kursdaten in der Datenbank dar. Diese Daten werden im Zeugnisdruck bercksichtigt und knnen pro Kurs gesetzt werden. Die Verbindung der Schler und Lehrer erfolgt ber die Tabellen rel_lehrer_kurs und rel_schueler_kurs mittels der Kurs ID (Attribut: kuid) als Foreign Key. schueler Diese Tabelle beinhaltet die Daten der Schler welche fr den spteren Zeugnisdruck bentigt werden. Jeder Schler ist ber die ID sid eindeutig in einem Datensatz identifizierbar. Um nachtrgliche Zeugnisdrucke zu ermglichen werden die Schlerdaten in jeder Datei neu erstellt und dieser ber den Foreign Key did zugeordnet. lehrer Diese Tabelle Lehrer beinhaltet die Logindaten der Notendatenbank sowie die fr den Zeugnisdruck relevanten Lehrerdaten. Die Verknpfung zu Kursen, welche die erforderlichen Rechte zum Eintragen der Kurse und der Notenvergabe ergeben, sowie die Zuordnung der Tutoren der Dateien werden ber die Tabellen rel_lehrer_kurs und tutor erstellt. Das zustzliche Feld is_admin speichert die Zugriffberechtigung auf den Adminbereich. Es sollte ausschlielich fr Administratorzugnge gesetzt werden, da damit weitreichende Rechte in der Notenverwaltung freigegeben werden. kurs_template Die Daten der Kursvorlagen werden in dieser Tabelle gespeichert. Sie geben die zum Zeugnisdruck erforderlichen Kursdaten und Zeilennummern sowie die Anzeigereihenfolge in der Notendatenbank an. Die Daten einer Kursvorlage wirken sich nicht auf schon bestehende Kurse aus, sondern dienen lediglich als Vorlagen zum Erstellen neuer Kurse.
Tutor Diese Tabelle beinhaltet alle Lehrer einer Datei, welche Tutorenrechte bei Dateien erhalten. Das Attribut is_tutor ist fr zuknftige Verwendung reserviert und wird derzeit nicht benutzt. Es knnte fr Datenbanken mit Lehrern verschiedener Schulformen verwendet werden, um diese in der Auswahlliste zu trennen. rel_lehrer_kurs Durch die Beziehung Lehrer-Kurs werden die Rechte zur Notenvergabe einzelner Kurse gesetzt. rel_schueler_kurs Diese Tabelle enthlt die Zuordnungen der einzelnen Schler zu ihren jeweiligen Kursen. In der Zuordnung werden zustzlich die Noten, Fehlstunden und unentschuldigten Fehlstunden gespeichert. Erfllte Anforderungen XXX
verschiedenen Controllern zur Steuerung der Schreibrechte verwendet wird. Des Weiteren knnen Kurse nun eingereicht werden. Dies wird in der Datenbank durch das Attribut eingereicht in der Tabelle kurs realisiert, welches die Bearbeitung fr Kurslehrer sperrt, so dass die Noten nach dem Einreichen nicht mehr verndert werden knnen.
4 Back-End
Unter dem Begriff Back-End bezeichnet man in der Informatik den Teil einer Anwendung, welcher anfallende Daten verwaltet und mit Systemschnittstellen interagiert20. Das Back-End unserer Anwendung wurde in PHP und MySQL realisiert und bildet den Model- und Teile des Controller-Teils des MVC-Modells ab. Die zu erfllenden Aufgaben sind die Verwaltung und Speicherung der anfallenden Schler, Lehrer und Kurs-Daten, sowie das Strukturieren der Ein- und Ausgabe dieser, welches im Folgenden ber Model-Objekte realisiert wurde.
4.1 Modelle
Modelle haben im MVC-Konzept die Aufgabe der Verbindung von Anwendung und Datenbestand. Zustzlich knnen Modelle Funktionen zur Vereinheitlichung verschiedener Ein- oder Ausgabedaten enthalten und Datenbankabfragen ausfhren. In unserem Notensystem wurde die Aufteilung der Modelle an die Datenbankstruktur angepasst, so dass jedes Model eine Tabelle der Datenbank reprsentiert. Der Datenbankzugriff der Modelle wird im Code von der Klasse DatabaseModel implementiert, welche als Parentklasse von jedem datenbankbezogenen Modell dient. Zur Bereitstellung eines gesicherten Bereichs im Projekt wurde zustzlich das Modell session bentigt, sowie das Model lehrer mit Funktionen zur Passwortabfrage versehen. Zur Zeugnisausgabe aus dem Datenbestand wurde zuletzt das Model xmlexport erstellt, welches Zeugnisse ber das LaTeX-Format 21 als PDF erstellt.
http://de.wikipedia.org/wiki/Front-End_und_Back-End http://www.latex-project.org/
Funktionen load_model und require_model der Datei /system/models.php angefordert, welche das Laden und Erstellen der Modelinstanzen verwaltet. Die Benennung der Klasse muss dem Dateinamen (ohne Dateiendung .php) mit dem Suffix Model entsprechen, damit sie vom MVC-Framework erkannt wird. Als Beispiel wird das Model schueler folgendermaen abgespeichert: Dateipfad: /model/schueler.php Klassenname: SchuelerModel Weiterhin wurden Datenbankzugriffe ber die Modelle DatabaseModel und DatabaseRelModel vereinheitlicht. Beide Klassen erlauben die einheitliche Nutzung der Datenbank in der gesamten Anwendung. Das zuletzt genannte DatabaseRelModel, welches eine abgeleitete Klasse von DatabaseModel ist, ermglicht hierbei den Zugriff auf Verbindungstabellen mit 2 Foreign Keys, welche mittels der Klassenattribute idLCol und idRCol angegeben werden knnen.
http://php.net/manual/de/security.database.sql-injection.php
Abfrage (Funktion: getall) zur Verfgung. Die Funktionen doQuery und execute dienen zum Senden von schreibenden SQL-Komandos an die Datenbank (INSERT, UPDATE, DELETE). Um eine mgliche SQL-Injektion zu vermeiden sollten stets die von der Klasse bereitgestellten Funktionen verwendet werden, welche den oben genannten Angriff verhindern. Hierbei ist zu beachten, dass alle Funktionen des Modells Parameter zur als SQL-Query verarbeiten. Alle folgenden Parameter werden mittels vsprintf23 in den SQL-Querystring geschrieben und stehen somit, unabhngig vom bergebenen Variablentyp, im gewnschten Format in der Zeichenkette. databaseRel -> database Diese Klasse erlaubt Zugriff auf Tabellen welche n:mBeziehungen auflsen, d.h. Foreign Keys zu zwei Tabellen enthalten. Die Variablen $idLCol und $idRCol mssen in abgeleiteten Klassen mit den Namen der Foreign-Keys beschrieben werden. In den abgeleiteten Klassen knnen so, Datenbank Eintrge der jeweiligen Tabelle bearbeitet und selektiert werden, ohne die internen Bezeichner der Tabellen Attribute zu kennen. Je nach Anordnung der Spaltennamen in den Variablen $idLCol und $idRCol werden diese in der Klasse als Left- und Right-Column gefhrt. Alle Befehle knnen somit links- oder rechtsseitig (bezogen auf die Zuordnung der Spaltennamen zu den Variablen) auf die Tabelle angewandt werden. Somit erweitert diese Klasse das Model Database um Funktionen zur Selektion bestimmter IDs durch die Funktionen getByRel, getAllByLId und getAllByRId, sowie das Setzen und Lschen einzelner LeftRight-Column-ID Kombinationen durch die Funktionen addByRel, deleteByRel und setByRel. Funktionen ohne Spaltenangabe im Namen bentigen zur korrekten Ausfhrung beide Spalten-IDs als Parameter. datei -> database Das Model erweitert die Parentklasse um die Funktionen k_set_editlock, k_clear_editlocks_by_lid und k_clear_all_editlocks welche zum bearbeiten der Editlocks welche von Controllern zum Sperren oder Entsperren verschiedener Kurse genutzt werden. Zustzlich wurde die Funktion get_ordered_list implementiert,
23
http://php.net/manual/de/function.vsprintf.php
welche eine fr die Anzeige sortierte Liste aller Kurse der Datei zurckgibt. kurs -> database Die Klasse reprsentiert die Tabelle kurs des DatenbankERMs. Die Implementation unterscheidet sich von der Parentklasse durch vorgefertige Abfragen, welche von Controllern hufig genutzt werden, um bestimmte Datenrelationen aus der Datenbank zu filtern. Zustzlich wurden die Funktionen set, get_all und get_by_id berschrieben um eine zustzliche Sortierung der QueryDaten zu implementieren. Nachtrglich wurde auerdem die Funktion delete abgendert, da diese einen Fehler in der Fehlstundenberechnung hervorrief (siehe Anhang). kurs_template -> database (keine zustzlichen Funktionen) lehrer -> database Dieses Model leitet sich von dem DatabaseModel ab und gibt eine Reprsentation der Tabelle lehrer wieder. Zustzlich enthlt sie Methoden um das Passwort eines Lehrers zu prfen und die entsprechenden Rechte, bei erfolgreichen Login, auszugeben sowie eine Methode zum Setzen von Passwrtern. rel_lehrer_kurs -> databaseRel (keine zustzlichen Funktionen) rel_schueler_kurs -> databaseRel (keine zustzlichen Funktionen) schueler -> database Diese Klasse reprsentiert die Tabelle Schler des ERMs. Die zustzliche Funktion get_noten_uebersicht erzeugt eine Liste aller Noten eines Schlers in der Datenbank. session -> model Das Session Model verwaltet die Rechte und Loginberechtigungen einzelner Sessions24. Die Methoden isRoot, isAdmin und isTutor geben eine Boolean Value zurck, welche von Controllern zur Rechteverwaltung in der GUI genutzt werden. Zustzlich knnen weitere Attribute des eingeloggten Users ber die Funktion getUser ausgelesen werden. tutor -> database (keine zustzlichen Funktionen) xmlexport -> database
24
http://php.net/manual/de/ref.session.php
Dieses Model wird intern zur Erstellung der Zeugnisse mittels LaTeX25 und PDFLaTeX26 bentigt. Die Funktion pdflatex erzeugt durch die Verwendung oben genannter Programme eine Zeugnisdatei im PDF-Format (siehe Anhang). Die Implementation der Funktion export_datei ist zum Exportieren der Schlerdaten zu einer mglichen OfflineBearbeitung vorgesehen und wird derzeit nicht genutzt.
4.2 Sessionverwaltung
Die Sessionverwaltung erlaubt die Authentifizierung eines Benutzer in der Anwendung. Anforderung 19 sowie Anforderung 20 fordern eine gesicherte Nutzung der Datenbank. Hierzu wurde eine Authentifizierung der Nutzer implementiert, welche die Nutzeraccounts schtzt.
angehngt wird, um allgemeine Rainbow-Tables unwirksam zu machen. Weiterhin wird der Username im Hash verarbeitet um die Hashkombinationen fr jeden User zu variieren und somit eine allgemeine Rainbow-Table fr den gesamten Datenbestand unwirksam zu machen.
Hier hat der Benutzer sofort Zugriff auf alle wichtigen Menpunkte: 1 Benutzermen und Administrationsmen 2 Hauptmen Kursliste Zuordnung von Schlern zu Kursen Tabelle zur Notenvergabe Schlerliste Zeugnisdruck 3 Schnellauswahl fr Datei 4 Onlinehilfe 5 Detaillierte Liste aller aktuellen Dateien
Am Beispiel dieses Willkommensbildschirms wird bereits das Zusammenspiel von Controllern und Views deutlich. Der Apache-Webserver ruft aufgrund der Angaben in der .htaccess das Einsprungsskript index.php auf. Dieses bindet einige bentigte Dateien mit dem require_onceBefehl ein, um danach die Kontrolle an die Funktion load_controller (system/routing.php) zu bergeben. Diese verarbeitet, wie im Abschnitt Routing der HTTP-Anfragen beschrieben, die Anfrage des Browsers, und ldt dann einen geeigneten Controller. Im Fall des Willkommensbildschirms ist das der DefaultController in controller/default.php, der von load_controller instanziiert wird. Dieser ist abgeleitet von Controller und ruft in seinem Konstruktor zunchst mit parent::__construct() den Konstruktor seiner Elternklasse auf. Darin wird, wie unten im Abschnitt controller.php beschrieben, die Anwendung initialisiert. Der Konstruktor des DefaultController stellt anschlieend mit require_login sicher, dass ein Benutzer eingeloggt ist, und ldt weitere bentigte Modelle. Auerdem initialisiert er die View-Variable $Dateien, die spter die Datei-Schnellauswahl (3) befllt. Danach wird die entsprechende Controller-Methode aufgerufen, hier index(). Diese lsst sich vom DateiModel die Liste aller Dateien geben, die daraufhin noch mit der ber SessionModel.isTutor abgefragten Information, ob der eingeloggte Nutzer Tutor dieser Datei ist, angereichert und an das View welcome.php bergeben wird. Der von diesem View generierte HTML-Code wird in der Layout-ViewVariablen Inhalt abgelegt. Schlielich wird die Methode Controller.display_layout aufgerufen, die durch das View default_layout.php die engltige Ausgabe erzeugen lsst und diese an den Web-Browser sendet.
In Kurzform: index.php require_once(...); //Systemdateien laden load_controller(); split_url(...); new DefaultController(); DefaultController.__construct Controller.__construct load_model(...); load_model(...); require_login(); $controller->index(); DateiModel.get_all(...); for each: SessionModel.isTutor($datei); $Inhalt = get_view(welcome); Controller.display_layout();
5.2 Controller
Die Controller stellen im MVC-Konzept das Bindeglied zwischen Modellen, Ansichten (Views) und dem Benutzer (genau genommen dem User-Agent, also dem Webbrowser) dar.
5.2.1 controller.php
Die Basisklasse Controller enthlt Methoden, die zur Verwendung in allen Controllern relevant sind. Hier sind etwa die Methoden require_login und require_datei abgelegt, die in den Konstruktoren der Controller aufgerufen werden, die zur korrekten Funktion einen eingeloggten Benutzer bzw. eine ausgewhlte Datei erfordern. Der Konstruktor der Basisklasse enthlt Code zur Initialisierung der Anwendung. Es werden global bentigte Modelle geladen sowie globale View-Variablen zugewiesen. Auerdem hier die Funktion load_menu aufgerufen, die das Hauptmen initialisiert. Die Methode display_layout und das Feld $template_vars dienen zum Aufruf des Standardlayouts nach Abarbeitung der Methode eines abgeleiteten Controllers.
Dieser Controller enthlt Formulare und Aktionen fr administrative Aufgaben. Er ist nur fr Benutzer zugnglich, die als Administratoren eingetragen sind (Feld is_admin), sowie fr den SuperAdministrator root. Es erscheint zunchst eine bersichtsseite, die den Zugriff auf die verschiedenen Funktionen gewhrt. Weitere Informationen finden Sie im Abschnitt Leitfaden zur Administration. 5.2.2.2 default.php Der DefaultController wird aufgerufen, wenn ein Benutzer auf das Stammverzeichnis zugreift. Daher ist er zustndig fr die Ausgabe der Willkommensseite. 5.2.2.3 kurstemplate.php
Erreichbar ber den Menpunkt Kursvorlagen im Benutzer- und Administrationsmen
Der KurstemplateController wurde nachtrglich eingefhrt, um die hinzugefgte Anforderung 3 zu erfllen. Es ermglicht, Kursvorlagen zu erstellen, zu bearbeiten, zu lschen und eine Liste aller Kursvorlagen zu betrachten. 5.2.2.4 public.php
(reserviert fr sptere Verwendung)
5.2.2.5 statistics.php
(reserviert fr sptere Verwendung)
5.2.2.6 user.php
Erreichbar ber die Menpunkte Passwort ndern und Ausloggen im Benutzerund Administrationsmen
UserController ermglicht einem eingeloggten Nutzer, sein Passwort zu ndern sowie sich auszuloggen. Nicht eingeloggte Besucher werden bei allen Aufrufen mittels der Methode Controller.require_login zwangslufig auf UserController.login umgeleitet.
5.2.2.7 kurs.php
Erreichbar ber den Menpunkt 1. Liste der Kurse im Hauptmen
Der KursController stellt Methoden zur Verfgung, um die Liste der Kurse einer Datei abzurufen, Kurse aus Vorlagen zu erstellen, die betreuenden Lehrer des Kurses festzulegen, Kurse zu bearbeiten und zu lschen. 5.2.2.8 offline.php
(derzeit auer Betrieb) War erreichbar ber einen zustzlichen Punkt im Hauptmen Offline
Es war geplant, eine Offlineversion der Notenverwaltung zu erstellen. Die offline.php enthlt Methoden, um Kurse oder ganze Dateien fr die Offlineversion zu exportieren und um Daten aus der Offlineversion (eingegebene Noten) wieder zu importieren. 5.2.2.9 schueler.php
Erreichbar ber den Menpunkt Schlerliste im Hauptmen
Dieser Controller stellt eine Liste aller Schler in einer Datei dar und bietet Methoden an, um einzelne Schler einzufgen, um Schler gesammelt zu importieren sowie um einzelne Schler zu bearbeiten, zu lschen und Notenbersichten einzelner Schler zu generieren. Die Importfunktion akzeptiert Daten in folgendem Format, welches das Exportformat des an der Schule eingesetzten OpenSchoolServer28 nachbildet: Die erste Zeile enthlt den Spaltenkopf und wird ignoriert, alle weiteren Zeilen enthalten durch Doppelpunkte (:) getrennt die eigentlichen Daten. Username:Nachname:Vorname:Geburtsdatum:Klasse 5.2.2.10 tabelle.php
Erreichbar ber die Menpunkte 2. Zuordnung, 3. Notenvergabe und Zeugnisdruck im Hauptmen
Dieser Controller ist fr die Ausgabe und das Bearbeiten der verschiedenen Kreuztabellen zustndig, die in der Anwendung dargestellt werden. Dies sind die Tabelle zur Anzeige der Schler-Kurs-Zuordnung, die Tabelle zur Zuordnung von Schlern zu einem Kurs sowie die Tabelle zur Anzeige der Noten und die Tabelle zur Notenvergabe.
28
http://www.openschoolserver.net/
Auerdem beinhaltet dieser Controller die Methoden zur Auswahl der zu exportierenden Daten und zum Export als Microsoft-ExcelArbeitsblatt, als CSV oder PDF-Datei.
5.3 Benutzeroberflche
5.3.1 Benutzermen
Das Benutzermen enthlt Aktionen, die sich direkt auf den Zugang des aktuell eingeloggten Lehrers beziehen. Er kann darin sein Krzel sehen sowie sein eigenes Zugangspasswort ndern. Auerdem befindet sich hier der Menpunkt Abmelden, der aus Sicherheitsgrnden nach der Verwendung der Anwendung immer benutzt werden sollte, um die Sitzung zu beenden.
5.3.2 Administrationsmen
Der Menpunkt Administrationsbereich ist nur fr Benutzer mit Administrationsrechten sichtbar. Er ffnet die Seite bersicht fr Administratoren (kurz Admin-Dashboard). Diese Seite wird im Kapitel Leitfaden zur Administration nher beschrieben. Der Menpunkt Kursvorlagen ist nur fr die Tutoren einer Datei sichtbar. Sie knnen hier die Vorlagen ndern, die den Fachlehrern bei Eingabe ihres Kurses angeboten werden.
5.3.3 Hauptmen
Das Hauptmen enthlt Menpunkte, die sich auf die aktuell ausgewhlte Datei beziehen. Die Menpunkte sind in der Reihenfolge nummeriert, in der sie von einem Fachlehrer blicherweise verwendet werden.
5.3.5 Onlinehilfe
Der Link Onlinehilfe verweist auf die URL http://notendbhilfe.wikilab.de/anleitungen/, unter der verschiedene Anleitungen als PDF-Dateien zur Verfgung stehen. Die Anleitungen sind auch als Anlage B und C beigefgt.
Die Liste der Dateien auf der Startseite enthlt mehr Informationen, als die Schnellauswahl. Hier werden die Dateien hervorgehoben, fr die der eingeloggte Benutzer als Tutor eingetragen ist.
6 Praxis
In diesem Kapitel fassen wir einige Hinweise und Anleitungen zur Installation, Wartung, Verwendung und Weiterentwicklung unserer Software zusammen. Ausfhrlichere Schritt-fr-Schritt-Anleitungen und Handbcher sind dagegen im Anhang zu finden.
6.1 Systemvoraussetzungen
Clientseitig wird zur Noteneingabe nur ein Webbrowser (Firefox, Chrome, Safari) bentigt. Um Zeugnisse zu drucken ist zustzlich entweder Microsoft Office oder ein PDF-Betrachter (z.B. Adobe Reader) erforderlich. Serverseitig kommt ein Linux-System zum Einsatz, auf dem fr die Grundfunktionen ein LAMP-Stack (weit verbreitete WebserverEinrichtung bestehend aus Apache, MySQL und PHP) eingerichtet sein muss. Ein LAMP-Stack kann unter Ubuntu sehr einfach mit folgenden Befehlen eingerichtet werden: $ sudo apt-get install tasksel $ sudo tasksel install lamp-server Danach sind eventuell Anpassungen der Konfiguration ntig, die hier nicht beschrieben werden knnen. Hierzu sind jedoch ausfhrliche Anleitungen im Internet zu finden.29 Fr verschiedene Zusatzfunktionen sind folgende weitere Pakete ntig: Fr die Erstellung von Microsoft Excel- Arbeitsblttern muss das Java Runtime Environment installiert sein. Fr die Erstellung von PDF-Dateien muss die TeX-Distribution TeXLive muss installiert sein. Die Installation wird fr Ubuntu und OpenSUSE wie folgt durchgefhrt: Ubuntu: # apt-get install texlive OpenSUSE: # zypper install texlive texlive-latex
29
6.2 Installation
Wenn die oben angegebenen Systemanforderungen erfllt sind, ist die Installation in wenigen Schritten zu erledigen. 1 Kopieren Sie die Anwendung (Ordner notendb2) in ein Verzeichnis, welches ber den Webserver erreichbar ist (DocumentRoot). Wir empfehlen, die Anwendung direkt aus dem Git-Repository herunterzuladen, um die neueste Version zu erhalten. Diese ist mit folgendem Befehl mglich: $ git clone https://github.com/maxweller/notendb2.git 2 Rufen Sie das Hauptverzeichnis der Anwendung ber einen Webbrowser auf. Sie werden beim ersten Aufruf automatisch auf den Installationsassistenten weitergeleitet (./install.php).
Folgen Sie den Anweisungen des Installationsassistenten. Sie sollten insbesondere, falls noch nicht geschehen, eine eigene MySQL-Datenbank fr die Installation der notendb2 auf dem MySQL-Server einrichten. Nachdem ein Schritt erfolgreich abgeschlossen wurde, wird das graue Kreuz in der berschrift jeweils durch ein grnes Hkchen ersetzt. Wenn alle Schritte abgeschlossen sind, klicken Sie auf Konfiguration schreiben und Beenden.
Mit Klick auf Zur Startseite gelangen Sie dann zum Loginformular, in dem Sie sich mit dem Benutzernamen root und dem eben vergebenen Passwort erstmalig einloggen knnen.
Hinweis: Sie knnen die whrend der Installation angegebenen Parameter jederzeit verndern, indem Sie den Installationsassistenten erneut aufrufen. Hngen Sie dazu an die URL zum Hauptverzeichnis der Anwendung install.php an. Sie bentigen zum erneuten Starten das Passwort des Superadministrators root, welches Sie bei der Installation vergeben haben. Sollten Sie dieses Passwort nicht mehr wissen, knnen Sie in der Konfigurationsdatei .htconfig.php nachsehen. Es befindet sich in der Zeile, die mit $SITE_CONFIG[LOGIN_ROOTPASW] beginnt.
30
7 Ausblick
7.1 Fazit
Die gesetzten Ziele des Projekts wurden erreicht und getestet, so dass die Anwendung in der Praxis erfolgreich eingesetzt werden konnte. Die strukturelle sowie zeitliche Planung des Projekts wurde eingehalten und das Projekt zur Abgabe fertiggestellt. Durch die frhzeitige Einbeziehung der Anwender konnten Fehler und nderungen rechtzeitig erkannt und behoben werden. Probleme, welche das Projekt in der Entwicklung in der Umsetzung beeintrchtigen, traten nicht auf. Durch gute Absprache wrend der Entwicklung wurden alle Bereiche ohne Konflikte in der Codeumsetzung geschrieben und getestet.
Eine Funktion zur Einsichtnahme in die eigenen Noten fr Schler wre ebenfalls interessant. Mit einer Exportfunktion in einem geeigneten Datenaustauschformat wre auch die Anbindung an den Abi-Rechner, den Manuel Groh im Rahmen einer Besonderen Lernleistung erstellt hat, mglich. Somit wrde das mhsame und fehlertrchtige Abtippen aus den Zeugnissen entfallen.
8 Anlagen
Anlage A: Datenbankschema Anlage B: Anleitung zur Eingabe von Noten Anlage C: Anleitung zum Ausdruck von Zeugnissen Anlage D: Erklrung zur eigenstndigen Anfertigung Anlage E: Verzeichnisstruktur Anlage F: Vollstndiger Quellcode der Software Anlage G: Letzte nderungen Anlage H: Todo-Liste vom Treffen mit den Tutoren Anlage I: Bildquellen Anlage J: Zeugnisvorlage