MSP: HÜ Forum
Diese Wiki-Seite dient zur Dokumentation der Hausübung "Forum", die im Rahmen des Moduls "Methoden des Softwareentwicklungsprozesses (MSP)" an der Fachhochschule Gießen-Friedberg im Wintersemester 08/09 bearbeitet wird. Verantwortlich für die Hausübung sind Jochen Woidich und Christian Weber.
Inhaltsverzeichnis
Reverse Engineering
Dieser Abschnitt dient zur Dokumentation des durchgeführten Reverse-Engineerings.
Herkunft des Quellcodes
Große Teile des Quellcodes der Modulgruppe "Forum" stammen aus dem inzwischen aufgegebenen OpenSource-Projekt "ThWBoard" und wurden zur Integration in eStudy entsprechend angepasst. Das letzte Release von ThWBoard (Version 2.84) ist im Januar 2007 erschienen [1], die Quellen des Forums von eStudy sind in den Kommentaren auf Februar 2004 datiert und entstammen vermutlich aus der bereits im November 2003 erschienen Version 2.83. Der relativ kleine Versionsunterschied (.83 -> .84) lässt darauf schließen, dass in dem Zeitraum von 4 Jahren keine größeren Fehlerkorrekturen mehr am Mutterprojekt vorgenommen wurden und die Änderungen somit auch wenig relevant für den Fork in eStudy sind.
Datenbankschema

