# Dokumentation Praktikum 3

## Einleitende Daten

Gruppe: D Team: Florian Heinze Kai Rese

Gültigkeitsdatum:
13.01.16

## 1.Allgemeine Beschreibung der Lösung

Die Aufgabe wird als Single-Page-Applikation umgesetzt. Serverseitig werden die Daten hierbei in einzelnen .dat Dateien gespeichert, deren Inhalt nach Json-Standard eingetragen ist.
Clientseitig werden html, CSS, Javascript, die Javascript-Bibliothek Jquery und Module vom Professor verwendet.

Es können Themen mit einem Titel erstellt, bearbeitet und gelöscht werden.
Zu den Themen können Diskussionen erstellt, bearbeitet und gelöscht werden.
Zu den Diskussionen können Beiträge erstellt, bearbeitet und gelöscht werden.

Daten können jedoch nur erstellt, bearbeitet oder gelöscht werden, wenn man sich eingeloggt hat. Weiterhin kann man nur seine eigenen Daten bearbeiten/löschen.

## 2.Implementierung des Serverseitig

### 2.1 REST-Interface

Folgende URL werden mittels REST-Prinzip entgegengenommen:
/topic /discussion
/post
/login

### 2.2 Module

#### server.py:

Startet und konfiguriert den Server und das REST-Interface

#### topic.py:

Dieses Modul soll alle Anfragen annehmen, die sich direkt auf Themen beziehen.

Enthält die Klasse: "Topic_cl".

Topic_cl enthält folgende Methoden:
GET: Wenn keine ID übergeben wird, wird die Themenliste zurückgegeben, anderenfalls wird das Thema zurückgegeben. Bei der ID "0" wird ein "Default-Topic" zurückgegeben.

PUT: Erzeugt aus den übergegeben Werten ein Thema.

POST: Editiert das Thema mit der übergebenen ID mit den übergebenen Werten.

DELETE: Das Thema mit der übergebenen ID wird gelöscht.

#### discussion.py:

Dieses Modul soll alle Anfragen annehmen, die sich direkt auf Diskussionen beziehen.

Enthält die Klasse: "Discussion_cl".

Diskussion_cl enthält folgende Methoden:
GET: Wenn keine Diskussions-ID übergeben wird, wird die Diskussionsliste der übergebenen Themen-ID zurückgegeben, anderenfalls wird die Diskussion zurückgegeben. Bei der ID "0" wird eine "Default-Discussion" zurückgegeben.

PUT: Erzeugt aus den übergegeben Werten eine Diskussion.

POST: Editiert die Diskussion mit der übergebenen ID mit den übergebenen Werten.

DELETE: Die Diskussion mit der übergebenen ID wird gelöscht.

#### post.py:

Dieses Modul soll alle Anfragen annehmen, die sich direkt auf Beiträge beziehen.

Enthält die Klasse: "Post_cl".

Diskussion_cl enthält folgende Methoden:
GET: Wenn keine Beitrags-ID übergeben wird, wird die Beitragsliste der übergebenen Diskussions-ID zurückgegeben, anderenfalls wird der Beitrag zurückgegeben. Bei der ID "0" wird ein "Default-Beitrag" zurückgegeben.

PUT: Erzeugt aus den übergegeben Werten einen Beitrag.

POST: Editiert den Beitrag mit der übergebenen ID mit den übergebenen Werten.

DELETE: Der Beitrag mit der übergebenen ID wird gelöscht.

#### database.py:

Dieses Modul verwaltet die Daten der anderen Module, die zurückgegeben, verändert oder gespeichert werden sollen.

Enthält die Klasse: "Database_cl".

Database_cl enthält folgende Methoden: createTopic_px(self, data_opl): Speichert ein neues Thema mit dem Werten von "data_opl" in die topics.dat.

createDiscussion_px(self, tID, data_opl): Speichert eine neue Diskussion mit den Werten von "data_opl" in die discussions.dat und seine ID in das übergebene Thema.

createPost_px(self, dID, data_opl): Speichert einen neuen Beitrag mit den Werten von "data_opl" in die posts.dat und seine ID in die übergebene Diskussion.

readTopic_px(self, id_ = None):Bei id_ == None wird die Themenliste, bei "0" ein "Default-Thema" und bei einem Wert != 0 das entsprechende Thema zurückgegeben.

readDiscussion_px(self, tId, dId = None): Bei dId == None wird die Diskussionsliste, bei "0" eine "Default-Diskussion" und bei einem Wert != 0 die entsprechende Diskussion zurückgegeben.

readPost_px(self, dID, pID = None): Bei dId == None wird die Beitragsliste, bei "0" ein "Default-Beitrag" und bei einem Wert != 0 der entsprechende Beitrag zurückgegeben.

updateTopic_px(self, id_, data_opl): Überprüft ob ein Thema mit der übergebenen ID existiert, wenn ja wird das editierte Thema abgespeichert.

updateDiscussion_px(self, id_, data_opl): Überprüft ob eine Diskussion mit der übergebenen ID existiert, wenn ja wird die editierte Diskussion abgespeichert.

