Warning: include_once(/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php): failed to open stream: No such file or directory in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: include_once(): Failed opening '/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php' for inclusion (include_path='.:/opt/php/lib/php') in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/fields/dbp09/local/config.php:4) in /var/www/html/pmwiki-2.2.86/pmwiki.php on line 1250
Datenbankpraktikum SS 2009 - Gruppe 3 - Personen-Und Angestelltenverwaltung

Personen-und Angestelltenverwaltung

von Katja Sperber und Sabine Heider

Inhalt:

Konzept:

(vergleiche ER-Diagramm in der Datenbankmodellierung)

Die Klasse Person verfügt über die Attribute Login, Titel, Vorname, Nachname, Email und Passwort. Über den Login, welcher maximal 8 Zeichen lang ist, lässt sich eine Person eindeutig identifizieren (Schlüssel). Nur das Attribut Titel darf unbesetzt bleiben. Die Klasse Person wird vollständig unterteilt in die Klassen Angestellter und Student.
Neben den von Person stammenden Attributen verfügt ein Angestellter über eine Rolle. Diese Rolle ist festgelegt auf einen Dozenten oder Übungsleiter. Zwischen Angestellten und Veranstaltungen besteht eine N:M-Beziehung Halten, die die beiden Schlüssel Login und VerID beinhaltet.

Funktionen innerhalb TuKS:

  • Anlegen und Löschen eines Dozenten und/oder Übungsleiter
  • Verändern von persönlichen Daten bei einem Dozent oder Übungsleiter
  • Auflistung aller in der DB enthaltenen Angestellten
  • Detailansicht eines Angestellten
  • [Übungsleiter einer ausgewählten Veranstaltung zuweisen (Funktionaliät wurde nachträglich direkt unter Veranstaltung anlegen bzw. bearbeiten implementiert; dazugehörige Methoden oder Views wurden mit [] gekennzeichnet)]

Angestellter anlegen:

  • nur durch einen Dozenten möglich
  • Bei Auswahl der Rolle sind nur 'Dozent' und 'Übungsleiter' erlaubt
    • Umsetzung in der DB: enum
    • Umsetzung im Formular (angestellten_form.tpl): Auswahlliste
    <tr><td><label for="Rolle">Rolle:</label></td>
         <td><select name="Rolle">
             <option value="Dozent">Dozent 
             <option value="Uebungsleiter">Uebungsleiter
             </select></td>
    </tr>
  • Passwort wird vor Eintrag in die DB md5-verschlüsselt und durch eine doppelte Abfrage gesichert
  • überprüfen, ob alle Attribute (mit Ausnahme von Titel) einen Inhalt zurückgeben, sonst Fehlermeldung
  • überprüfen, ob der Loginname maximal nur 8 Zeichen umfasst, andernfalls Fehlermeldung
  • wenn alles Ok ist, wird ein neuer Angestellter und damit auch eine neue Person erzeugt

Abb. 1: Formular zum Anlegen eines Angestellten

Angestellter löschen:

  • nur Dozenten sind zum Löschen anderer Angestellten berechtigt
  • als Delete-Option innerhalb der Angestelltenliste möglich
  • es folgt eine Sicherheitsabfrage, ob man wirklich die ausgewählte Person löschen möchte

Persönliche Daten ändern (Dozent oder Übungsleiter)

  • nur eigene Daten änderbar
  • in der view angestellter_update.tpl werden zwei Fieldsets angezeigt, die entweder das Ändern der Daten oder des Passwortes ermöglichen
    • dadurch müssen nicht bei Änderung der Daten drei Passwortfelder ausgefüllt werden
  • Ändern der Daten
    • die Datenfelder werden mit den aktuell in der DB gespeicherten Werten angezeigt
    • die Felder Login und Rolle sind mit readonly markiert, welches ein Ändern dieser unterbindet
    • bei unvollständigen Daten wird eine Fehlermeldung ausgegeben
  • Ändern des Passwortes
    • die Datenfelder sind im Gegensatz zum vorherigen Fall leer
    • doppelte Abfrage des neuen Passwortes, damit nicht ausversehen ein falsches Passwort eingetragen wird
    • Bestätigung durch das alte Passwort
    // Vergleich der beiden neuen Passwörter
    if ($_POST['PasswortNeu2'] != $_POST['PasswortNeu']) {
    	$this->env->templateEngine()->assign('error', 'Passw&ouml;rter stimmen nicht &uuml;berein');
    	$t->assign('angestellter', $a); 
    	return $t->fetch('angestellter_update.tpl'); 
    }			
    // Verschlüsseln
    $_POST['PasswortNeu'] = call_user_func(VERSCHLUESSELUNGSFUNKTION,$_POST['PasswortNeu']);			
    // wenn das alte Passwort mit dem in der DB gespeicherten 
    // übereinstimmt, wird es geändert
    if ($a->check_passwort($_POST['PasswortAlt'])) {
    	$a->Passwort = $_POST['PasswortNeu'];			
    // sonst wird eine Fehlermeldung zurückgegeben
    } else {
    	$this->env->templateEngine()->assign('error', 'Falsches Passwort');
    	$t->assign('angestellter', $angestellter); 
    	return $t->fetch('angestellter_update.tpl');
    }
    $info = 'Passwort wurden erfolgreich ge&auml;ndert.';

