Zuordnung Name aus schuler.txt <-> Userid (Sophomorix)

Hallo,

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.

Habt ihr eine Lösungsidee?

Viele Grüße
Andreas

Hallo Andreas,

mach mal
sophomorix-print --help

Vielleicht kann man damit auch die ids rausholen.
Ergebnisse liegen in /var/lib/sophomorix/print-data

LG

Holger

sophomorix-print --help

Führt leider nicht weiter, da der Befehl ebenfalls auf den bereits manipulierten Datensätzen arbeitet.

Hallo Andreas!

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

Beste Grüße

Thorsten

Hallo Thorsten,

Das ist ein guter Tipp.

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;
	}
	
?>

Hallo Andreas,

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.

Grüße
Björn

Hallo Björn!

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.

Beste Grüße

Thorsten

Wie funktioniert das in sophomorix und in welcher lmn-Version?

Hallo WeitDahinten!

man schueler.txt

liefert:

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.

Beste Grüße

Thorsten

Vielen Dank Thorsten!

Ich hab es ausprobiert - hat aber bei mir nicht funktioniert.
(linuxmuster.net 6.2.9 / Codename Babo / sophomorix2 Version: 2.4.59-2)

sophomorix-add:

generate_add_file: Looking for users to be added:

Mueller;Jens;14.08.2004::—::—::—::—::10123
smbldap-userlist:
10054 |muelleje

Bei Dir geht es?

Hallo WeitDahinten,

ich glaube du hast da was falsch verstanden:

In der schueler.txt muss es so aussehen:
5b;Nachname;Vorname;09.05.2007;8a189207-5d97f2e4-015d-9e23fc40-65a1;

Dabei ist: 8a189207-5d97f2e4-015d-9e23fc40-65a1 die eindeutige ID des
Schülers.

Diese eindeutige ID findest du dann zb. in sophomorix-user wieder als Unid.

Grüße Björn

1 „Gefällt mir“

Danke, das probiere ich mal.

Hallo Björn!

Danke, besser hätte ich es auch nicht sagen können, darum ein …

Beste Grüße

Thorsten

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.

Hi Björn,

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 ?

Gruß
Sascha

Hallo Sascha!

Das nicht, aber probiere doch mal:

sophomorix-user -u USERLOGIN

Beste Grüße

Thorsten

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

Hallo 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.

Grüße
Björn