Skip to content

ahewer/exercise-group-registration

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Einleitung

Das Framework besteht aus zwei Komponenten: Die Webkomponente erlaubt das Erstellen einer Webseite, auf der sich Studenten zum Übungsbetrieb anmelden können. Die Gradle-Komponente benutzt die Registrierungen, um eine Übungsgruppeneinteilung zu erstellen.

Konfigurationsdateien

Folgende Dateien erlauben die Konfiguration des Frameworks:

.
├── gradle
│   └── resources
│   	└── configuration.json
└── web
    ├── content
    │   └── description.md
    │   └── configuration.json
    └── style
        └── style.css
  • configuration.json : Diese JSON Datei enthält die gesamte Konfiguration des Frameworks.
  • description.md : In dieser Markdown Datei können Informationen zu Anmeldung verfasst werden, die auf der Webseite angezeigt werden.
  • style.css : Ein CSS Stylesheet, um die Webseite zu formatieren.

Schritt für Schritt Konfiguration

Dieser Abschnitt beschreibt die Beispielkonfiguration des Frameworks, die sich in example_configuration/configuration.json befindet.

Anlegen von Gruppen

Der groups Eintrag in der JSON Datei enthält eine Liste aller Gruppen. Ein Gruppeneintrag enthält die folgenden Informationen:

{
    "id" : "Gruppe_1",
    "location" : "SR 3",
    "time" : "Montag 12:15 - 13:45",
    "label": "Gruppe 1",
    "capacity": 15
}
  • id : Eine eindeutige ID für die Gruppe.
  • location : Der Ort der Übung.
  • time : Termin der Übung.
  • label : Gruppenbezeichnung, der auf der Webseite und in den generierten Dateien angezeigt wird.
  • capacity : Die Kapazität der Gruppe, wird bei der Optimierung der Gruppeneinteilung verwendet.

Die Beispielkonfiguration enthält 5 Gruppen:

"groups" :
[
    {
        "id" : "Gruppe_1",
        "location" : "SR 3",
        "time" : "Montag 12:15 - 13:45",
        "label": "Gruppe 1",
        "capacity": 15
    },
    {
        "id" : "Gruppe_2",
        "location" : "SR 2",
        "time" : "Montag 12:15 - 13:45",
        "label": "Gruppe 2",
        "capacity": 15
    },
    {
        "id" : "Gruppe_3",
        "location" : "SR 1",
        "time" : "Montag 14:15 - 15:45",
        "label": "Gruppe 3",
        "capacity": 15
    },
    {
        "id" : "Gruppe_4",
        "location" : "HS 1",
        "time" : "Montag 10:15 - 11:45",
        "label": "Gruppe 4",
        "capacity": 15
    }
]

Gruppenbeschriftung

Hinter dem Gruppenlabel können zusätzliche Informationen angezeigt werden. Dies kann mit groupLabels konfiguriert werden:

"groupLabels" : ["location", "time"]

Diese Konfiguration generiert zum Beispiel für Gruppe 1 die folgende Gruppenbezeichnung auf der Webseite:

Gruppe 1 ( SR3, Montag 12:15 - 13:45 )

Auswahleinstellungen

Bei der Anmeldung zu den Gruppen müssen Studenten ihre Präferenzen angeben. Mögliche Präferenzen werden als Liste im choices Eintrag festgelegt. Eine Präferenzdefinition besteht aus zwei Teilen:

{
    "label" : "unmöglich",
    "value" : 0
}
  • label : Die angezeigte Bezeichnung für die Präferenz während der Anmeldung.
  • value : Der interne Wert, der bei der Optimierung benutzt wird.

Der Wert 0 bedeutet, dass eine Teilnahme nicht möglich ist. Höhere Werte bedeuten eine höhere Präferenz.

Die Beispielkonfiguration enthält 4 mögliche Präferenzen:

"choices" :
[
    {
        "label" : "unmöglich",
        "value" : 0
    },
    {
        "label" : "passt notfalls",
        "value" : 1
    },
    {
        "label" : "passt",
        "value" : 2
    },
    {
        "label" : "passt sehr gut",
        "value" : 3
    }
]

Registrierungseinschränkungen