Abb. 2: Formulare zum Ändern eines Angestellten

Auflistung aller Angestellten

  • Ausgabe einer Tabelle mit den Spalten Vorname, Nachname sowie den Optionen Detailansicht und Löschen
  • der Login ist in der Tabelle nicht sichtbar, wird aber bei der Suche berücksichtigt

Detailansicht eines Angestellten

Abb. 3: Detailansicht eines Angestellten

Implementierte Models:

Person.php:

Die Klasse Person erweitert die abstrakte Klasse Model und verwaltet eine Personen-Instanz. Sie verfügt über zwei assoziative Arrays, $keys und $properties, in denen der Schlüssel bzw. die restlichen Attribute gespeichert werden.
Dem Konstruktor werden ein assoziatives Array mit den Attributwerten und eine Umgebung übergeben. Sofern dem Konstruktor gültige Attributwerte übergeben wurden, wird, wenn der Loginname noch nicht in der Datenbank enthalten ist, die Person in diese eingetragen, andernfallse wird ein Update durchgeführt.

statische Methoden:

  • get_person($login, $env): liefert zu einem übergebenen Loginnamen die passende Person aus der Datenbank, falls vorhanden, andernfalls wird NULL zurückgegeben
  • get_persons($logins, $env): liefert zu einem übergebenen numerischen Array, befüllt mit Loginnamen, ein Array mit den dazugehörigen Personenobjekten
  • get_all($env): gibt alle in der Datenbank enthaltenen Personen zurück
  • testKey($table, $login, $env): ermittelt zu einem übergebenen Array, das einen Loginnamen enthält, die Anzahl der Einträge in einer der Tabellen Personen, Angestellte oder Studenten. Wenn ein anderer Tabellenname übergeben wird, wird eine Exeption geworfen

nicht-statische Methoden:

  • insert(): fügt die Person, falls sie noch nicht in der Datenbank enthalten ist und die Attribute mit zulässigen Werten belegt sind, dort ein
  • __get($property): gibt den Wert des übergebenen Attributes zurück
  • __set($property $value): setzt das übergebene Attribut, sofern es sich nicht um ein Schlüsselattribut handelt, auf den übergebenen Wert und propagiert die Änderung an die Datenbank
  • update(): führt ein Update der Datenbank durch, bei dem alle Attribute, mit Ausnahme des Schlüssels, mit den aktuell im Array gespeicherten Werten belegt werden
  • delete(): entfernt den entsprechenden Eintrag in der Datenbank
  • check_passwort ($passwort): übergebenes Passwort wird verschlüsselt und mit dem Passwort in der DB verglichen
  • hole_rollen(): es werden alle Rollen der Person in einem Array zurückgegeben
  • nach_rolle($rolle): es werden die Veranstaltungen zu der entsprechenden Rollen der Person ausgegeben

Angestellter.php

Die Klasse Angestellter erweitert die Klasse Person und verwaltet eine Angestellten-Instanz. Neben den vererbten assoziativen Arrays $keys und $properties verfügt sie über ein weiteres assoziatives Arrays $angProperties, in dem die restlichen Attribute gespeichert werden.
Dem Konstruktor werden ein assoziatives Array, das die Attribute sowohl für einen Angestellten als auch für eine Person enthält, und eine Umgebung übergeben. Sofern dem Konstruktor gültige Attributwerte übergeben wurden, wird, wenn der Loginname noch nicht in der Datenbank enthalten ist, ein Insert in Personen und Angestellte durchgeführt, andernfallse ein Update.

statische Methoden:

  • get_angestellter($login, $env): liefert, falls vorhanden, zu einem übergebenen Loginnamen den passenden Angestellten aus der Datenbank zurück, andernfalls wird NULL zurückgegeben
  • get_angestellte($logins, $env): liefert zu einem übergebenen numerischen Array, befüllt mit Loginnamen, ein Array mit den dazugehörigen Angestelltenobjekten zurück
  • get_all($env): gibt alle in der Datenbank enthaltenen Angestellte zurück
  • get_all_rolle($rolle,Umgebung $env) : liefert alle Angestellteneinträge in der DB mit einer übergebenen Rolle