updatePost_px(self, id_, data_opl): Überprüft ob ein Beitrag mit der übergebenen ID existiert, wenn ja wird der editerte Beitrag abgespeichert.

deleteTopic_px(self, id_): Überprüft ob ein Thema mit der übergebenen ID existiert, wenn ja wird es gelöscht.

deleleteDiscussion_px(self, id_): Überprüft ob eine Diskussion mit der übergebenen ID existiert, wenn ja wird sie gelöscht.

deletePost_px(self, id_): Überprüft ob ein Beitrag mit der übergebenen ID existiert, wenn ja wird er gelöscht.

getDefaultTopic_px(self): Gibt ein "Default-Thema" zurück.

getDefaultDiscussion_px(self): Gibt eine "Default-Diskussion" zurück.

getDefaultPost_px(self): Gibt einen "Default-Beitrag" zurück.

getUsers_px(self): Gibt die Benutzer zurück.

saveUsers_px(self, data_o): Speichert den übergebenen Benutzer in die "users.dat".

#### login.py

Dieses Modul verwaltet den Login.

Enthält die Klasse: "Login_cl".

Login_cl enhält folgende Methoden: GET: Prüft, ob der übergebene Benutzer vorhanden ist. Wenn ja, wird zurückgegebenen, dass dieser autorisiert ist.

Put: Prüft, ob der übergebene Benutzername schon existiert, falls nicht wird dieser neu angelegt und gespeichert.

#### template.py

Dieses Modul lädt alle Templates

Enthält die Klasse: "Template_cl".

Template_cl enthält folgende Methoden: GET: Gibt alle Templates zurück.

#### application.py:

Dieses Modul gibt bei unbekannter Anforderung eine Fehlermeldung zurück.

#### Zusammenwirken

Die Module topic.py, discussion.py, login.py und post.py verwalten alle ihre Daten mithilfe der database.py. Diese löscht, speichert, erstellt oder verändert Daten und übergibt diese dann an die entsprechenden Module zur weiteren Verarbeitung.

### 2.3 Datenhaltung

#### topics.dat

Die Themen werden wie folgt in der "topics.dat" gespeichert: "name": [string] "owner": [string] "discs": [Keys der dazugehörigen Diskussionen] "deleted": [boolean]

Zusätzlich wird die ID für das nächste Thema gespeichert.

#### discussions.dat

Die Diskussionen werden wie folgt in der "discussions.dat" gespeichert: "name": [string] "owner": [string] "posts": [Keys der dazugehörigen Beiträge] "deleted": [boolean]

Zusätzlich wird die ID für die nächste Diskussion gespeichert.

#### posts.dat

Die Beiträge werden wie folgt in der "posts.dat" gespeichert: "text": [string] "owner": [string] "title": [string] "time": [Zeitangaben] "deleted": [boolean]

Zusätzlich wird die ID für den nächsten Beitrag gespeichert.

#### users.dat

Die Themen werden wie folgt in der "users.dat" gespeichert: "[Benutzername]": [Passwort]

### 3. Implementierung des Clients

#### 3.1 Klassen

FORUM.User_cl: Stellt die Funktionen für den Benutzer zur Verfügung.

FORUM.Application_cl: Erzeugt die Instanzen der einzelnen Klassen und verwaltet das Anzeigen der Inhalte auf Basis der Nachrichten des Eventservices.

FORUM.TopicListView_cl: Verwaltet die Anzeige der Themenliste und die in diesem Teil enstehenden Events.

FORUM.TopicDetailView_cl: Verwaltet die Anzeige des Themenformulars und die in diesem Teil enstehenden Events.

FORUM.DiscussionListView_cl: Verwaltet die Anzeige der Diskussionsliste und die in diesem Teil enstehenden Events.

FORUM.DiscussionDetailView_cl: Verwaltet die Anzeige des Diskussionsformulars und die in diesem Teil enstehenden Events.

FORUM.PostListView_cl: Verwaltet die Anzeige der Beitragsliste und die in diesem Teil enstehenden Events.

FORUM.PostDetailView_cl: Verwaltet die Anzeige des Beitragsformulars und die in diesem Teil enstehenden Events.

FORUM.LoginView_cl: Verwaltet die Anzeige des Loginformulars und die in diesem Teil enstehenden Events.

#### 3.2 Eventservice:

Der Eventservice wird benutzt um zu signalisieren, dass eine Seite angezeigt werden soll,
diese werden in Forum.js abgehandelt und dann zu den entsprechenden Skripten weitergeschickt.

#### 3.3 Templateverarbeitung:

Die drei Templates die verwendet werden sind:
list_topic.tpl
list_discussion.tpl
list_post.tpl
Diese Templates bauen die Tabellen zusammen, die jeweils die Listen aus Themen, Beiträgen und Diskussionen anzeigen.

## Prüfung Markup und Stilregeln:

Ergebnis Test des Markups des HTML Codes der Index Datei mit Beispielementen in allen drei Kategorien: "Document checking completed. No errors or warnings to show."

Ergebnis des Tests der CSS-Stilregeln:
"Congratulations! No Error Found."