v7-Server: AD erweitern um Gruppe "Lehrer der Klasse XY"

Hallo.
Ich wüsste gerne, ob es (relativ einfach) möglich ist, die AD-Struktur um eine Gruppe zu erweitern, die die Möglichkeit bietet, sämtliche Fachlehrer einer Klasse abzurufen? Diese Information steht über das Stundenplanprogramm (bei uns Untis) ja zur Verfügung und es wäre für viele Anwendungen (sei es moodle, MDM etc.) extrem hilfreich. Unter Untis könnte man problemlos eine txt-Datei exportieren, die dann auf dem v7-Server wieder importiert werden müsste … ist etwas in diese Richtung angedacht? Das wäre wirklich eine super Sache…

Viele Grüße,
Michael

Hallo Michael,

Das müsste mit einer LDAP Abfrage gehen, so in der Art:
(&(memberof=<DN der Klasse>)(sophomorixRole=teacher))

VG, Dorian

Hi Dorian,
das Problem ist ja, dass der Server diese Zuordnung bisher nicht kennt!? Es gibt ja nirgendwo eine Zuordnung wie:

Klasse 5a: 
  Klassenlehrer 1
  Fachlehrer 2
  Fachlehrer 3...
  Schüler 1
  Schüler 2 ...

und gleiches dann auch für Oberstufenkurse (mit nur einem Lehrer).
Wenn man das kombinieren und abrufen könnte, wäre das super, meine ich…

Nachtrag … ich habe etwas mit ldapsearch gesucht und z.B. dies gefunden:
ldapsearch -b ... '(cn=5a)' liefert imho immerhin schon mal alle User, die sich via WebUI in die 5a eingetragen haben, richtig?

Schüler als sophomorixMembers und eingetragenen Lehrer als sophomorixAdmins – gleiches liefert übrigens auch sophomorix-class -c 5a -v -i

Damit könnte man notfalls klar kommen, doch eine automatische Zuweisung wäre zweifellos eleganter…

Viele Grüße,
Michael

Na klar… Lehrer können doch in der WebUI unter „einschreiben“ Klassen beitreten, oder nicht?
VG, Dorian

Hallo Michael,

alternativ kannst Du auch ein Projekt für jede Klasse anlegen, das lässt
sich dann auch ganz gut skripten.

Beste Grüße

Jörg

Das Problem ist, dass diese Gruppe (bzw dieses Objekt) auch im MDM abgerufen werden muss. Die Klassenräume sollen da fertig vorbereitet sein
Es muss also ein eine Abfrage per LDAP Gruppe möglich sein

Hallo Dorian,

Könnten sie können. Können aber manche nicht. Und viele (bei uns die meisten), die könnten, machen es nicht.
Es wäre schon geschickt, durch einen Import aus Untis diese Zuordnung jährlich aktuell zu haben.

Viele Grüße,
Jochen

Hallo Jochen!

Genau – so sehe ich das auch! Ein Import aus Untis (was vermutlich eh die meisten verwenden?) und man hätte die Zuordnung, die man sehr gut weiterverwenden kann!

Untis macht den Export in der Datei GPU001.txt. Darin befinden sich Zeilen wie:
1;"5d";"Smb";"EN";"K5a";1;4;;

Der Aufbau dieser Datei ist sogar dokumentiert – und zwar z.B. hier:

Man hätte damit also die Zuordnung: Alle Fachlehrer → Klasse in einer Textdatei!

Ein Problem dabei ist aber, dass hier nur die Abkürzungen der Lehrer stehen! In der Datei GPU004.txt wird dieses Problem „gelöst“, da sich dort die Zuordnung Lehrerkürzel ↔ Lehrername befindet. Damit hat man aber immernoch nicht den eindeutigen Login des Kollegen …

Das ganze kommt mir relativ einfach lösbar vor, aber ich weiß nicht, wie man das AD sinnigerweise ergänzen könnte, damit z.B. eine neue Gruppe „Fachlehrer“ oder so zur Verfügung steht und per ldapsearch bzw MDM → LDAP abgerufen werden kann?

