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 - Team 2

Inhalt

Studentenverwaltung

Nico Marniok

Frontend / Bedienung

Features

  • Student aus csv-Datei importieren.
  • Einzelne Studenten hinzufügen.
  • Mehrere/Einzelne Studenten einer Veranstaltung hinzufügen.
  • Matrikelhistorien verwalten.
  • Daten einzelner Studenten ändern.
  • Studentendetails anzeigen.
  • Nach Studenten suchen.
  • Studenten können ihr Passwort und ihre E-Mailadresse ändern.
  • Voller Zugriff nur als Dozent

Abbildung 1.1

Einzelnen Studenten hinzufügen / Student editieren

  • Login kann nur einmal beim Einfügen gesetzt werden (da Schlüssel)
  • Mehrere Studiengänge können mit Semikolon getrennt werden
  • Das Passwort wird nur hier in Klartext angezeigt, später kann es nicht rekonstruiert werden
  • Es besteht für den Studenten die Möglichkeit sein eigenes Passwort zu ändern
  • Das Passwort wird nicht angezeigt. Wenn das Feld leer gelassen wird, bleibt es gleich.
Abbildung 1.2Abbildung 1.3

Detailseite eines Studenten

  • Wird durch einen Klick auf das blaue i in der Studentenliste erriecht
  • Alle Details eines Studenten werden angezeigt
  • Die betreuten Vorlesungen, besuchten Veranstaltungen und seine Gruppen sind auf die jeweiligen Detailseiten verlinkt
  • Neben der Matrikelnummer des Studenten ist der Link 'Historie', der zur Matrikelhistorie des Studenten führt

Matrikelhistorie

  • Wird erricht durch die Detailseite eines Studenten
  • Hier können die Matrikelnummern eines Studenten betrachtet und manipuliert werden

Mehrere Studenten hinzufügen / CSV-Format

  • csv Dateien aus studIP werden unterstützt:
    • Komplettes Format: Titel Vorname Nachname Titel2 Privatadr Privatnr E-Mail Anmeldedatum Kontingent Studiengänge Matrikelnummer Studieninfo synced Geschlecht „Mitglied der Gruppen“ Sprache Bemerkung
  • Verwertete Informationen: Titel, Vorname, Nachname, E-Mail, Matrikelnummer, Studieninfo
  • Generierte Informationen:
    • Login: E-Mail Adresse wird auf @uos.de oder @uni-osnabrueck.de geprüft und der Präfix zum Login gemacht. Sollte keine solche E-Mail Adresse vorhanden sein wird der Login studIP-typisch aus dem ersten Buchstaben des Vornamens und den 7 ersten Buchstaben des Nachnamens generiert
    • Passwort: Wird die Matrikelnummer
  • Informationen über die Erfolgsrate des Importierens werden danach angezeigt (Bereits vorhandene Logins, etc…)
  • Während des Importierens können die generierten Studenten bereits in eine Veranstaltung eingetragen werden
  • Während des Importierens können die Studenten einer Veranstaltung hinzugefügt werden

Beispiel Attach:student_example.txt

  • Situation:
    • Die csv-Datei enthält 8 Studenten, von denen 4 bereits in der Datenbank stehen
    • 2 der 4 besuchen bereits eine Vorlesung, in die alle Studenten der csv-Datei eingetragen werden sollen

Abbildung 1.4

  • Unten stehen die Studenten, die bereits in der Datenbank sind
  • Hier kann man nun diejenigen auswählen, die ebenfalls in die Veranstaltung eingetragen werden sollen
  • Am Ende erhält man eine Meldung darüber, welche Studenten nicht in die Veranstaltug eingetragen werden konnten

Backend / Code

Student.php

Die Klasse Student enthält alle Low Level Operationen auf den Studenten, wie Einfügen, Ändern, alle Studenten beschaffen, etc...

class Student extends Model {
    /* Instanzvariablen... */
    /* Konstruktor, Update, Insert, Delete, Getter, Setter*/
 
    /**
     * Prüft ob das übergebene Passwort mit dem des Studenten übereinstimmt und liefert true oder false
     */
    public function check_passwort($pass) { /*...*/ }
 
    /**
     * Statische Klassenfunktion, die einen Studenten anhand seines logins als Objekt zurückliefert.
     */
    public static function get_student($login, $env) { /*...*/ }
 
    /**
     * Liefert die Studenten, deren logins im übergebenen array stehen
     */
    public static function get_studenten($logins, $env) { /*...*/ }
 