nicht-statische Methoden:

  • insert_ang(): fügt den Angestellten, falls er noch nicht in der Datenbank enthalten ist und die Attribute mit zulässigen Werten belegt sind, in die Tabellen Personen und Angestellte ein
  • __get($property): gibt den Wert des übergebenen Attributes zurück
  • __set($property $value): setzt das übergebene Attribut, sofern es sich nicht um ein Schlüsselattribut handelt, auf den übergebenen Wert und propagiert die Änderung an die Datenbank
  • update_ang(): führt ein Update der Datenbank durch, bei dem alle Attribute, mit Ausnahme des Schlüssels, mit den aktuell im Array gespeicherten Werten belegt werden

Halten.php

Die Klasse Halten erweitert die abstrakte Klasse Model und verwaltet eine Halten-Instanz. Sie verfügt über ein assoziatives Arrays $keys, in dem der Schlüssel gespeichert wird.
Dem Konstruktor werden ein assoziatives Array mit den Attributwerten und eine Umgebung übergeben. Wenn noch kein entsprechender Eintrag in der Datenbank vorhanden ist, wird dieser eingefügt, sofern ein existenter Loginname und eine existente VerID übergeben wurden.

statische Methoden:

  • get_halten($keys, $env): liefert, falls vorhanden, zu einem übergebenen assoziativen Array mit den Schlüsselattributen den passenden Eintrag aus der Datenbank zurück, andernfalls wird eine Exception geworfen
  • get_veranstaltungen($login, $env): liefert zu einem Loginname alle dazugehörigen Einträge in der Datenbank in Form eines Array mit den entsprechenden Halten-Objekten zurück
  • get_logins($verid, $env): liefert zu einer VerID alle dazugehörigen Einträge in der Datenbank in Form eines Array mit den entsprechenden Halten-Objekten zurück
  • get_all($env): gibt alle in der Datenbank enthaltenen Einträge der Tabelle halten zurück
  • testKey ($keys, $env): gibt die Anzahl der Einträge in der Tabelle halten mit den Attributwerten des assoziativen Arrays $keys halten zurück
  • testVerID ($verid, $env): gibt die Anzahl der Einträge in der Tabelle Veranstaltungen mit der übergebenen VerID zurück
  • get_ueb_ver($verid, $env): liefert die Loginname von Übungsleitern einer übergebenen Veranstaltung in einem Array zurück
  • get_ueb_nichtver($verid, $env): liefert die Loginname von Übungsleitern, die nicht in einer übergebenen Veranstaltung eingetragen sind, in einem Array zurück

nicht-statische Methoden:

  • insert(): fügt die Relation, falls sie noch nicht in der Datenbank enthalten ist und die Attribute mit zulässigen Werten belegt sind, in die Tabelle halten ein
  • __get($property): gibt den Wert des übergebenen Attributes zurück
  • __set($property $value): Diese Methode muss aufgrund der Vererbung implementiert werden, der Aufruf führt jedoch unmittelbar zu einer Exception. Die Klasse verfügt nur über Schlüsselattribute, ein Ändern dieser ist nicht gestattet.
  • delete(): entfernt den entsprechenden Eintrag in der Datenbank

Implementierte Controller:

Angestellter_Controller.php:

Im Konstruktor wird die übergebene Umgebung in der Controller-Klasse auf die Klassenvariable gesetzt und von dort der Login der eingeloggt Person an die eigene Klassenvariable vergeben.

Action:

  • action_show(): holt sich die Daten zu einem Login und übergibt diese an die View angestellter_view.tpl
  • action_new(): zum Erzeugen eines neuen Angestellten und damit automatisch auch einer neuen Person
  • action_start(): über eine übergebene Option wird mit "neu" das Eingabe-Formular, mit "ändern" das Update-Formular und mit "löschen" ein Fenster mit der Bestätigungsabfrage aufgerufen
  • action_delete(): löscht einen Angestellten, wenn dies bestätigt wurde
  • action_update(): zum Ändern der Attribute außer Passwort eines Angestellten und gegebenenfalls einer Person
  • action_passwort(): zum Ändern des Passworts eines Angestellten und damit der Person
  • action_list(): zur Auflistung der Angestellten
  • action_(): Default-Action
  • [action_list_ueb(): holt sich die Übungsleiter, welche die ausgewählten Veranstaltung halten, und jene, die die Veranstaltung nicht halten, um sie der View uebungsleiter_list.tpl zu übergeben]
  • [action_multizuweisen(): trägt die durch Checkboxes markierten Übungsleiter in die Veranstaltung ein]
  • [action_multiaustragen(): trägt die durch Checkboxes markierten Übungsleiter aus der Veranstaltung aus]

Implementierte Views:

  • angestellter_form.tpl: Formular zur Eingabe eines Angestellten
  • angestellter_list.tpl: Listet Angestellte auf
  • angestellter_update.tpl: Formular zum Ändern der Angestelltendaten
  • angestellter_view.tpl: Detailseite
  • [uebungsleiter_list.tpl: listet die bereits der Veranstaltung zugewiesenen Übungsleiter und die verbleibenden Übungsleiter in zwei getrennten Tabellen auf]

top


Page last modified on September 05, 2009, at 01:12 PM