Vielen Grüße,
Michael

Hallo Michael,

aus diesem Export kannst Du mithilfe einer Tabellenkalkulation recht simpel Sophomorix-Befehle generieren, die für jede Klasse ein Projekt mit allen LuL anlegen. Für die Zuordnung Kürzel<->Login legst Du eine eigene Tabelle an und verwendest dann die Lookup-Funktionen.

Beste Grüße

Jörg

Hi,

Ich verstehe immernoch nciht, warum.ihr unbedingt das ad verändern, bzw. Projekte anlegen wollt… Packt die Lehrer doch einfach in die Klassen…

VG, Dorian

Hi. Also ganz konrket … mir geht es dabei um unser MDM. Hier siehst du einen Screenshot für die Lehrerkonsole:

Dort ist es möglich, Schüler und Lehrer einzutragen – ersteres ist ein LDAP/AD-Objekt aber letzteres nicht (und müsste daher in jedem Schuljahr neu für jede Klasse/Gruppe mühsam manuell zusammengeklickt werden). Du siehst es unter Unterrichtssteuerung → 2. Screenshot.

Jetzt klar, warum die Fachlehrer einer Klasse für so einen Fall getrennt abgerufen werden müssen?

Viele Grüße,
Michael

Mir ist schon klar, weshalb du die Lehrer einzeln abrufen willst, aber nicht warum es nicht ein Filter wie dieser hier tut:

(&
    (memberOf=CN=test,OU=test,OU=Students,OU=default-school,OU=SCHOOLS,DC=linuxmuster,DC=lan)
    (sophomorixRole=teacher)
)

Dieser Filter gibt alle Lehrer der Klasse test zurück, das ist doch was du brauchst, oder nich?

VG, Dorian

Schon klar – nur ist es so: in der MDM-Software kann ich so einen Ausdruck nicht verwenden. Stattdessen sieht das da einfach so aus:

Weitere Filter sind dort also nicht möglich … es würde also nur funktionieren, wenn die Gruppe bereits vorhanden wäre. Dann jedoch würde so eine (einmalige) Einstellung die Versetzung zum neuen Schuljahr überleben, weil die Gruppe mit anderen Benutzern gefüllt wurde.

Schritt 1: Aus GPU001.txt und GPU004.txt eine neue Datei erzeugen mit diesem Python3-Script:
cat create_csv.py:

import csv
import codecs

ENCODING = 'ISO-8859-14'


def findName(short, longs):
    for long in longs:
        if short == long[0]:
            longname = long[1].replace(' ', '').replace('-', '')
            longname = longname.split(';')
            if len(longname) <= 1:
                longname = longname[0]
            else:
                longname = longname[1] + ' ' + longname[0]
            return longname.replace("ä", "ae").replace("Ä", "Ae").replace("ö", "oe").replace("Ö", "oe").replace("ü","ue").replace("Ü", "ue").replace('ß', 'ss')
    return ''


with codecs.open('GPU004.TXT', 'r', ENCODING) as csvfile:
    with codecs.open('GPU001.TXT', 'r', ENCODING) as coursefile:
        with open('teachers.csv', 'w') as final:
            courses = list(csv.reader(coursefile, delimiter=';'))
            names = list(csv.reader(csvfile, delimiter=';'))
            li = []
            for course in courses:
                longname = findName(course[2], names)
                li.append(course[1] + ';' + longname + ';' + course[3])
            li = list(set(li))
            for l in li:
                final.write(l + '\r\n')

Das legt die Datei teachers.csv an, mit der man weiterarbeiten kann! In dieser Datei steht dann nicht mehr das Kürzel sondern der volle Lehrername, den man nun wiederum auf dem v7-Server suchen kann.

Das ist dann Schritt 2

Schon mal ein kurzer Nachtrag: Der Weg über die Projekte könnte doch funktionieren! Ich habe es gerade im MDM nachgesehen und festgestellt, dass man dort bei den o.g. Gruppen per LDAP/AD auch die Projekte findet. Also diesen Weg verfolge ich mal weiter … to be continued.