|
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>"<firstname>[0].<lastname>@<maildomain>"</literal></entry> |
570 |
<entry align="right">Standard (<classname>string</classname>): <literal>"<firstname>[0].<lastname>@<maildomain>"</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>"<:umlauts><firstname>[0].<lastname>[COUNTER2]"</literal></entry> |
603 |
<entry align="right">Standard (<classname>string</classname>): <literal>"<:umlauts><firstname>[0].<lastname>[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 – oder wie im Fall von Benutzername und E-Mail-Adresse notwendig – sein Attribute aus den Werten anderer Attribute zu erzeugen. |
919 |
Es kann wünschenswert – oder wie im Fall von Benutzername und E-Mail-Adresse notwendig – 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" |