    /**
     * Liefert alle Studenten
     */
    public static function get_alle_studenten($env) { /*...*/ }
}

Student_Controller.php

Die Klasse Student_Controller enthält alle Funktionen, die Daten beschaffen und an die View übergeben. Dafür werden diverse actions zur Vefügung gestellt. Beispiele:

/**
     * Zeigt die Studentenliste an
     */
    public function action_list() { /*...*/ }
 
    /**
     * Verarbeitet die hochgeladene CSV-Datei und zeigt anschließend eine Zusammenfassung
     */ 
    public function action_csv() { /*...*/ }
 
    /**
     * Zeigt einen Bestätigungsdialog, um mehrere Studenten zu löschen
     */
    public function action_deletemultiplerequest() { /*...*/ }
 
    /**
     * Löscht mehrere Studenten und zeigt danach die Studentenliste
     */
    public function action_deletemultiple() { /*...*/ }

CSVImport.php

Da die Funktionen des CSV-Importes gänzlich anders sind als der Rest des Programms, sei er hier aufgeführt. Die Klasse bekommt bei der Konstruktion das Environment Objekt übergeben, sowie den Pfad der CSV-Datei, die es zu importieren gilt. Die Funktion import() startet schließlich den Vorgang. Es wird Zeile für Zeile ausgelesen und der Inhalt entsprechend einiger Heuristiken verarbeitet. Beispielsweise werden die Studiengänge asu dem Format, welches StudIP liefert, extrahiert: [Abschluss:Studiengang (Semesterzahl), ]* Flogende Operationen werden darauf durchgeführt:

  1. Entferne runde Klammern mit ihrem Inhalt
  2. Splitte den String an Kommata
  3. Entferne den ANfang eines Strings bis zum ersten Doppelpunkt
class CSVImporter {
    /* Instanzvariablen */
 
    public function __construct($csv_file, $env) { /*...*/ }
 
    /**
     * Holt eine Zeile als Array
     */
    private function get_line() { /*...*/ }
 
    /**
     * importiert die daten aus der csv datei
     * @return array mit zusammenfassungen
     */
    public function import() {
        while($line = $this->get_line()) { //zeilenweise einlesen
            $args = array('Titel' => $line[0],
                          'Vorname' => $line[1],
                          'Nachname' => $line[2],
                          'Email' => $line[6],
                          'Studieninfo' => preg_replace('#\(.*?\)#m', '', $line[11]), //studieninfo wird von runden klammern und ihrem inhalt entfernt
                          'MatrNr' => $line[10] == '' ? rand(100000,999999) : $line[10]);
            /* ... versuchen, den login aus der mail adresse zu extrahieren */
            /* ... wenn email nicht auf uos.de oder uni-osnabrueck.de endet,
                   namen von sonderzeichen befreien und login generieren */            
            /* ... leere werte auffüllen */
            /* ... passwort verschlüsseln */
            try {
                /* ... studiengänge auseinanderpflücken */
                /* ... Studenten generieren */
            } catch (Exception $e) {
                /* ... Fehler abfangen, interpretieren und in das Rückgabearray schreiben */
            }
            try {
                /* ... student in seine studiengänge einschreiben */
            } catch (Exception $e) {}
 
        }
        /* ... zusammenfassung zurückliefern */
    }
}

Gruppenverwaltung

Sascha Kolodzey

Konzept:

  • Eine Gruppe gehört zu genau einer Vorlesung.
  • Gruppen sind von Tutoren, Übungsleiter und Dozenten der jeweiligen Vorlesung einzusehen.
  • Grundsätzlich: Die Tabelle "sindIn" verknüpft die Tabelle "Studenten" mit der Tabelle "Gruppen".
  • Also: Studenten "sindIn" Gruppen.
  • Schlüssel sind: VerID,GrpID,Login.
  • Beteiligte Tabellen: Gruppen, sindIn, Studenten, betreuen, halten. (Informationen über Tutoren/Übungsleiter/Studenten).
  • Tabelle "sindIn" verwaltet auch die bearbeiteten Übungsblätter des Studenten in einer Gruppe. (Wichtig bei Verschiebungen).

Frontend / Bedienung

Features:

  • Gruppe zu einer Vorlesung anlegen.
  • Gruppe löschen/umbenennen.
  • Tutor in der jeweiligen Vorlesung einer Gruppe zuweisen bzw. ändern.
  • Studenten aus der jeweiligen Vorlesung einer Gruppe hinzufügen bzw. löschen.
  • Studenten innerhalb Gruppen einer Vorlesung verschieben (Gruppen zusammenführen).
  • Studenten ab einer Übungsblattnummer einer anderen Gruppe zuweisen.
  • Anzeigen aller Gruppen einer Vorlesung.
  • (Gruppe in eine andere Vorlesung verschieben)

Übersicht aller Gruppen einer Vorlesung

Abbildung 2.1

Über das Dropdown-Menu in der Tabelle kann der Benutzer eine seiner Vorlesungen, die er betreut/liest auswählen. Daraufhin werden alle Gruppen zu dieser Vorlesung geladen und in der Tabelle angezeigt. Die drei Symbole auf der rechten Seite dienen zur Informationsanzeige, Bearbeitung und Löschung der jeweiligen Gruppe. Über den Link "Gruppe hinzufügen", lässt sich eine neue Gruppe in ausgewählte Veranstaltung eintragen.

Gruppe zu einer Vorlesung anlegen.

Abbildung 2.2

Klickt der Benutzer auf den Link "Gruppe hinzufügen" wird er zu dem obigen Formfeld geleitet. Hier ist die ausgewählte Vorlesung bereits selektiert und alle verfügbaren Tutoren zu dieser in das DropDown-Menu "Tutoren" geladen. Wird hier eine andere Vorlesung gewählt, werden alle Tutoren erneut geladen und in dem Menu zur Verfügung gestellet. Das Gruppenkürzel ist frei wählbar und soll der Gruppe einen "Namen" geben.

Gruppe bearbeiten

Abbildung 2.3

Über das Symbol "Bearbeiten" ist es möglich vorhandene Gruppen zu bearbeiten. Wobei es möglich ist den Tutor, das Kürzel und die Veranstaltung zu ändern. Die letztere Operation wird zwar technisch unterstützt, wird aber wahrscheinlicht sehr selten Anwendung finden.

Detailansicht einer Gruppe

Abbildung 2.4

Die Detailansicht einer Gruppe stellt alle wichtigen Informationen einer Gruppe da. Gruppenname und zugehörige Vorlesung werden genannt, sowie ein "Hinweis" Feld, welches den Aktuellen Status einer Gruppe anzeigt.

Es sind drei verschiedene Stadien möglich:

  • Status 1: Die Anzahl der Studenten einer Gruppe genügt nicht der Mindestanzahl der dazugehörigen Vorlesung.

Abbildung 2.5

  • Status 2: Die Anzahl der Studenten ist größer als die Mindestanzahl und kleiner als die Maximalanzahl der dazugehörigen Vorlesung.

Abbildung2.6

  • Status 3: Die Anzahl der Studenten ist gleich der Maximalanzahl der erlaubten Studenten zu dieser Gruppe.

Siehe Abbildung 2.4

Dessweiteren ist es möglich über die Options Symbole einen Studenten aus der Gruppe zu entfernen, Details zu bearbeiten und sich das Profil des Studenten anzeigen zu lassen.

Student zu einer Gruppe hinzufügen

Abbildung 2.7

Ist die Maximalanzahl von Studenten einer Gruppe nicht erreicht, wird der "Student Hinzufügen"-Link eingeblendet, welcher es erlaubt Studenten der Gruppe hinzuzufügen. Das darauf folgende Formular enthält eine Dropdown-Menu welches alle Studenten der jeweiligen Vorlesung anzeigt, die noch nicht in einer Gruppe eingetragen sind. Der Benutzer kann hier auch eine Merfachauswahl treffen und somit mehrere Studenten auf einmal der Gruppe hinzuzufügen. Hierbei wird beachtet, dass die Maximalanzahl nicht überschritten wird.

Details zu einem Studenten ändern.

Abbildung 2.8

Über das "Bearbeiten" Symbol in der Deteilansicht einer Gruppe ist es möglich Details zu einem Student in der Gruppe zu bearbeiten. Der Benutzer kann den Studenten in eine andere Gruppe der Vorlesung verschieben, oder die "Von" und "Bis" Werten anpassen. Die "Von" und "Bis" Werte geben darüber Auskunft, welche Übungsblätter der Student in dieser Gruppe bearbeitet hat. Es ist zum Beispiel möglich, dass ein Student ab einem bestimmten Übungsblatt in eine andere Gruppe verschoben wird und von da an die Übungsblätter in dieser Gruppe bearbeitet.

Backend / Code

Die Modelklasse Gruppe.php