Tabelle | Verwendung |
---|---|
forum_avatar | Namen und URLs aller Avatare |
forum_ban | Von bestimmten Kurs-Foren verbannte Benutzer. |
forum_bannedwords | |
forum_registry | |
forum_registrygroup | |
forum_category | |
forum_lastvisited | Zeitpunkt des letzten Besuchs eines Boards durch einen bestimmten User |
forum_group | |
forum_groupboard | |
forum_subscribe | |
forum_thread | Alle Threads |
forum_post | Alle Posts |
forum_board | Alle Boards |
forum_user | Forum-spezifische Benutzerinfos und Flags |
Dokumentation
Mit Doxygen generierte Dokumentation der modulspezifischen Quelltexte.
Use Cases
Bei der Use Case Analyse wurden folgende Benutzer-Rollen betrachtet: Administrator, Dozent, Student und Gast. Für jede Benutzerrolle wurde ein eigenes Use Case Diagramm erstellt (zur besseren Übersicht).
Administrator
Dozent
Alle dargestellten Use Cases beschreiben die Möglichkeiten eines Dozenten innerhalb des Forum-Moduls in seinem eigenen Kurs.
Student und Gast
Die hier dargestellten Use Cases treffen sowohl für die Benutzerrolle Student als auch Gast zu. Das Diagramm zeigt sämtliche Use Cases bei maximaler Foren-Berechtigung. Die Berechtigungen werden vom Administrator oder Dozenten erteilt und können für beide Rollen separat eingestellt werden.
Klassendiagramme
Die folgenden Diagramme wurden mit Enterprise Architect erstellt und zeigen die speziell für das Modul "Forum" definierten Klassen.
Alle nicht modulspezifischen Abhänigkeiten, die außerhalb des Modul-Verzeichnisses liegen, wurden ebenfalls mit in die Diagramme aufgenommen.
Software-Metriken
Code-Coverage
Der aktuelle Code-Coverage-Index des Moduls liegt bei 63%. Diese Zahl beinhaltet bislang lediglich die Modulklassen. Zu Beginn waren keine Unittests vorhanden. Sämtliche Test wurden extra für die Software-Metriken erstellt.
C.R.A.P.-Index und Zyklomatische Komplexität
Bei der Durchsicht der restlichen Metriken fallen nur wenige Methoden mit recht hoher Zyklomanischer Komplexität (>=10) auf.
In allen Fällen ist ein hoher C.R.A.P-Index bei Methoden, die eine niedrige Zyklomatische Komplexität aufweisen, auf eine sehr geringe Code-Coverage der entsprechenden Methode zurückführen.
Folgende Methoden sind bei der Analyse der Metriken aufgrund ihrer Komplexität hervorgestochen:
Methode | Zyklomatische Komplexität | C.R.A.P-Index |
---|---|---|
ForumAutomation::updateUser | 27 | 756 |
ForumAutomation::deleteCourse | 16 | 272 |
ForumAutomation::newCourse | 13 | 182 |
Permission::has_permission | 10 | 110 |
upload::fileExtOK | 10 | 110 |
Performance-Tuning
Die Modulgruppe "Forum" wurde bereits von Frank Staudt im Rahmen seiner Diplom-Arbeit "Performance-Tuning und SLA-Monitoring LAMP-basierter Webapplikationen am Beispiel der Lernplattform eStudy" ausführlich auf Bottlenecks überprüft und dahingehend optimiert. Seine Funde und Ergebnisse sind in Kapitel 12.5 im verlinkten Dokument beschrieben.
Es konnten weder durch die Analyse der Ergebnisse von xdebug (visualisiert mit kcachegrind), noch durch das manuelle durchforsten der Quellen neue Bottlenecks aufgespürt werden. Auf Mikro-Optimierungen wurden verzichtet.
Bad Smells
Bei der Analyse der gesammelten Metriken und einer groben Durchsicht der Quelltexte sind folgende Bad Smells aufgefallen.
Smell | Klasse / Methode / Datei | Kommentar |
---|---|---|
Large Class | ForumAutomation | Große Klassen. Was ist "groß"? Aufgenommen: LOC > 400 |
Long Method | ForumAutomation::updateUser (74) ForumAutomation::deleteCourse (85) ForumAutomation::newCourse (75) |
Lange Methoden. Auch hier: Was ist "lang"? Aufgenommen: LOC > 50 |
Comments | In beinahe allen Klassen/Funktionen/Skripten | Überflüssige Kommentare die nicht beschreiben was passiert und nicht warum es passiert. |
Dead Code | In beinahe allen Klassen/Funktionen/Skripten | Toter (meist stumpf auskommentierter) Code |
Shotgun Surgery | In beihnahe allen alleinstehenden Skripten | Es wird massiv auf superglobale Arrays ($_GET, $_POST, besonders $_SESSION) zurückgegriffen. Sollten sich die zum Zugriff genutzten Schlüssel einmal ändern sind ebenso massive Änderungen am Code notwendig. |
Switch Statement | In vielen Klasse/Funktionen | switch-Statements |
Sonstiges:
- Großteil der Logik nicht in Klassen gekapselt, sondern in Funktionen (Datei: class.functions.inc.php) oder direkt in alleinstehenden Skripten.
- Grund: Die ursprünglichen Modul-Entwickler haben vorhandenen Code genutzt, der einfach nicht objektorientiert ist -> Nicht ohne großen Aufwand änderbar
- Keine saubere Trennung von Darstellung und Logik.
- HTML-Ausgabe direkt im Programmfluss.
- Texte fest einprogrammiert -> Nicht ohne großen Aufwand internationalisierbar.
- Darstellung nicht ohne weiteres anpassbar.
- Teileweise mehrere Klassen (zusammen mit Funktionen!) in einer Datei (Datei: class.functions.php, Klassen: Template, Permission, upload)
- Kein durchgängiger Stil
- Kommentare
- Einrückung
- Bezeichner
- ...
- Unvollständige Dokumentaion
Erweiterung und Refaktorisierung
Erweiterung
Im Rahmen der Veranstaltung soll das Forum um ein neues Feature ergänzt werden.
Problemstellung & Motivation
eStudy verfügt über eine konfigurierbare Sitzungs-Verwaltung, die inaktive Benutzer nach einer vorgegebenen Zeit automatisch abmeldet.
Obwohl dieser Mechanismus nötig und sinnvoll ist, hat er gewisse Tücken: Schreibt ein Benutzer lange Zeit an einem neuen Beitrag zum Forum ist es möglich, dass er dabei seine Sitzungsdauer überschreitet ohne es zu bemerken. Erst beim Abschicken des Beitrags stellt der Benutzer fest, dass er abgemeldet wurde. Seine Arbeit geht, wenn er sie nicht manuell gesichert hat, verloren.
Da solche Vorkommnisse äußerst ärgerlich sind, soll ein Feature entwickelt werden, dass den Benutzer entweder früh genug warnt, oder das Problem anders löst. Das automatisierte Aufrechterhalten der Sitzung ist jedoch keine mögliche Lösung.
Da es sich hierbei um ein generelles Problem handelt und nicht nur das Forum betrifft, sollte die zu implementierende Lösung möglichst allgemein gehalten werden, damit sie auch in anderen Module genutzt werden kann.
Variante 1 - "Timeoutcounter"
Die erste vorgeschlagene Lösung für das Problem ist ein kleines Fenster innerhalb der Seite, das sich öffnet, sobald ein Benutzer anfängt einen neuen Beitrag zu schreiben. Im diesem Fenster wird angezeigt, wie lange dem Benutzer noch bleibt, bis er automatisch abgemeldet wird.
Beim Öffnen des Fensters fragt ein JavaScript via AJAX den Server nach der vom Administrator eingestellten maximalen Dauer bis zur automatischen Abmeldung. Die so erhaltene Zeit in Minuten wird im Fenster angezeigt und anschließend entsprechend heruntergezählt. Dies geschieht völlig clientseitig.
Bleiben nur noch wenige Minuten könnte das Fenster die Zeit optisch hervorheben (z.B. durch eine markante Farbe, Blinken...), um den Benutzer deutlich zu warnen.
Diese Variante wurde vollständig umgesetzt.
Features
- Anzeige der verbleibenden Sitzungsdauer in Minuten
- Optische Hervorhebung der restlichen Sitzungsdauer, sobald nur noch 5 Minuten verbleiben
- Warnung und Hinweis, die eingegebenen Daten manuell zu sichern, sobald die Sitzungszeit abgelaufen ist
- Zwei Anzeigemodi
- Balken am unteren Fensterrand (Standard. Wird eingeblendet sobald ein durch das Plugin überwachtes Eingabeelement fokussiert wird)
- Fenster innerhalb der Seite (Sobald der Balken vom Benutzer verschoben wird)
- Verschiedene Interaktionen, einzeln (de-)aktivierbar
- Fenster/Balken schließbar
- Fenster skalierbar
- Fenster innerhalb der Seite verschiebbar
- Unabhängig von der Modulgruppe "Forum", kann also überall innerhalb von eStudy verwendet werden.
Verwendung
Der Timeoutcounter kann auf jeder beliebigen Seite eingebunden werden werden. Dazu muss zuerst das (bereits von eStudy zur Verfügung gestellte) JavaScript-Framework jQuery [2] eingebunden werden, danach kann der als jQuery-Plugin implementierte Timeout-Counter geladen werden.
Das Einbinden von jQuery geschieht am besten über das von eStudy bereitgestellte Array $JS_INCLUDE, indem ein neues Feld mit dem Inhalt "jQuery" angehängt wird. Zu beachten ist, dass dies vor dem Einbinden von init.php geschieht, da das Statement sonst keinerlei Wirkung zeigt.
Um schließlich den Timeoutcounter zu aktivieren muss einzusätzliches Script geladen werden. Auch zu diesem Zweck existiert in eStudy eine einfache Möglichkeit: Das Objekt $eStudyPage verfügt über die Methode appendJavaScriptFile, mit der ein Script an der richtigen Stelle injiziert werden kann. Als Parameter wird ein valider HTML-<script>-Tag erwartet, der zuerst konstruiert werden muss.
$eStudyPage existiert erst nach dem Einbinden von header.php, der Methodenaufruf muss also danach erfolgen.
Beispiel zum Einbinden des Timeoutcounters:
...
// Defines (z.B. PATH_TO_ROOT)
...
$JS_INCLUDE[] = "jQuery";
...
// Includes (z.B. header.php)
...
$js = "<script type='text/javascript' src='" . PATH_TO_ROOT . "common/js/jquery.timeoutcounter.js'></script>\n";
$eStudyPage->appendJavaScriptFile($js);
...
Der Timeoutcounter wird im Forum bereits genutzt. Weitere Beispiele zur Verwendung sind also den Quellcodes des Forums zu entnehmen (z.B. reply.php).
Das Plugin unterstützt eine Reihe von Optionen, die am Anfang der Datei jquery.timeoutcounter.js gesetzt werden können. Folgende Optionen werden unterstützt:
Option | Bedeutung | Default-Wert |
---|---|---|
titleText | Text in der Titelleiste des Fensters | Zeit bis zur automatischen Abmeldung |
counterText | Text im Inhaltsbereich des Fensters | Ihnen bleiben noch %m Minuten. Speichern Sie Ihren Beitrag rechtzeitig ab, um den Verlust Ihrer Arbeit zu verhindern! (%m wird durch die Anzahl der verbleibenden Minuten ersetzt!) |
warningText | Text im Inhaltsbereich des Fensters, der angezeigt wird, wenn die Sitzung abgelaufen ist | Ihre Sitzung ist abgelaufen! Sichern Sie Ihren Beitrag, bevor Sie sich erneut anmelden! |
closable | Soll das Fenster schließbar sein? | true |
resizable | Soll das Fenster skalierbar sein? | true |
draggable | Soll das Fenster verschiebbar sein? | true |
minHeight | Minimale Höhe des Fensters in Pixeln | 100 |
minWidth | Minimale Breite des Fensters in Pixeln | 150 |
Variante 2 - Wiederherstellung der Eingabe nach erneutem Anmelden
Der Benutzer wird nach dem Absenden seines Beitrages aufgefordert, sich erneut anzumelden, falls seine Sitzung bereits abgelaufen ist. Nach der Erfolgreichen Anmeldung wird er wieder zu dem Formular umgeleitet, das er abzuschicken versucht hat. Die eingegebenen Daten bleiben erhalten.
Beim erneuten Abschicken des Formulars wird sein Eintrag in die Datenbank übernommen.
Diese Variante wurde aus folgenden Gründen nicht umgesetzt:
- Eine komplett clientseitige Implementierung des Features ist derzeit nicht sinnvoll umsetzbar, da die dafür verfügbaren Technologien (z.B. HTML5 Web Storage) noch von keinem Browser vollständig implementiert werden. Ältere Browser implementieren die benötigten Schnittstellen gar nicht.
- Eine serverseitige Umsetzung wäre extrem aufwändig gewesen und hätte den geplanten Umfang der HÜ um ein vielfaches überschritten.
Unittesting
Javascript bietet im Bereich Unittesting einige Frameworks. Nachfolgend werden einige Frameworks aufgelistet.
- FireUnit - ist eine Firefox Extension um Unittest zu erstellen. Es läuft allerdings nur unter Firefox. Ausserdem benötigt es das Firebug-Plugin. Die Testergebnisse sind lediglich unter Firebug sichtbar.
- JSUnit - ist eine Portierung des JUnit Frameworks nach Javascript. JSUnit ist browserunabhängig und kommt mit einem Test-Runner worin man seine Test laufen lassen kann. Die Testdateien müssen allerdings auf einem Server laufen. Die Ausgabe erfolgt dann im Browserfenster.
- JSSpec - im Gegensatz zu JsUnit müssen die Testdateien nicht auf einem Webserver laufen.
- QUnit - ist das Unittesting-Framework von jQuery. Mit diesem Framework kann man allerdings auch anderen Javascript Code testen.
Überarbeitung
Neben dem neuen Feature sollen einige kleinere Bugs gefixt werden.
- Neue Icons für (un-)gelesene Foren
- Bugfixes
- Die Funktion "Alle Boards als gelesen markieren" funktioniert nicht richtig. Die Board-Icons ändern sich nicht.
- In der Themenansicht werden dem Benutzer auch Optionen (z.B. Thread schließen) angezeigt, zu denen er gar keine Rechte hat.
- Noch irgendwas...
- Zusätzliche Arbeiten
- Ein Großteil des Codes wurde, den Programmiervorgaben entsprechend, formatiert.
Die neuen Icons wurden zwar im Forum-Modul hinterlegt, allerdings nicht in die CSS-Sprites des Standard-Style übernommen. Hierfür hätte man neue Sprites generieren lassen müssen. Dazu hätten wir allerdings die Einstellungen der bisherigen Sprites, sowie alle bisher verwendeten Icons benötigt. Eine Rücksprache mit Herrn Thelen ergab, dass eine solche Dokumentation bzw. eine Zip Datei mit den bisherigen Icons nicht existiere. Aufgrund von Zeitmangel, haben wir dies nicht umgesetzt.
Ein Vorgehen hinsichtlich der XP-Methode (zuerst Unittests schreiben, dann implementieren) war bei den Bugfixes nicht möglich. Um einen Unittest für die entsprechenden Fixes schreiben zu können, hätten wir zunächst einmal alle möglichen Parameter analysieren müssen. Ein weiterer Grund weshalb wir keine Unittests schreiben konnten war, dass ein Großteil der Funktionalität über einfache Skripte geregelt wurde und nicht über Klassen. Wir entschlossen uns sämtliche Bugfixes von Hand zu testen und keine Unittests zu implementieren.
Liste der veränderten Dateien
Kurzfassung
- Die Pre-Commit-Hooks haben es nötig gemacht jede einzelne php-Datei und ein Großteil der Template des Forums zu modifizieren. Für diese Arbeit wurden etwas mehr als 23 Arbeitsstunden verbraten.
- Neue Dateien:
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/common/timeoutcounter.php ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/common/js/jquery.timeoutcounter.js ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/images/oxyblue-folder.png ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/images/oxyfire-board-new.png ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/images/oxylight-board-read.png ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/images/oxysugar-folder-open.png ( Neu )
- Modifizierte Dateien außerhalb des Forums:
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/common/init.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/common/js/jQuery/jquery-latest.pack.js ( Update auf v1.3.2 )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/common/js/jQuery/jquery-latest_uncompressed.js ( Update auf v1.3.2 )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/style/academic_yaml/screen/content.css (Diff)
Allgemein
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/auto.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/board.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/do_editprofile.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/edit.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/editprofile.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/footer.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/header.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/index.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/listavatar.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/newtopic.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/postops.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/reply.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/search.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/search_admin.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/showtopic.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/threadops.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/admin/addboard.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/admin/admin.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/admin/avatar.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/admin/editboard.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/admin/userban.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/common/init.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/common/timeoutcounter.php ( Neu )
Klassen
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/admin/classes/class.accessmask.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/admin/classes/class.adminfunctions.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/admin/classes/class.common.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/distribution/class.distributionhandler.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/distribution/class.distributor.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/distribution/class.mustseedistributionhandler.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/distribution/class.nulldistributionhandler.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/distribution/class.subscribersdistributionhandler.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/misc/class.actionhandler.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/misc/class.clearboardshandler.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/misc/class.dispatcher.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/misc/class.getlastposthandler.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/misc/class.getpostcounthandler.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/misc/class.subscribehandler.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/misc/class.unsubscribehandler.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/class.forumautomation.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/class.forumcompressorhandler.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/class.forumpaging.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/class.functions.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/class.header.inc.php (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/classes/class.userdataforum.inc.php (Diff)
Tests
- https://trac.mni.fh-giessen.de/eStudy/browser/trunk/web/forum/tests/DateienUndLinks?rev=2222 ( Entfernt )
- https://trac.mni.fh-giessen.de/eStudy/browser/trunk/web/forum/tests/Forum?rev=2222 ( Entfernt )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/ForumTests.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/trunk/web/forum/tests/FotoForum?rev=2222 ( Entfernt )
- https://trac.mni.fh-giessen.de/eStudy/browser/trunk/web/forum/tests/Kurse?rev=2222 ( Entfernt )
- https://trac.mni.fh-giessen.de/eStudy/browser/trunk/web/forum/tests/Lerngruppen?rev=2222 ( Entfernt )
- https://trac.mni.fh-giessen.de/eStudy/browser/trunk/web/forum/tests/Mitglieder?rev=2222 ( Entfernt )
- https://trac.mni.fh-giessen.de/eStudy/browser/trunk/web/forum/tests/News?rev=2222 ( Entfernt )
- https://trac.mni.fh-giessen.de/eStudy/browser/trunk/web/forum/tests/Rest?rev=2222 ( Entfernt )
- https://trac.mni.fh-giessen.de/eStudy/browser/trunk/web/forum/tests/TestSuite.html?rev=42 ( Entfernt )
- https://trac.mni.fh-giessen.de/eStudy/browser/trunk/web/forum/tests/Zwangsabo?rev=2222 ( Entfernt )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/admin?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/admin/class.accessmasktest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/admin/class.alltests.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/admin/class.boardformtest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/trunk/web/forum/tests/ant.xml?rev=42 ( Entfernt )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/class.alltests.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/class.forumautomationtest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/class.forumcompressorhandlertest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/class.forumpagingtest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/class.permissiontest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/class.templatetest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/class.userdataforumtest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/distribution?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/distribution/class.alltests.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/distribution/class.distributortest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/distribution/class.mustseedistributionhandlertest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/distribution/class.subscribersdistributionhandlertest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/localtestinginit.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/misc?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/misc/class.alltests.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/misc/class.clearboardshandlertest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/misc/class.dispatchertest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/misc/class.getlastposthandlertest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/misc/class.getpostcounthandlertest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/misc/class.subscribehandlertest.inc.php?rev=3584 ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/tests/misc/class.unsubscribehandlertest.inc.php?rev=3584 ( Neu )
Templates
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/avatarop.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/avatarpre.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/avatarrow.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/edit.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/editpreview.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/forumrow.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/lastthreads.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/main.html (Diff Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/movethreadform.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/newtopic.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/postings.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/profile.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/replyform.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/replypreview.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/searchform.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/searchform_admin.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/topicrow.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/topics.html (Diff)
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/topreview.html (Diff)
JavaScripts
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/common/js/jQuery/jquery-latest.pack.js ( Update auf v1.3.2 )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/common/js/jQuery/jquery-latest_uncompressed.js ( Update auf v1.3.2 )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/common/js/jquery.timeoutcounter.js ( Neu )
Stylesheets
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/style/academic_yaml/screen/content.css (Diff)
Bilder
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/images/oxyblue-folder.png ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/images/oxyfire-board-new.png ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/images/oxylight-board-read.png ( Neu )
- https://trac.mni.fh-giessen.de/eStudy/browser/branches/msp_09/web/forum/templates/images/oxylight-board-read.png ( Neu )
Liste der Dateien, die unter Umgehung der Pre-Commit-Hooks eingecheckt wurden
Folgende Dateien wurden unter Umgehung der Pre-Commit-Hooks (//@codingStandardsIgnoreFile) in den Branch eingecheckt.
Genannt sind jeweils das entsprechende Changeset, die betroffenen Dateien und der Grund der Umgehung.
- r3284 - Kein Einfluss auf Fremdcode (jQuery)
- r3316 - Kein Einluss auf $_GET['PHPSESSID']
- r3406 - Die Variable $JS_INCLUDE[] stammt aus dem Kern von eStudy
- https://trac.mni.fh-giessen.de/eStudy/changeset/3406/branches/msp_09/web/forum/edit.php
- https://trac.mni.fh-giessen.de/eStudy/changeset/3406/branches/msp_09/web/forum/newtopic.php
- https://trac.mni.fh-giessen.de/eStudy/changeset/3406/branches/msp_09/web/forum/reply.php
- https://trac.mni.fh-giessen.de/eStudy/changeset/3406/branches/msp_09/web/forum/showtopic.php