View | Details | Raw Unified | Return to bug 41739
Collapse All | Expand All

(-)a/doc/errata/staging/ucs-school-umc-exam.yaml (-1 / +1 lines)
Lines 8-14 desc: | Link Here
8
 * It is now possible to run hooks on the DC master before the creation
8
 * It is now possible to run hooks on the DC master before the creation
9
   of exam users (Bug #44225).
9
   of exam users (Bug #44225).
10
 * Some UCR variables have not been cleaned up after the exam mode has been finished.
10
 * Some UCR variables have not been cleaned up after the exam mode has been finished.
11
   This problem has bow been fixed (Bug #44109).
11
   This problem has been fixed (Bug #44109).
12
 * The time needed to create exam users has been reduced (Bug #43019).
12
 * The time needed to create exam users has been reduced (Bug #43019).
13
 * The term "UCS@school" has been removed from some texts for branding purposes (Bug #44543).
13
 * The term "UCS@school" has been removed from some texts for branding purposes (Bug #44543).
14
bug: [44225, 44109, 43019, 44543]
14
bug: [44225, 44109, 43019, 44543]
(-)a/doc/manual/ucsschool-import-handbuch-4.2.xml (-33 / +39 lines)
Lines 64-70 Link Here
64
		</para>
64
		</para>
65
		<para>
65
		<para>
66
			Über eigene Python-Plugins kann die Schnittstelle erheblich erweitert werden. Dies
66
			Über eigene Python-Plugins kann die Schnittstelle erheblich erweitert werden. Dies
67
			umfasst sowohl die Unterstützung für zusätzliche Dateiformat als auch die Implementierung von
67
			umfasst sowohl die Unterstützung für zusätzliche Dateiformate als auch die Implementierung von
68
			zusätzlichen Automatismen, die während des Imports greifen.
68
			zusätzlichen Automatismen, die während des Imports greifen.
69
		</para>
69
		</para>
70
		<para>
70
		<para>
Lines 122-128 Link Here
122
				</listitem>
122
				</listitem>
123
				<listitem>
123
				<listitem>
124
					<simpara>
124
					<simpara>
125
						Je nach Konfiguration werden die Werte des Eingabedatensatzes nach dem Einlesen automatisch geprüft, modifiziert und/oder erweitert. Darunter fällt z.B. auch die automatische Zuweisung eines eindeutigen Benutzernamens oder die Generierung einer Mail-Adresse.
125
						Je nach Konfiguration werden die Werte des Eingabedatensatzes nach dem Einlesen automatisch geprüft, modifiziert und/oder erweitert. Darunter fällt z.B. auch die automatische Zuweisung eines eindeutigen Benutzernamens oder die Generierung einer E-Mail-Adresse.
126
					</simpara>
126
					</simpara>
127
				</listitem>
127
				</listitem>
128
				<listitem>
128
				<listitem>
Lines 358-368 optional arguments: Link Here
358
			<title>JSON-Konfigurationsformat</title>
358
			<title>JSON-Konfigurationsformat</title>
359
			<para>
359
			<para>
360
				Das JSON-Format erlaubt Daten in verschachtelten Strukturen zu speichern, und ist sowohl von Computern als auch Menschen zuverlässig zu lesen und zu schreiben.
360
				Das JSON-Format erlaubt Daten in verschachtelten Strukturen zu speichern, und ist sowohl von Computern als auch Menschen zuverlässig zu lesen und zu schreiben.
361
				Nach dem Editieren einer JSON-Datei kann ihre syntaktische Korrektheit mit Hilfe einer Webseite zur JSON Validierung (z.B. <uri>http://zaach.github.com/jsonlint/</uri>) oder eines Kommandozeilenprogramms überprüft werden:
361
				Nach dem Editieren einer JSON-Datei kann ihre syntaktische Korrektheit mit Hilfe einer Webseite zur JSON Validierung oder eines Kommandozeilenprogramms überprüft werden:
362
				<programlisting>
362
				<programlisting>
363
univention-install libjson-xs-perl
363
					python -m json.tool < my_config.json
364
365
cat my_config.json | json_xs
366
				</programlisting>
364
				</programlisting>
367
			</para>
365
			</para>
368
			<para>
366
			<para>
Lines 375-390 cat my_config.json | json_xs Link Here
375
			</para>
373
			</para>
376
			<note>
374
			<note>
377
				<simpara>
375
				<simpara>
378
					Eine Kurzreferenz aller Konfigurationsschlüssel findet sich auf dem DC Master im Verzeichnis <filename class="directory">/usr/share/doc/ucs-school-import/</filename>.
376
					Eine Kurzreferenz aller Konfigurationsschlüssel findet sich auf dem Domänencontroller Master im Verzeichnis <filename class="directory">/usr/share/doc/ucs-school-import/</filename>.
379
				</simpara>
377
				</simpara>
380
			</note>
378
			</note>
381
			<section id="configuration:json_format:global">
379
			<section id="configuration:json_format:global">
382
				<title>Globale Konfiguration</title>
380
				<title>Globale Konfiguration</title>
383
				<caution>
381
				<caution>
384
					<simpara>
382
					<simpara>
385
						In den folgenden Tabellen kommt es layoutbedingt zu Freizeichen und Umbrüchen in Variablen- und Schlüsselnamen.
383
						In den folgenden Tabellen kommt es layoutbedingt zu Leerzeichen und Umbrüchen in Variablen- und Schlüsselnamen.
386
						 Diese müssen in den Konfigurationsdateien bzw. an der Kommandozeile entfernt werden.
384
						 Diese müssen in den Konfigurationsdateien bzw. an der Kommandozeile entfernt werden.
387
						<emphasis>Keines</emphasis> der Schlüsselwörter enthält ein Freizeichen oder einen Schrägstrich.
385
						<emphasis>Keines</emphasis> der Schlüsselwörter enthält ein Leerzeichen oder einen Schrägstrich.
388
					</simpara>
386
					</simpara>
389
				</caution>
387
				</caution>
390
				<table id="table:global_configuration">
388
				<table id="table:global_configuration">
Lines 533-539 cat my_config.json | json_xs Link Here
533
<!-- csv:incell-delimiter -->
531
<!-- csv:incell-delimiter -->
534
							<row>
532
							<row>
535
								<entry morerows="1"><varname>csv:incell- \ delimiter</varname></entry>
533
								<entry morerows="1"><varname>csv:incell- \ delimiter</varname></entry>
536
								<entry>Dieses Objekt enthält Informationen darüber, welches Zeichen <emphasis>innerhalb</emphasis> einer Zelle zwei Daten trennt und kann Z.B. bei der Angabe von mehreren Telefonnummern verwendet werden. Es kann ein Standard (<literal>default</literal>) und  pro &ucsUDM;-Attribut eine Konfiguration (mit dem Namen des Schlüssels in <link linkend="configuration:json_format:userimport:csv:mapping"><literal>csv:mapping</literal></link>) definiert werden.</entry>
534
								<entry>Dieses Objekt enthält Informationen darüber, welches Zeichen <emphasis>innerhalb</emphasis> einer Zelle zwei Daten trennt und kann z.B. bei der Angabe von mehreren Telefonnummern verwendet werden. Es kann ein Standard (<literal>default</literal>) und  pro &ucsUDM;-Attribut eine Konfiguration (mit dem Namen des Schlüssels in <link linkend="configuration:json_format:userimport:csv:mapping"><literal>csv:mapping</literal></link>) definiert werden.</entry>
537
							</row>
535
							</row>
538
							<row>
536
							<row>
539
								<entry align="right">Standard (<classname>object</classname>): <literal>{"default": ..}</literal></entry>
537
								<entry align="right">Standard (<classname>object</classname>): <literal>{"default": ..}</literal></entry>
Lines 566-571 cat my_config.json | json_xs Link Here
566
							<row>
564
							<row>
567
								<entry morerows="1"><varname>scheme:email</varname></entry>
565
								<entry morerows="1"><varname>scheme:email</varname></entry>
568
								<entry>Schema aus dem die Email-Adresse erzeugt werden soll.</entry>
566
								<entry>Schema aus dem die Email-Adresse erzeugt werden soll.</entry>
567
								<!-- TODO: Das "Schema"-Format sollte irgendwo erklärt werden. -->
569
							</row>
568
							</row>
570
							<row>
569
							<row>
571
								<entry align="right">Standard (<classname>string</classname>): <literal>"&lt;firstname&gt;[0].&lt;lastname&gt;@&lt;maildomain&gt;"</literal></entry>
570
								<entry align="right">Standard (<classname>string</classname>): <literal>"&lt;firstname&gt;[0].&lt;lastname&gt;@&lt;maildomain&gt;"</literal></entry>
Lines 598-604 Zu den oben beschriebenen Ersetzungen kommen noch zwei weitere hinzu: <literal>[ Link Here
598
<!-- scheme:username:default -->
597
<!-- scheme:username:default -->
599
							<row>
598
							<row>
600
								<entry morerows="1"><varname>scheme: \ username: \ default</varname></entry>
599
								<entry morerows="1"><varname>scheme: \ username: \ default</varname></entry>
601
								<entry>Schema aus dem der Benutzername erzeugt werden soll, wenn kein Schema für speziell für diesen Benutzertyp existiert.</entry>
600
								<entry>Schema aus dem der Benutzername erzeugt werden soll, wenn kein Schema speziell für diesen Benutzertyp existiert.</entry>
602
							</row>
601
							</row>
603
							<row>
602
							<row>
604
								<entry align="right">Standard (<classname>string</classname>): <literal>"&lt;:umlauts&gt;&lt;firstname&gt;[0].&lt;lastname&gt;[COUNTER2]"</literal></entry>
603
								<entry align="right">Standard (<classname>string</classname>): <literal>"&lt;:umlauts&gt;&lt;firstname&gt;[0].&lt;lastname&gt;[COUNTER2]"</literal></entry>
Lines 633-638 Zu den oben beschriebenen Ersetzungen kommen noch zwei weitere hinzu: <literal>[ Link Here
633
<option>-m</option>
632
<option>-m</option>
634
<option>--no-delete</option></literallayout></entry>
633
<option>--no-delete</option></literallayout></entry>
635
								<entry>Wenn auf <literal>true</literal> gesetzt, werden keine Benutzer gelöscht, oder nur solche für die es in den Eingabedaten <emphasis>explizit</emphasis> vermerkt ist. Dies kann genutzt werden, um eine Änderung an &ucsUAS;-Benutzern vorzunehmen, ohne einen vollständigen Soll-Zustand zu übergeben.</entry>
634
								<entry>Wenn auf <literal>true</literal> gesetzt, werden keine Benutzer gelöscht, oder nur solche für die es in den Eingabedaten <emphasis>explizit</emphasis> vermerkt ist. Dies kann genutzt werden, um eine Änderung an &ucsUAS;-Benutzern vorzunehmen, ohne einen vollständigen Soll-Zustand zu übergeben.</entry>
635
								<!-- TODO: mention more explicit that this can be used to just add some users? -->
636
							</row>
636
							</row>
637
							<row>
637
							<row>
638
								<entry align="right">Standard (<classname>bool</classname>): <literal>false</literal></entry>
638
								<entry align="right">Standard (<classname>bool</classname>): <literal>false</literal></entry>
Lines 648-654 Zu den oben beschriebenen Ersetzungen kommen noch zwei weitere hinzu: <literal>[ Link Here
648
<!-- output:new_user_passwords -->
648
<!-- output:new_user_passwords -->
649
							<row>
649
							<row>
650
								<entry morerows="1" id="configuration:json_format:userimport:output:new_user_passwords"><varname>output:new_ \ user_passwords</varname></entry>
650
								<entry morerows="1" id="configuration:json_format:userimport:output:new_user_passwords"><varname>output:new_ \ user_passwords</varname></entry>
651
								<entry>Diese Variable definiert den Pfad zur CSV-Datei, in die die Passwörter neuer Benutzer geschrieben werden. Auf den Dateinamen wird die Python-Funktion <methodname>datetime.datetime.strftime()</methodname> angewandt. Wenn ein <foreignphrase>Python-Format-String</foreignphrase><footnote><para><foreignphrase>Python Format-String</foreignphrase> Dokumentation: <ulink url="https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior"/></para></footnote> in ihm vorkommt, wird dieser umgewandelt (siehe Beispiel <link linkend="configuration:json_format:userimport:output:user_import_summary"><literal>output:user_import_summary</literal></link>).</entry>
651
								<entry>Diese Variable definiert den Pfad zur CSV-Datei, in die Passwörter neuer Benutzer geschrieben werden. Auf den Dateinamen wird die Python-Funktion <methodname>datetime.datetime.strftime()</methodname> angewandt. Wenn ein <foreignphrase>Python-Format-String</foreignphrase><footnote><para><foreignphrase>Python Format-String</foreignphrase> Dokumentation: <ulink url="https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior"/></para></footnote> in ihm vorkommt, wird dieser umgewandelt (siehe Beispiel <link linkend="configuration:json_format:userimport:output:user_import_summary"><literal>output:user_import_summary</literal></link>).</entry>
652
							</row>
652
							</row>
653
							<row>
653
							<row>
654
								<entry align="right">Standard (<classname>string</classname>): nicht gesetzt</entry>
654
								<entry align="right">Standard (<classname>string</classname>): nicht gesetzt</entry>
Lines 738-744 Muss zwingend entweder in einer Konfigurationsdatei oder an der Kommandozeile ge Link Here
738
		</section>
738
		</section>
739
739
740
		<section id="configuration:default_key">
740
		<section id="configuration:default_key">
741
			<title>"default" Schlüssel</title>
741
			<title>"default"-Schlüssel</title>
742
			<para>
742
			<para>
743
				Einige Einstellungen erlauben das Setzen von verschiedenen Werten, je nach Rolle des Benutzers, der gerade importiert wird.
743
				Einige Einstellungen erlauben das Setzen von verschiedenen Werten, je nach Rolle des Benutzers, der gerade importiert wird.
744
				In einem solchen Fall gibt es immer den Schlüssel <literal>default</literal>, der automatisch verwendet wird, wenn es keinen Schlüssel in der Konfiguration für die betroffene Benutzerrolle gibt.
744
				In einem solchen Fall gibt es immer den Schlüssel <literal>default</literal>, der automatisch verwendet wird, wenn es keinen Schlüssel in der Konfiguration für die betroffene Benutzerrolle gibt.
Lines 784-790 Muss zwingend entweder in einer Konfigurationsdatei oder an der Kommandozeile ge Link Here
784
				Anton geht also in die Klasse <literal>1A</literal> der Schule <literal>Schule1</literal> und in die Klasse <literal>2B</literal> der Schule <literal>Schule2</literal>.
784
				Anton geht also in die Klasse <literal>1A</literal> der Schule <literal>Schule1</literal> und in die Klasse <literal>2B</literal> der Schule <literal>Schule2</literal>.
785
			</para>
785
			</para>
786
			<para>
786
			<para>
787
				Die Namen der Schulen bzw. Klassen sind ohne Freizeichen und durch Komma getrennt, aufgelistet.
787
				Die Namen der Schulen bzw. Klassen sind ohne Leerzeichen und durch Komma getrennt, aufgelistet.
788
				Als Trennzeichen innerhalb einer CSV-Zelle wird das Komma verwendet, da dies implizit aus der Standardeinstellung <link linkend="configuration:json_format:userimport:csv:incell-delimiter:default"><literal>csv:incell-delimiter:default=","</literal></link> aus <filename>/usr/share/ucs-school-import/configs/user_import_defaults.json</filename> übernommen wurde.
788
				Als Trennzeichen innerhalb einer CSV-Zelle wird das Komma verwendet, da dies implizit aus der Standardeinstellung <link linkend="configuration:json_format:userimport:csv:incell-delimiter:default"><literal>csv:incell-delimiter:default=","</literal></link> aus <filename>/usr/share/ucs-school-import/configs/user_import_defaults.json</filename> übernommen wurde.
789
			</para>
789
			</para>
790
			<para>
790
			<para>
Lines 883-890 udm users/user Link Here
883
				</para>
883
				</para>
884
			</note>
884
			</note>
885
			<para>
885
			<para>
886
				Bei der obigen, langen Ausgabe, handelt sich um die Beschreibung eines <link linkend="extending:import_user_class"><classname>ImportUser</classname></link> Objektes.
886
				Bei der obigen, langen Ausgabe handelt es sich um die Beschreibung eines <link linkend="extending:import_user_class"><classname>ImportUser</classname></link> Objektes.
887
				Dieses zu kennen wird wichtig für der Programmierung von Hooks (siehe <xref linkend="extending:hooks"/>), mit denen vor und nach dem Anlegen, Ändern oder Löschen von Benutzern noch Aktionen ausgeführt werden können.
887
				Dieses zu kennen wird wichtig für die Programmierung von Hooks (siehe <xref linkend="extending:hooks"/>), mit denen vor und nach dem Anlegen, Ändern oder Löschen von Benutzern noch Aktionen ausgeführt werden können.
888
			</para>
888
			</para>
889
			<para>
889
			<para>
890
				Es existieren zwei "Sonderwerte" die in der Konfiguration der Zuordnung (<link linkend="configuration:json_format:userimport:csv:mapping"><varname>mapping</varname></link>) verwendet werden können: <literal>__action</literal> und <literal>__ignore</literal>:
890
				Es existieren zwei "Sonderwerte" die in der Konfiguration der Zuordnung (<link linkend="configuration:json_format:userimport:csv:mapping"><varname>mapping</varname></link>) verwendet werden können: <literal>__action</literal> und <literal>__ignore</literal>:
Lines 900-910 udm users/user Link Here
900
					<listitem>
900
					<listitem>
901
						<simpara>
901
						<simpara>
902
							<literal>__ignore</literal>: Der Inhalt dieser Spalte wird ignoriert.
902
							<literal>__ignore</literal>: Der Inhalt dieser Spalte wird ignoriert.
903
							<!-- TODO: das ist nicht verständlich -->
903
						</simpara>
904
						</simpara>
904
					</listitem>
905
					</listitem>
905
				</itemizedlist>
906
				</itemizedlist>
906
				Weitere, eigene Interpretationen von Eingabewerten können in einer abgeleiteten Klasse (siehe <xref linkend="extending:subclassing"/>) von <classname>ucsschool.importer.reader.csv_reader.CsvReader</classname> in der Methode <methodname>handle_input()</methodname> erzeugt werden.
907
				Weitere, eigene Interpretationen von Eingabewerten können in einer von <classname>ucsschool.importer.reader.csv_reader.CsvReader</classname> abgeleiteten Klasse (siehe <xref linkend="extending:subclassing"/>) in der Methode <methodname>handle_input()</methodname> erzeugt werden.
907
				Als Beispiel kann <methodname>handle_input()</methodname> in <classname>ucsschool.importer.legacy.legacy_csv_reader.LegacyCsvReader</classname> dienen, welches für ein überholtes Tool den Sonderwert <literal>__activate</literal> (neue Benutzer de/aktivieren) hinzufügt.
908
				Als Beispiel kann <methodname>handle_input()</methodname> in <classname>ucsschool.importer.legacy.legacy_csv_reader.LegacyCsvReader</classname> dienen, welches für ein überholtes Tool den Sonderwert <literal>__activate</literal> (neue Benutzer de/aktivieren) hinzufügt.
909
				<!-- TODO: was heißt überholt? was heißt Sonderwert?-->
908
			</para>
910
			</para>
909
			<para>
911
			<para>
910
				Um Unterstützung für den Import von anderen Dateiformaten als CSV (JSON, XML etc) hinzuzufügen, kann von <classname>ucsschool.importer.reader.base_reader.BaseReader</classname> abgeleitet werden (siehe <xref linkend="extending:subclassing"/>).
912
				Um Unterstützung für den Import von anderen Dateiformaten als CSV (JSON, XML etc) hinzuzufügen, kann von <classname>ucsschool.importer.reader.base_reader.BaseReader</classname> abgeleitet werden (siehe <xref linkend="extending:subclassing"/>).
Lines 914-925 udm users/user Link Here
914
		<section id="configuration:scheme_formatting">
916
		<section id="configuration:scheme_formatting">
915
			<title>Formatierungsschema</title>
917
			<title>Formatierungsschema</title>
916
			<para>
918
			<para>
917
				Es kann wünschenswert &ndash; oder wie im Fall von Benutzername und E-Mail-Adresse notwendig &ndash; sein Attribute aus den Werten anderer Attribute zu erzeugen.
919
				Es kann wünschenswert &ndash; oder wie im Fall von Benutzername und E-Mail-Adresse notwendig &ndash; sein, Attribute aus den Werten anderer Attribute zu erzeugen.
918
				Zum Beispiel speichern und exportieren Schulverwaltungssoftware häufig keine Benutzernamen und E-Mail-Adressen die zur eingesetzten Infrastruktur passen.
920
				Zum Beispiel speichern und exportieren Schulverwaltungssoftwares häufig keine Benutzernamen und E-Mail-Adressen, die zur eingesetzten Infrastruktur passen.
919
			</para>
921
			</para>
920
			<para>
922
			<para>
921
				Aus diesem Grund unterstützt die Importsoftware die Erzeugung von Attributen mit Hilfe von konfigurierbaren Schemata.
923
				Aus diesem Grund unterstützt die Importsoftware die Erzeugung von Attributen mit Hilfe von konfigurierbaren Schemata.
922
				Das Format ist das gleiche wie das bei den Benutzervorlagen eingesetzte (siehe <biblioref linkend="ucs-handbuch"/>).
924
				Das Format ist das gleiche wie das bei den Benutzervorlagen eingesetzte (siehe <biblioref linkend="ucs-handbuch"/>).
925
				<!-- TODO: auf das direkte Kapitel verlinken?! -->
923
				Es existieren dedizierte Konfigurationsschlüssel für die Attribute <property>email</property>, <property>recordUID</property> und <property>username</property>.
926
				Es existieren dedizierte Konfigurationsschlüssel für die Attribute <property>email</property>, <property>recordUID</property> und <property>username</property>.
924
				Darüber hinaus können Schemata für beliebige &ucsUDM; Attribute (mit dem Namen des Attributs als Schlüssel) hinterlegt werden.
927
				Darüber hinaus können Schemata für beliebige &ucsUDM; Attribute (mit dem Namen des Attributs als Schlüssel) hinterlegt werden.
925
			</para>
928
			</para>
Lines 940-946 udm users/user Link Here
940
		<section id="configuration:unique_usernames">
943
		<section id="configuration:unique_usernames">
941
			<title>Einmalige Benutzernamen</title>
944
			<title>Einmalige Benutzernamen</title>
942
			<para>
945
			<para>
943
				Benutzername müssen in der gesamten Domäne, nicht nur an einer Schule, einmalig sein. Darüber hinaus kann es die Anforderung geben, dass Benutzernamen auch "historisch einmalig" sind, sich also niemals wiederholen.
946
				Benutzernamen müssen in der gesamten Domäne, nicht nur an einer Schule, einmalig sein. Darüber hinaus kann es die Anforderung geben, dass Benutzernamen auch "historisch einmalig" sind, sich also niemals wiederholen.
944
			</para>
947
			</para>
945
			<para>
948
			<para>
946
				Aus diesem Grund können zur Erzeugung von Benutzernamen, über die üblichen Variablen in Formatierungsschema (siehe <xref linkend="configuration:scheme_formatting"/>) hinaus, spezielle Zählervariablen verwendet werden.
949
				Aus diesem Grund können zur Erzeugung von Benutzernamen, über die üblichen Variablen in Formatierungsschema (siehe <xref linkend="configuration:scheme_formatting"/>) hinaus, spezielle Zählervariablen verwendet werden.
Lines 995-1001 udm users/user Link Here
995
						<simpara>
998
						<simpara>
996
							Das Benutzerkonto wird nicht gelöscht, sondern deaktiviert und mit einem Verfallsdatum versehen.
999
							Das Benutzerkonto wird nicht gelöscht, sondern deaktiviert und mit einem Verfallsdatum versehen.
997
							Dies entspricht dem Deaktivieren und Setzen eines Kontoablaufdatum im &ucsUMC;-Modul <guimenu>Benutzer</guimenu>.
1000
							Dies entspricht dem Deaktivieren und Setzen eines Kontoablaufdatum im &ucsUMC;-Modul <guimenu>Benutzer</guimenu>.
998
							Der Benutzer kann später final gelöscht werden.
1001
							Der Benutzer kann später endgültig gelöscht werden.
999
							Sollte der Benutzer kurze Zeit später erneut "angelegt" werden, wird das alte Benutzerkonto reaktiviert.
1002
							Sollte der Benutzer kurze Zeit später erneut "angelegt" werden, wird das alte Benutzerkonto reaktiviert.
1000
							Diese Variante wird ausgewählt durch die Konfiguration <literal>user_deletion:delete=false</literal>, <literal>user_deletion:expiration=3</literal> (das Konto wird sofort deaktiviert, verfällt aber erst in drei Tagen).
1003
							Diese Variante wird ausgewählt durch die Konfiguration <literal>user_deletion:delete=false</literal>, <literal>user_deletion:expiration=3</literal> (das Konto wird sofort deaktiviert, verfällt aber erst in drei Tagen).
1001
						</simpara>
1004
						</simpara>
Lines 1141-1147 udm users/user Link Here
1141
							<row>
1144
							<row>
1142
								<entry><varname>dn</varname></entry>
1145
								<entry><varname>dn</varname></entry>
1143
								<entry>string</entry>
1146
								<entry>string</entry>
1144
								<entry>DN des Benutzers im LDAP, wenn er jetzt gespeichert würde.</entry>
1147
								<entry>DN des Benutzer-Objekts im LDAP, wenn es jetzt gespeichert werden würde.</entry>
1145
							</row>
1148
							</row>
1146
							<row>
1149
							<row>
1147
								<entry><varname>entry_count</varname></entry>
1150
								<entry><varname>entry_count</varname></entry>
Lines 1169-1180 udm users/user Link Here
1169
		<section id="extending:hooks">
1172
		<section id="extending:hooks">
1170
			<title>Hooks</title>
1173
			<title>Hooks</title>
1171
			<para>
1174
			<para>
1172
				Hooks (engl. Haken) sind Stellen im Programmcode an die zusätzlicher Code "gehängt" werden kann.
1175
				Hooks (engl. Haken) sind Stellen im Programmcode, an die zusätzlicher Code "gehängt" werden kann.
1176
				<!-- hmm, komische Beschreibung -->
1173
				Für den Benutzerimport sind acht Stellen vorgesehen: jeweils vor und nach dem Anlegen, Ändern, Löschen oder Verschieben von Benutzern.
1177
				Für den Benutzerimport sind acht Stellen vorgesehen: jeweils vor und nach dem Anlegen, Ändern, Löschen oder Verschieben von Benutzern.
1174
			</para>
1178
			</para>
1175
			<para>
1179
			<para>
1176
				Zur Nutzung der Hook-Funktionalität muss eine eigene Python-Klasse erstellt werden, die von <classname>ucsschool.importer.utils.user_pyhook.UserPyHook</classname> ableitet.
1180
				Zur Nutzung der Hook-Funktionalität muss eine eigene Python-Klasse erstellt werden, die von <classname>ucsschool.importer.utils.user_pyhook.UserPyHook</classname> ableitet.
1177
				In der Klasse können Methoden <methodname>pre_create()</methodname>, <methodname>post_create()</methodname> etc definiert werden, welche zum jeweiligen Zeitpunkt ausgeführt werden.
1181
				In der Klasse können Methoden <methodname>pre_create()</methodname>, <methodname>post_create()</methodname>, etc. definiert werden, welche zum jeweiligen Zeitpunkt ausgeführt werden.
1178
				Der Name der Datei mit der eigenen Klasse muss auf <filename>.py</filename> enden und im Verzeichnis <filename class="directory">/usr/share/ucs-school-import/pyhooks</filename> abgespeichert werden.
1182
				Der Name der Datei mit der eigenen Klasse muss auf <filename>.py</filename> enden und im Verzeichnis <filename class="directory">/usr/share/ucs-school-import/pyhooks</filename> abgespeichert werden.
1179
			</para>
1183
			</para>
1180
			<note>
1184
			<note>
Lines 1257-1263 class MyHook(UserPyHook): Link Here
1257
				Es handelt sich bei <property>self.logger</property> um eine Instanz eines Python <classname>logging</classname> Objekts<footnote><para>Python Dokumentation: <ulink url="https://docs.python.org/2/library/logging.html"/></para></footnote>.
1261
				Es handelt sich bei <property>self.logger</property> um eine Instanz eines Python <classname>logging</classname> Objekts<footnote><para>Python Dokumentation: <ulink url="https://docs.python.org/2/library/logging.html"/></para></footnote>.
1258
			</para>
1262
			</para>
1259
			<para>
1263
			<para>
1260
				In <methodname>pre_remove()</methodname> wird das Heimatverzeichnisses des Benutzers benötigt.
1264
				In <methodname>pre_remove()</methodname> wird das Heimatverzeichnis des Benutzers benötigt.
1261
				Da dies nicht eines der direkt am Objekt stehenden Daten ist (siehe <xref linkend="extending:import_user_class"/>), muss zuerst das gesamte Benutzerobjekt aus dem LDAP geladen werden.
1265
				Da dies nicht eines der direkt am Objekt stehenden Daten ist (siehe <xref linkend="extending:import_user_class"/>), muss zuerst das gesamte Benutzerobjekt aus dem LDAP geladen werden.
1262
				Dies tut <methodname>user.get_udm_object()</methodname>, welches als Argument ein LDAP-Verbindungsobjekt erwartet.
1266
				Dies tut <methodname>user.get_udm_object()</methodname>, welches als Argument ein LDAP-Verbindungsobjekt erwartet.
1263
				Dieses ist im <wordasword>Hook-Objekt</wordasword> an <property>self.lo</property> gespeichert.
1267
				Dieses ist im <wordasword>Hook-Objekt</wordasword> an <property>self.lo</property> gespeichert.
Lines 1267-1273 class MyHook(UserPyHook): Link Here
1267
					Falls das Benutzerobjekt in einem <foreignphrase>post-Hook</foreignphrase> geändert werden soll, so ist es möglich <methodname>user.modify_without_hooks()</methodname> auszuführen, aber generell sollte ein erneutes Modifizieren <emphasis>nach</emphasis> dem Speichern vermieden werden.
1271
					Falls das Benutzerobjekt in einem <foreignphrase>post-Hook</foreignphrase> geändert werden soll, so ist es möglich <methodname>user.modify_without_hooks()</methodname> auszuführen, aber generell sollte ein erneutes Modifizieren <emphasis>nach</emphasis> dem Speichern vermieden werden.
1268
				</para>
1272
				</para>
1269
				<para>
1273
				<para>
1270
					Die Methoden <methodname>create()</methodname>, <methodname>modify()</methodname> und <methodname>remove()</methodname> sollten in Hooks nie ausgeführt werden, da dies zu einer Rekursion führen kann.
1274
					Die Methoden <methodname>create()</methodname>, <methodname>modify()</methodname> und <methodname>remove()</methodname> des Benutzerobjekts sollten von Hook-Methoden nicht ausgeführt werden, da dies zu einer Rekursion führen kann.
1271
				</para>
1275
				</para>
1272
			</caution>
1276
			</caution>
1273
		  </section>
1277
		  </section>
Lines 1301-1312 class MyUsernameHandler(UsernameHandler): Link Here
1301
        return new_number_str
1305
        return new_number_str
1302
			</programlisting>
1306
			</programlisting>
1303
			<para>
1307
			<para>
1304
				In <methodname>counter_variable_to_function()</methodname> wird den existierenden beiden Variablen eine weitere hinzugefügt, und auf die neue Funktion verwiesen.
1308
				In <methodname>counter_variable_to_function()</methodname> wird den existierenden beiden Variablen eine weitere hinzugefügt und auf die neue Funktion verwiesen.
1305
				<methodname>always_counter_with_zeros()</methodname> verwendet <methodname>always_counter()</methodname> zur Erzeugung der nächsten freien Zahl, schreibt diese aber dann so um, dass sie immer vier Stellen lang ist (vorne wird mit Nullen aufgefüllt).
1309
				<methodname>always_counter_with_zeros()</methodname> verwendet <methodname>always_counter()</methodname> zur Erzeugung der nächsten freien Zahl, schreibt diese aber dann so um, dass sie immer vier Stellen lang ist (der Anfang wird mit Nullen aufgefüllt).
1306
			</para>
1310
			</para>
1307
			<para>
1311
			<para>
1308
				Wird die Klasse unter <filename class="directory">/usr/local/lib/python2.7/dist-packages/usernames_with_zeros.py</filename> abgespeichert, so kann sie unter Python als <classname>usernames_with_zeros.MyUsernameHandler</classname> verwendet werden.
1312
				Wird die Klasse unter <filename class="directory">/usr/local/lib/python2.7/dist-packages/usernames_with_zeros.py</filename> abgespeichert, so kann sie unter Python als <classname>usernames_with_zeros.MyUsernameHandler</classname> verwendet werden.
1309
				Evtl. muss zuvor das Verzeichnis angelegt werden:
1313
				Zuvor muss das Verzeichnis angelegt werden:
1310
				<programlisting>
1314
				<programlisting>
1311
mkdir -p /usr/local/lib/python2.7/dist-packages
1315
mkdir -p /usr/local/lib/python2.7/dist-packages
1312
				</programlisting>
1316
				</programlisting>
Lines 1335-1349 Anton0003 Link Here
1335
			<para>
1339
			<para>
1336
				Es gibt jetzt zwar eine neue Klasse mit der neuen Funktionalität.
1340
				Es gibt jetzt zwar eine neue Klasse mit der neuen Funktionalität.
1337
				Aber wie wird die Importsoftware nun dazu gebracht die neue Klasse zu verwenden?
1341
				Aber wie wird die Importsoftware nun dazu gebracht die neue Klasse zu verwenden?
1342
				<!-- rethorische Fragen in einer Dokumentation ist kein üblicher Stil! -->
1338
			</para>
1343
			</para>
1339
1344
1340
			<section id="extending:subclassing:abstract_factory">
1345
			<section id="extending:subclassing:abstract_factory">
1341
				<title>Abstract Factory</title>
1346
				<title>Abstract Factory</title>
1342
				<para>
1347
				<para>
1343
					Für dieses immer wiederkehrende Problem gibt es verschiedene Entwurfsmuster<footnote><para>Wikipedia Entwurfsmuster: <ulink url="https://de.wikipedia.org/wiki/Entwurfsmuster"/></para></footnote>.
1348
					<!-- Hmm, eine Dokumentation sollte keine Herleitung sein, wie man den Lösungsansatz gefunden hat. -->
1344
					Für die Importsoftware wurde sich für das der <foreignphrase>Abstract Factory</foreignphrase><footnote><para>Wikipedia Abstrakte Fabrik: <ulink url="https://de.wikipedia.org/wiki/Abstrakte_Fabrik"/></para></footnote> entschieden.
1349
					Die Architektur der Importsoftware ist als <foreignphrase>Abstract Factory</foreignphrase><footnote><para>Wikipedia Abstrakte Fabrik: <ulink url="https://de.wikipedia.org/wiki/Abstrakte_Fabrik"/></para></footnote> implementiert.
1345
					In ihr wird die Erzeugung von Objekten zentralisiert.
1350
					In ihr wird die Erzeugung von Objekten zentralisiert.
1346
					Sie zeichnet sich u.a. dadurch aus, dass sie erlaubt das Auszutauschen mehrerer Komponenten einer Software konsistent zu halten.
1351
					Sie zeichnet sich u.a. dadurch aus, dass sie erlaubt das Austauschen mehrerer Komponenten einer Software konsistent zu halten.
1347
					Im Fall der Importsoftware ist die <foreignphrase>abstract factory</foreignphrase> jedoch nicht Abstrakt, alle Methoden wurden implementiert.
1352
					Im Fall der Importsoftware ist die <foreignphrase>abstract factory</foreignphrase> jedoch nicht Abstrakt, alle Methoden wurden implementiert.
1348
				</para>
1353
				</para>
1349
				<para>
1354
				<para>
Lines 1369-1374 Anton0003 Link Here
1369
				</para>
1374
				</para>
1370
				<para>
1375
				<para>
1371
					Welche Methode gewählt wird, hängt davon ab ob die Anpassungen nur punktuell sind, oder ob es sich um ein größeres Umschreiben der Importsoftware handelt.
1376
					Welche Methode gewählt wird, hängt davon ab ob die Anpassungen nur punktuell sind, oder ob es sich um ein größeres Umschreiben der Importsoftware handelt.
1377
					<!-- TODO: mir fehlt hier vor allem erstmal eine Übersicht aller Klassen und deren Methoden -->
1372
				</para>
1378
				</para>
1373
			</section>
1379
			</section>
1374
1380
Lines 1405-1411 class MyUserImportFactory(DefaultUserImportFactory): Link Here
1405
					</programlisting>
1411
					</programlisting>
1406
				</para>
1412
				</para>
1407
				<para>
1413
				<para>
1408
					Wird diese Datei nun als <filename>/usr/local/lib/python2.7/dist-packages/my_userimport_factory.py</filename> abgespeichert, so kann sie in der Konfiguration zur Verwendung als <property>factory</property> for die Importsoftware folgendermaßen aktiviert werden:
1414
					Wird diese Datei nun als <filename>/usr/local/lib/python2.7/dist-packages/my_userimport_factory.py</filename> abgespeichert, so kann sie in der Konfiguration zur Verwendung als <property>factory</property> für die Importsoftware folgendermaßen aktiviert werden:
1409
					<programlisting>
1415
					<programlisting>
1410
{
1416
{
1411
    "factory": "my_userimport_factory.MyUserImportFactory"
1417
    "factory": "my_userimport_factory.MyUserImportFactory"

Return to bug 41739