Es ist möglich, Einschränkungen für die Gruppenanmeldungen festzulegen. Dies kann im `groupConditions` Eintrag getan werden, der eine Liste an Bedingungen enthält. Momentan werden zwei Bedingungstypen unterstützt:

Mindestanzahl an ausgewählten Gruppen

{
    "type" : "atLeast",
    "amount" : 2
}

"amount" stellt die Gruppenanzahl dar, die der Student mindestens ausgewählt haben muss.

Festlegen von Gruppen, von denen mindestens eine ausgewählt werden muss

{
    "type": "atLeastOne",
    "of" : ["Gruppe_1", "Gruppe_4"]
}

`of` enthält eine Liste von Labels, die zu Gruppen gehören, von denen der Student mindestens eine auswählen muss.

In der Beispielkonfiguration werden beide Bedingungen genutzt:

"groupConditions" :
[
    {
        "type" : "atLeast",
        "amount" : 2
    },
    {
        "type": "atLeastOne",
        "of" : ["Gruppe_1", "Gruppe_4"]
    }
]

Einstellen der Anmeldedaten

Persönliche Daten, die der Student angeben muss, werden als Liste im studentData Feld festgelegt. Ein Eintrag in dieser Liste hat folgende Form:

{ "name": "Vorname", "type": "text" }
  • name : Bezeichnung für den Eintrag.
  • type : Der HTML-Eingabetyp, der verwendet werden soll.

Die Beispielkonfiguration legt folgende Daten fest:

"studentData" :
[
    { "name": "Vorname", "type": "text" },
    { "name": "Nachname", "type": "text" },
    { "name": "Geburtsdatum", "type": "date" },
    { "name": "E-Mail", "type": "email" },
    { "name": "Matrikelnummer", "type": "number" },
    { "name": "Fach", "type": "text" },
    { "name": "Fachsemester", "type": "number" },
    { "name": "Studiensemester", "type": "number" }
]

Eines dieser Eingabedaten muss als eindeutige Identifikation des Studenten in der Datenbank verwendet werden. Dies geschieht im studentID Feld der JSON Datei. In unserer Beispielkonfiguration benutzen wir die Matrikelnummer als ID:

"studentId" : "Matrikelnummer"

Konfiguration für Erzeugung der Punktelisten

Die gradle Komponente kann genutzt werden, um für die einzelnen Übungsgruppen Punktelisten im CSV Format zu erstellen, die später von den Übungsgruppenleitern ausgefüllt werden können. Folgende Informationen können im exerciseSheets Eintrag festgelegt werden:

  • label: Bezeichnung der Übungsblätter, die durchnummeriert wird
  • exerciseSheetAmount: Anzahl der Übungsblätter
  • studentData: Studentendaten, die in der CSV Datei auftauchen

Die Beispielkonfiguration legt folgende Einstellungen fest:

"exerciseSheets" : {
    "label" : "Blatt",
    "exerciseSheetAmount" : 10,
    "studentData" : [
        "Vorname", "Nachname", "Matrikelnummer"
    ]
}

Ein Ausschnitt der erzeugten Tabelle sieht dann wie folgt aus:

Vorname Nachname Matrikelnummer Blatt 1 Blatt 2
Max Mustermann 123456 0 0

Konfiguration für Notenliste

Ähnlich wie bei den Punktelisten, kann die gradle Komponente auch eine Notenliste im CSV Format generieren. Folgende Einstellungen sind im gradeSheet Eintrag möglich:

  • studentData: Studentendaten, die in der Tabelle erscheinen sollen
  • gradeData: Noteninformationen, die in die Tabelle eingetragen werden

Die Beispielkonfiguration

"gradeSheet" : {
    "studentData" : [
        "Vorname", "Nachname", "Matrikelnummer", "Geburtsdatum"
    ],
    "gradeData" : [
        "Note", "Bezeichnung"
    ]
}

würde eine Tabelle im folgenden Format erzeugen:

Vorname Nachname Matrikelnummer Geburtsdatum Note Bezeichnung
Max Mustermann 123456 01.01.1998 1.0 sehr gut

Einrichtung der Webseite

Voraussetzungen

Die Webkomponente hat folgende Voraussetzungen:

  • PHP >= 5.0
  • SQLite Unterstützung in PHP
  • Webserver mit .htaccess Unterstützung

Einrichtung des Ausgabeverzeichnisses

