u.a. für die Serienbrieferstellung benötige ich ein Zuordnung der Namen, so wie sie in der schueler.txt mit Umlauten, Leerzeichen etc. unmanipuliert liegen zu den von sophomorix generierten Userids (Posix-Feld “UNID”).
Bislang habe ich die Zuordnung immer über ein Skript vorgenommen, dass in einer DB-Tabelle die unmanipulierten Nutzerdaten enthält und aus der ldap-Datenbank mittels “LIKE”-Suche über Vor- und Nachnamen die Userid ausliest. Da kommt es natürlich häufiger zu Fehlern.
sophomorix-check generiert die Dateien sophomorix.add und sophomorix.ok mit den manipulierten Nutzerdaten (allerdings ohne Userid), die von sophomorix-add benutzt werden, um die Userid zu generieren und die Nutzer anzulegen. Dadurch ist mir weder möglich, die .add- und .ok-Dateien zur Verarbeitung in meinem Skript zu verwenden, noch die sophomorix-add so zu patchen, dass dort die Zuordnung vorgenommen wird.
Wenn Du aus deinem Schulverwaltungsprogramm die Schüler-IDs herausbekommst in
die schueler.txt, dann kannst hast du auch mit sophomorix importieren und hast somit eine
eindeutige Zuordnung. Vielleicht hilft dir das weiter
Das „Zuordnungsskript“ in PHP, das ich aktuell nutze, füge ich bei. Durch z.B. writeNames(‚5a‘); werden die Originalnamen der Schüler der Klasse 5a aus der Datei schueler.txt in das Posix-Account-Attribut „birthname“ geschrieben und zwar in der Form Vorname;Nachname.
Gruß
Andreas
<?php
/*
Author: Andreas Koch
Date: 20.07.2018
Usage: writeNames('klasse') schreibt für eine Gruppe die Originalnamen aus schueler.txt in das Attribut
birthname in der Form Vorname;Nachname
*/
function writeNames($klasse) {
$text = '';
// Verbindungsparameter anpassen
$verbindung = pg_connect("dbname=ldap user=xxxxxx") or die("Verbindung zur Datenbank LDAP fehlgeschlagen.");
$content = file("/etc/sophomorix/user/schueler.txt");
$result = pg_query("SELECT a.surname,a.firstname,d.birthday,d.id FROM posix_account AS a JOIN posix_account_details AS d ON a.id=d.id WHERE d.adminclass='" . pg_escape_String($klasse) . "' ORDER BY a.surname,a.firstname DESC");
while ($row = pg_fetch_assoc($result)) {
$matchbest = 0;
$matchstring = '';
$match = -1;
$string1 = $row['surname'] . " " . $row['firstname'];
$string2 = '';
// Maximal ähnlichen String aus schueler.txt zuordnen. Notwendige Matching-Bedingung: Geburtstdatum
foreach ($content as $key => $value) {
$string = explode(";", $value);
$string2 = $string[1] . " " . str_replace(" ", "", $string[2]);
$tmp = explode(".", $string[3]);
$bday = $tmp[2] . "-" . $tmp[1] . "-" . $tmp[0];
if ($bday == $row['birthday']) {
similar_text($string1, $string2, $matchnew);
if ($matchnew > $matchbest) {
$matchbest = $matchnew;
$match = $key;
$matchstring = $string2;
$writestring = $string[2] . ";" . $string[1];
}
}
}
$sql = "UPDATE posix_account_details SET birthname='" . str_replace("'", "\'", $writestring) . "' WHERE id='" . $row['id'] . "'";
pg_query($sql);
$text .= "<b>" . $string1 . "</b> -> <b>" . $matchstring . "</b> in " . $content[$match] . " (<b>" . round($matchbest) . "%</b>)<br/>";
}
pg_close($verbindung);
return $text;
}
?>
wäre es nicht viel sinnvoller in der schueler.txt einen unique
identifier einzuführen und dann diesen zum matchen zu verwenden? Dann
brauchst du dir auch über teach-in keine Gedanken mehr zu machen.
Aber genau ist doch die Schüler-ID aus dem Schulverwaltungsprogramm. Ich arbeite mit dieser Möglichkeit von sophomorix schon ein paar Jahre und muss sagen super. Alle Änderungen die einen Schüler betreffen, laden dann in sophomorix mit dem Export aus dem Schulverwaltungsprogramm.
Im Hinblick auf die Version 7 würde ich momentan nicht all zu viel Energie in neue „FeatureRequest“ investieren. Die bringt was LDAP betrifft vieles neues mit, damit wird vieles viel einfacher.
DESCRIPTION
Um den Sollzustand einfacher User vorzugeben werden diese in der Datei schueler.txt konfiguriert.
Leerzeichen in Namen und Klasse werden entfernt.
Klassenbezeichnung wird in Kleinbuchstaben umgewandelt
FELDER
Die folgenden Felder bilden eine Zeile, die durch Strichpunkte getrennt abgeschlosse werden:
Feld 1: Klasse des Users.
Feld 2: Nachname des Users
Feld 3: Vorname des Users
Feld 4: Geburtsdatum des user im Format dd.mm.yyyy
Feld 5: Eindeutiger Identifikationsstring des users der sich nicht ändert (Optional)
Zum Beispiel die Datenbank ID des Schulverwaltungsprogramms.
Feld 6: Abteilung (Optional, bisher nicht genutzt)
Du musst nur dafür sorgen, dass das Feld 5 die SchülerInnen-Nummer aus dem Verwaltungsprogramm enthält. Den Rest erledigt dann sophomorix mit dem nächsten Import.
In der schueler.txt muss es so aussehen:
5b;Nachname;Vorname;09.05.2007;8a189207-5d97f2e4-015d-9e23fc40-65a1;
…
Diese eindeutige ID findest du dann zb. in sophomorix-user wieder als Unid.
In der schueler.txt muss es so aussehen:
5b;Nachname;Vorname;09.05.2007;8a189207-5d97f2e4-015d-9e23fc40-65a1;
Diese eindeutige ID findest du dann zb. in sophomorix-user wieder als Unid.
Ich bin gerade auf diesen alten Thread gestoßen, weil ich sowas in der Art brauche. Das zusätzliche eintragen der ID funktioniert soweit super, sogar nachträglich zu existierenden Schülern. Die ID landet wunderbar in der postgres-Datenbank, aber wenn ich mit smbldap-usershow die Daten Abfrage, taucht die ID nicht auf. Weiß jemand, wie man die unid per ldap abfragt ?
Hi Thorsten,
danke für die Antwort, aber ich brauch’s per ldap. Es geht um die Anbindung ans Webuntis, da muss man ein ldap-Feld bereitstellen, das der eindeutigen Benutzerzuordnung dient. Unsere Stundenplaner pflegen schon immer die ID aus dem Schulverwaltungsprogramm mit ein und ich habe die jetzt auch als unid im sophomorix.
Jetzt muss ich webuntis sagen, mit welchem ldap-Feld er seine “externid” vergleichen soll - dafür brauche ich die unid als ldap-Wert.
Gruß
Sascha
das Feld wird nicht in den LDAP Baum eingepflegt. Du kannst es daher an
dieser Stelle nicht verwenden. Bei mir ist das aber auch nicht nötig. Da
ich die gleiche Schülerdatei verwende für den Import in Webuntis und
linuxmuster kann ich relativ streßfrei über sn givenName den Vor und
Nachnamen vergleichen. Hierbei kommt es eigentlich in der Regel nicht zu
falschen Zuordnungen. Ausnahmen gibt es nur bei Namensgleichheit, das
muss man aber ja in jedem Schülerleben lediglich einmal anfassen.