Die Modelklasse Gruppe.php enthält sämtliche Low-Level Funktionen wie Einfügen, Editieren, Löschen und Speichern von Gruppenobjekten in die Datenbank. Dessweiteren enthält die Klasse eine Vielzahl von Funktionen, die bestimme Datenbankabfragen erledigen z.B. "Hole alle Gruppen zu einer bestimmten Vorlesung".

Ein Codeauschnitt aus der Klasse Gruppe.php:

class Gruppe extends Model {
 /**
   * Liefert alle Gruppen zu dem übergebenen Tutor und zu 
   * der übergebenen Veranstaltung und zu der übergebenen BlattNr.
   * @return Array von Gruppenobjekten.
   */
  public static function get_gruppen_ver_tut_zet($VerID, $TutorLogin, $BlattNr, $env) {
    /** SQL-Statement */
    $sql = 'SELECT * FROM Gruppen g WHERE g.VerID = ? and g.TutorLogin = ? AND g.GrpID in (
	    SELECT s.GrpId FROM sindIn s WHERE s.VerID = g.VerID AND
            s.von <= ? AND s.bis >= ?)';
    /**Setze Werte, die ersetzt werden sollen */
    $values = array($VerID, $TutorLogin, $BlattNr, $BlattNr);
    /**Führe das SQL-Statements mittels Prepared-Statements aus */
    $result = $env->verbindung()->execute_query($sql,$values);
    $gruppen = array();
    /** Verarbeite das Ergebnis */
    foreach($result as $gruppe) {
          /** Erzeuge für jede Zeile eine neues Gruppenobjekt*/
	  $gruppen[] = new Gruppe($gruppe,$env);	
    }
    /**liefer Ergebnis zurück */
    return $gruppen;
  }
 
  /**
   * Liefert alle Gruppen zu der übergebenen Veranstaltung.
   * @param object $VerID
   * @return Array von Gruppenobjekten
   */
  public static function get_gruppen_ver($VerID, $env) {
    /**SQL-Statement*/
    $sql = 'SELECT GrpID as id FROM Gruppen WHERE VerID = ?';
    $value = array($VerID);
    /**Ergebnis holen */
    $result = $env->verbindung()->execute_query($sql,$value);
    $gruppen = array();
    foreach($result as $id) {
      /** Erzeuge für jede Zeile eine neues Gruppenobjekt*/
      $gruppen[] = Gruppe::get_gruppe($id['id'],$env);
    }	
   return $gruppen;
  }
}

Die Controller Klasse Gruppen_Controller.php

Die Klasse Gruppen_Controller.php verfügt über eine Vielzahl von Methoden, die benötigt werden um die entsprechenden Views mit Daten, die der Controller von den Models bekommt, zu füllen. Außerdem verarbeitet der Controller Benutzerangaben und leitet entsprechende Instruktionen, über Models an die Datenbank weiter.

Ein Codeauschnitt aus der Klasse Gruppen_Controller.php

class Gruppen_Controller extends Controller {
    /**
     * Speichert eine neue Gruppe in die Datenbank
     */
    function action_speichern() {
    	try {
    	    $tutorlogin = null;
	    $verid = null;
            $kuerzel = null;
            /* Benutzereingaben werden geprüft 
               und Variablen gesetzt*/
            if(empty($_REQUEST['select_ver'])) {
                throw new TuksException('Bitte Vorlesung wählen.');
            }
            $verid = $_REQUEST['select_ver'];
            if(empty($_REQUEST['tutorlogin'])) {
                throw new TuksException('Bitte Tutor wählen.');
            }
            $tutorlogin = $_REQUEST['tutorlogin'];
            if(empty($_REQUEST['kuerzel'])) {
                throw new TuksException('Bitte Kürzel wählen.');
            }
            $kuerzel = $_REQUEST['kuerzel'];
            /**Properties werden gesetzt */
            $values = array('VerID'=>$verid, 'TutorLogin'=>$tutorlogin, 'Kuerzel'=>$kuerzel);
            /**alles ok Gruppe wird erzeugt */
            new Gruppe($values, $this->env);
            /**Templates gesetzt */
            $this->env->templateEngine()->assign('info', 'Gruppe wurde eingefügt.');
            /**action_list aufrufen */
            return $this->action_list($verid,$_REQUEST['rolle']);
        }
        catch(TuksException $e) {
            /** Fehlerbehandlung, Benutzer bekommt Hinweise auf falsche Angaben */
            $this->env->templateEngine()->assign('error', $e->getMessage());
            return $this->action_neu($verid, $tutorlogin , $kuerzel);
        }
    }  	
}


Page last modified on August 24, 2009, at 09:58 AM