Die Anmeldungen werden in einer SQLite Datenbank im Order output gespeichert. Es ist wichtig, dass dieser Ordner geschützt wird, um einen Zugriff auf sensible Daten zu verhindern. Dies kann mit .htaccess erreicht werden. Unter Linux würden wir den Schutz folgendermaßen einrichten:

Zuerst erzeugen wir das Ausgabeverzeichnis

mkdir output

Nun legen wir die .htaccess Datei an und blockieren jeglichen Zugriff auf den Ordner:

cd output
touch .htaccess
echo "Require all denied" >> .htaccess

Die erzeugte .htaccess hat somit den folgenden Inhalt:

Require all denied

Bei Aufrufen der Website wird immer überprüft, ob der Ordner output existiert und wird bei Bedarf angelegt. Fernerhin wird dann auch eine .htaccess Datei generiert, die wie oben jeglichen Zugriff auf den Ordner blockiert.

Kopieren der nötigen Dateien

Nachdem die Konfiguration abgeschlossen ist, werden folgende Dateien auf den Webserver kopiert, wobei die Verzeichnisstruktur erhalten bleiben muss:

.
├── content
│   ├── config.json
│   └── description.md
├── index.php
├── lib
│   ├── Builder.inc.php
│   ├── Database.inc.php
│   ├── FormBuilder.inc.php
│   ├── FormBuilderDisplay.inc.php
│   ├── FormBuilderLocked.inc.php
│   ├── SQLiteWriter.inc.php
│   ├── Verifier.inc.php
│   └── thirdparty
│       ├── LICENSE.txt
│       └── Parsedown.php
└── style
    └── style.css

Die Seite ist nun erreichbar und Studenten können sich für die Übungsgruppen anmelden. Die Anmeldungen werden in der Datenbank

.
└── output
    └── database.db

gespeichert.

Gradle

Voraussetzungen

  • Java Version >=7

Vorbereitungen

Um das Gradle Framework nutzen zu können, führen wir folgende Schritte durch: Wir laden zunächst die Datei database.db von unserem Webserver herunter und platzieren sie in:

.
└── gradle
    └── resources

Danach speichern wir dort auch die Konfigurationsdatei configuration.json ab.

Erzeugung der Ergebnisse

Mit Hilfe des Befehls

./gradlew build

unter Linux oder

gradlew.bat build

unter Windows werden die Ergebnisdateien erstellt:

Punktelisten

Punktelisten im CSV Format, die von den einzelnen Übungsgruppenleitern ausgefüllt werden können, befinden sich im Ordner:

.
└── gradle
    └── build
        └── pointLists

Notenliste

Eine CSV Datei, die als Notenliste später dienen kann, wird hier abgespeichert:

.
└── gradle
    └── build
        └── gradeList
            └── gradeSheet.csv

Gruppeneinteilungen

Eine Markdown Datei, die die gesamte Gruppeneinteilungen beinhaltet, befindet sich in der Datei

.
└── gradle
    └── build
        └── groupsMarkdown
            └── groups.md

Diese Markdown Datei kann zum Beispiel mit Hilfe des Tools pandoc in andere Formate, wie PDF oder HTML umgewandelt werden.

Analyse der Ergebnisse

Der Aufruf

./gradlew createAnalysisMarkdown

erstellt die Markdown Datei

.
└── gradle
    └── build
        └── analysis
            └── markdown.md

die zahlreiche Informationen zur Einteilung enthält, wie zum Beispiel die Auslastung der einzelnen Gruppen oder Studenten, die keiner Gruppe zugeordnet werden konnten.

Manuelle Anpassung der Gruppeneinteilung

In bestimmten Fällen ist es nötig, dass die Gruppeneinteilung für manche Studenten manuell angepasst werden muss. Diese manuelle Zuteilung kann in der Datei

.
└── gradle
    └── build
        └── overrides.json

festgelegt werden. Diese JSON Datei enthält eine Liste von Einträgen:

[
    { "id" : 123456, "group" : "Gruppe_1" },
    { "id" : 223456, "group" : "Gruppe_2" }
]

id ist die ID des Studenten, dessen Gruppe angepasst werden soll. group ist die ID der Gruppe, die dem Studenten zugeordnet werden soll.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors