Index: umc/js/udm/DetailPage.js =================================================================== --- umc/js/udm/DetailPage.js (Revision 53489) +++ umc/js/udm/DetailPage.js (Arbeitskopie) @@ -119,6 +119,9 @@ // internal reference to a dict with entries of the form: policy-type -> widgets _policyWidgets: null, + // internal reference if Page is fully rendered + _pageRenderedDeferred: null, + // Deferred object of the query and render process for the policy widgets _policyDeferred: null, @@ -163,6 +166,7 @@ this.standbyOpacity = 1; this._multiEdit = this.ldapName instanceof Array; + this._pageRenderedDeferred = new Deferred(); }, buildRendering: function() { @@ -173,8 +177,6 @@ this.standby(true); - this.loadedDeferred = new Deferred(); - // remember the objectType of the object we are going to edit this._editedObjType = this.objectType; @@ -216,17 +218,17 @@ setTimeout(lang.hitch(this, function() { this._prepareIndividualProperties(properties).then(lang.hitch(this, function(properties) { this.renderDetailPage(properties, layout, policies, template).then(lang.hitch(this, function() { - this.loadedDeferred.resolve(); + this.standby(false); + this._pageRenderedDeferred.resolve(); }), lang.hitch(this, function() { - this.loadedDeferred.resolve(); + this.standby(false); + this._pageRenderedDeferred.reject(); })); - }), lang.hitch(this, function() { - this.loadedDeferred.resolve(); })); }), 50); }), lang.hitch(this, function() { - this.loadedDeferred.resolve(); this.standby(false); + this._pageRenderedDeferred.reject(); })); }, @@ -291,6 +293,10 @@ })); }, + ready: function() { + return this._pageRenderedDeferred; + }, + _setNonEmptyValues: function(properties) { // Some properties have an empty value as first item. // In this case this "empty" item is chosen as default @@ -906,7 +912,6 @@ this._renderMultiEditCheckBoxes(widgets); this._registerOptionWatchHandler(); formBuiltDeferred.resolve(); - this.standby(false); this.templateObject = this.buildTemplate(template, properties, widgets); // initiate the template mechanism (only for new objects) Index: umc/js/de.po =================================================================== --- umc/js/de.po (Revision 53489) +++ umc/js/de.po (Arbeitskopie) @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: univention-management-console-module-udm\n" "Report-Msgid-Bugs-To: packages@univention.de\n" -"POT-Creation-Date: 2014-09-02 17:08+0200\n" +"POT-Creation-Date: 2014-09-09 16:10+0200\n" "PO-Revision-Date: 2012-01-03 08:01+0100\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: umc/js/udm/DetailPage.js:1528 +#: umc/js/udm/DetailPage.js:1533 #, python-format msgid "%(attribute)s: %(message)s\n" msgstr "%(attribute)s: %(message)s\n" @@ -37,7 +37,7 @@ msgid "%s created" msgstr "%s angelegt" -#: umc/js/udm/DetailPage.js:696 +#: umc/js/udm/DetailPage.js:702 #, python-format msgid "" "%s part of the Active Directory domain. UCS can only change certain " @@ -52,7 +52,7 @@ msgid "%s template" msgstr "%s-Vorlage" -#: umc/js/udm/DetailPage.js:768 +#: umc/js/udm/DetailPage.js:774 msgid "(multi-edit)" msgstr "(Mehrfachbearbeitung)" @@ -124,15 +124,15 @@ msgid "A template defines rules for default object properties." msgstr "Eine Vorlage definiert Regeln für Vorgabewerte eines neuen Objektes." -#: umc/js/udm.js:1554 +#: umc/js/udm.js:1558 msgid "Access Rights" msgstr "Zugriffsrechte" -#: umc/js/udm.js:1553 +#: umc/js/udm.js:1557 msgid "Access control" msgstr "Zugriffskontrolle" -#: umc/js/udm.js:1555 +#: umc/js/udm.js:1559 msgid "Account" msgstr "Konto" @@ -144,7 +144,7 @@ msgid "Add" msgstr "Hinzufügen" -#: umc/js/udm/NewObjectDialog.js:91 umc/js/udm.js:368 +#: umc/js/udm.js:368 umc/js/udm/NewObjectDialog.js:91 #, python-format msgid "Add a new %s" msgstr "%s neu hinzufügen" @@ -161,7 +161,7 @@ msgid "Advanced options" msgstr "Erweiterte Optionen" -#: umc/js/udm/DetailPage.js:615 +#: umc/js/udm/DetailPage.js:621 msgid "Advanced settings" msgstr "Erweiterte Einstellungen" @@ -178,7 +178,7 @@ msgid "All types" msgstr "Alle Objekttypen" -#: umc/js/udm.js:1556 +#: umc/js/udm.js:1560 msgid "Allow/Deny" msgstr "Erlauben/Verbieten" @@ -186,24 +186,24 @@ msgid "Back" msgstr "Zurück" -#: umc/js/udm/DetailPage.js:981 +#: umc/js/udm/DetailPage.js:986 msgid "Back to LDAP directory tree" msgstr "Zurück zum LDAP-Verzeichnisbaum" -#: umc/js/udm/DetailPage.js:979 +#: umc/js/udm/DetailPage.js:984 msgid "Back to search" msgstr "Zurück zur Suche" -#: umc/js/udm.js:1557 +#: umc/js/udm.js:1561 msgid "Boot" msgstr "Boot" -#: umc/js/udm/LicenseImportDialog.js:135 umc/js/udm/CreateReportDialog.js:114 -#: umc/js/udm/DetailPage.js:984 umc/js/udm.js:1079 umc/js/udm.js:1370 +#: umc/js/udm.js:1079 umc/js/udm.js:1370 umc/js/udm/LicenseImportDialog.js:135 +#: umc/js/udm/CreateReportDialog.js:114 umc/js/udm/DetailPage.js:989 msgid "Cancel" msgstr "Abbrechen" -#: umc/js/udm.js:1558 +#: umc/js/udm.js:1562 msgid "Change password" msgstr "Passwort ändern" @@ -211,7 +211,7 @@ msgid "Choose file..." msgstr "Datei auswählen..." -#: umc/js/udm/DetailPage.js:1092 umc/js/udm/DetailPage.js:1120 +#: umc/js/udm/DetailPage.js:1097 umc/js/udm/DetailPage.js:1125 msgid "Click to edit the inherited properties of the policy" msgstr "Mausklick, um die ererbten Eigenschaften der Richtlinie zu bearbeiten" @@ -219,8 +219,8 @@ msgid "Clients" msgstr "Clients" -#: umc/js/udm/LicenseImportDialog.js:64 umc/js/udm/CreateReportDialog.js:165 -#: umc/js/udm/LicenseDialog.js:71 +#: umc/js/udm/LicenseDialog.js:71 umc/js/udm/LicenseImportDialog.js:64 +#: umc/js/udm/CreateReportDialog.js:165 msgid "Close" msgstr "Schließen" @@ -228,7 +228,7 @@ msgid "Computer information" msgstr "Rechnerinformationen" -#: umc/js/udm.js:1559 +#: umc/js/udm.js:1563 msgid "Contact" msgstr "Kontakt" @@ -244,12 +244,12 @@ msgid "Create" msgstr "Erstellen" -#: umc/js/udm/DetailPage.js:975 +#: umc/js/udm/DetailPage.js:980 #, python-format msgid "Create %s" msgstr "%s anlegen" -#: umc/js/udm/DetailPage.js:510 +#: umc/js/udm/DetailPage.js:516 msgid "Create new policy" msgstr "Neue Richtlinie" @@ -278,11 +278,11 @@ msgid "DHCP services" msgstr "DHCP-Dienste" -#: umc/js/udm.js:1561 +#: umc/js/udm.js:1565 msgid "DHCP statements" msgstr "DHCP Verschiedenes" -#: umc/js/udm.js:1562 +#: umc/js/udm.js:1566 msgid "DNS Update" msgstr "DDNS Aktualisierungen" @@ -306,11 +306,11 @@ msgid "DVS Users" msgstr "DVS Benutzer" -#: umc/js/udm.js:1560 +#: umc/js/udm.js:1564 msgid "Data type" msgstr "Datentyp" -#: umc/js/udm/MultiObjectSelect.js:108 umc/js/udm.js:548 +#: umc/js/udm.js:548 umc/js/udm/MultiObjectSelect.js:108 msgid "Default properties" msgstr "Standardeigenschaften" @@ -348,11 +348,11 @@ msgid "Edit the %s." msgstr "%s bearbeiten" -#: umc/js/udm.js:1563 +#: umc/js/udm.js:1567 msgid "Employee" msgstr "Mitarbeiter" -#: umc/js/udm/DetailPage.js:1530 +#: umc/js/udm/DetailPage.js:1535 msgid "Error" msgstr "Fehler" @@ -368,19 +368,19 @@ msgid "Failed to upload certificate" msgstr "Fehler beim Hochladen des Zertifikates" -#: umc/js/udm.js:1564 +#: umc/js/udm.js:1568 msgid "General" msgstr "Allgemein" -#: umc/js/udm.js:1565 +#: umc/js/udm.js:1569 msgid "Groups" msgstr "Gruppen" -#: umc/js/udm.js:1566 +#: umc/js/udm.js:1570 msgid "Hosts" msgstr "enthaltene Rechner" -#: umc/js/udm.js:1567 +#: umc/js/udm.js:1571 msgid "IP addresses" msgstr "IP-Adressen" @@ -416,11 +416,11 @@ msgid "Information about the current UCS license" msgstr "Informationen über die aktuelle UCS-Lizenz" -#: umc/js/udm/DetailPage.js:500 +#: umc/js/udm/DetailPage.js:506 msgid "Inherited" msgstr "Ererbt" -#: umc/js/udm.js:1568 +#: umc/js/udm.js:1572 msgid "KDE Profiles" msgstr "KDE-Profile" @@ -428,7 +428,7 @@ msgid "Key ID" msgstr "Key ID" -#: umc/js/udm.js:1569 +#: umc/js/udm.js:1573 msgid "LDAP" msgstr "LDAP" @@ -444,11 +444,11 @@ msgid "LDAP objects" msgstr "LDAP-Objekte" -#: umc/js/udm.js:1570 +#: umc/js/udm.js:1574 msgid "Lease Time" msgstr "Lease-Zeit" -#: umc/js/udm.js:1571 +#: umc/js/udm.js:1575 msgid "License" msgstr "Lizenz" @@ -456,11 +456,11 @@ msgid "License type" msgstr "Lizenztyp" -#: umc/js/udm.js:1572 +#: umc/js/udm.js:1576 msgid "Linux" msgstr "Linux/UNIX" -#: umc/js/udm/DetailPage.js:366 +#: umc/js/udm/DetailPage.js:372 msgid "" "List of all object properties that are inherited by policies. The values " "cannot be edited directly. In order to edit a policy, click on the \"edit\" " @@ -472,7 +472,7 @@ "\"bearbeiten\" wird ein neuer Reiter mit der entsprechenden Richtlinie " "geöffnet." -#: umc/js/udm/wizards/CreateWizard.js:137 umc/js/udm/DetailPage.js:352 +#: umc/js/udm/wizards/CreateWizard.js:137 umc/js/udm/DetailPage.js:358 #, python-format msgid "Loading %s..." msgstr "Lade %s..." @@ -481,11 +481,11 @@ msgid "Logout" msgstr "Abmelden" -#: umc/js/udm.js:1574 +#: umc/js/udm.js:1578 msgid "MX records" msgstr "MX Records" -#: umc/js/udm.js:1573 +#: umc/js/udm.js:1577 msgid "Mail" msgstr "Mail" @@ -506,7 +506,7 @@ msgid "Move to..." msgstr "Verschieben nach..." -#: umc/js/udm.js:1576 +#: umc/js/udm.js:1580 msgid "NFS" msgstr "NFS" @@ -526,7 +526,7 @@ msgid "Name of the LDAP object." msgstr "Name des LDAP-Objekts." -#: umc/js/udm.js:1575 +#: umc/js/udm.js:1579 msgid "Netbios" msgstr "Netbios" @@ -572,7 +572,7 @@ msgid "No LDAP position has been selected." msgstr "Kein LDAP-Position wurde ausgewählt." -#: umc/js/udm/DetailPage.js:1389 +#: umc/js/udm/DetailPage.js:1394 msgid "No changes have been made." msgstr "Keine Änderungen wurden vorgenommen." @@ -598,7 +598,7 @@ msgstr "" "Öffnet einen neuen Reiter, in dem das LDAP-Objekt bearbeitet werden kann." -#: umc/js/udm/DetailPage.js:714 +#: umc/js/udm/DetailPage.js:720 msgid "Options describing the basic features of the LDAP object" msgstr "Optionen für grundlegende LDAP-Objekt-Eigenschaften" @@ -672,7 +672,7 @@ "Bitte benutzen Sie die Active Directory Administrations-Tools um neue " "Domänen-LDAP-Objekte dieses Typs anzulegen." -#: umc/js/udm/DetailPage.js:288 +#: umc/js/udm/DetailPage.js:290 #, python-format msgid "Position: %(path)s" msgstr "Position: %(path)s" @@ -690,11 +690,11 @@ "Klicken Sie auf Weiter, um ein neues LDAP-Objekt dieses Typs nur für " "UCS-Systeme anzulegen." -#: umc/js/udm.js:1577 +#: umc/js/udm.js:1581 msgid "Primary Groups" msgstr "Primäre Gruppen" -#: umc/js/udm/DetailPage.js:365 +#: umc/js/udm/DetailPage.js:371 msgid "Properties inherited from policies" msgstr "Durch Richtlinien ererbte Eigenschaften" @@ -702,8 +702,8 @@ msgid "Property" msgstr "Eigenschaft" -#: umc/js/udm/MultiObjectSelect.js:116 umc/js/udm/MultiObjectSelect.js:131 -#: umc/js/udm.js:605 umc/js/udm.js:625 +#: umc/js/udm.js:605 umc/js/udm.js:625 umc/js/udm/MultiObjectSelect.js:116 +#: umc/js/udm/MultiObjectSelect.js:131 msgid "Property value" msgstr "Eigenschaftswert" @@ -733,11 +733,11 @@ msgid "Report has been created" msgstr "Report wurde erstellt" -#: umc/js/udm.js:1578 +#: umc/js/udm.js:1582 msgid "Samba" msgstr "Samba" -#: umc/js/udm/DetailPage.js:977 +#: umc/js/udm/DetailPage.js:982 msgid "Save changes" msgstr "Änderungen speichern" @@ -754,14 +754,14 @@ msgid "Search in:" msgstr "Suche in:" -#: umc/js/udm/DetailPage.js:503 +#: umc/js/udm/DetailPage.js:509 msgid "" "Select a policy that should be directly linked to the current LDAP object" msgstr "" "Wählen Sie eine Richtlinie, die direkt mit dem aktuellen LDAP-Objekt " "verknüpft werden soll" -#: umc/js/udm/DetailPage.js:502 +#: umc/js/udm/DetailPage.js:508 msgid "Select policy configuration" msgstr "Richtlinien-Konfiguration" @@ -785,24 +785,24 @@ msgid "Simplified options" msgstr "Vereinfachte Optionen" -#: umc/js/udm.js:1579 +#: umc/js/udm.js:1583 msgid "Start of authority" msgstr "Start of Authority Eintrag" -#: umc/js/udm/wizards/FirstPageWizard.js:313 umc/js/udm.js:524 +#: umc/js/udm.js:524 umc/js/udm/wizards/FirstPageWizard.js:313 msgid "Superordinate" msgstr "Übergeordnetes Objekt" -#: umc/js/udm.js:1580 +#: umc/js/udm.js:1584 msgid "TXT records" msgstr "TXT Records" -#: umc/js/udm/DetailPage.js:694 +#: umc/js/udm/DetailPage.js:700 #, python-format msgid "The %s \"%s\" is" msgstr "%s \"%s\" ist" -#: umc/js/udm/DetailPage.js:684 +#: umc/js/udm/DetailPage.js:690 #, python-format msgid "The %s are" msgstr "Die %s sind" @@ -816,12 +816,12 @@ "Das %s kann unter der folgenden Adresse heruntergeladen werden

%s Report" -#: umc/js/udm/DetailPage.js:1464 +#: umc/js/udm/DetailPage.js:1469 #, python-format msgid "The LDAP object could not be saved: %(details)s" msgstr "Das LDAP-Objekt konnte nicht gespeichert werden: %(details)s" -#: umc/js/udm/DetailPage.js:1471 +#: umc/js/udm/DetailPage.js:1476 msgid "The changes have been successfully applied." msgstr "Die Änderungen wurden erfolgreich übernommen." @@ -843,7 +843,7 @@ msgid "The exact object type of the new LDAP object." msgstr "Der genaue Objekttyp des neuen LDAP-Objekts." -#: umc/js/udm/DetailPage.js:1453 +#: umc/js/udm/DetailPage.js:1458 msgid "The following LDAP objects could not be saved:" msgstr "Die/das folgende(n) Objekt(e) konnte(n) nicht gespeichert werden:" @@ -851,11 +851,11 @@ msgid "The following object(s) could not be deleted:" msgstr "Die/das folgende(n) Objekt(e) konnte(n) nicht gelöscht werden:" -#: umc/js/udm/DetailPage.js:1501 +#: umc/js/udm/DetailPage.js:1506 msgid "The following properties could not be validated:" msgstr "Die folgenden Eigenschaften konnten nicht validiert werden:" -#: umc/js/udm/DetailPage.js:1363 +#: umc/js/udm/DetailPage.js:1368 msgid "The following properties need to be specified or are invalid:" msgstr "" "Die folgenden Eigenschaften wurden nicht angegeben oder sind nicht gültig:" @@ -874,7 +874,7 @@ msgid "The license has been imported successfully." msgstr "Die Lizenz wurde erfolgreich importiert." -#: umc/js/udm/MultiObjectSelect.js:106 umc/js/udm.js:581 +#: umc/js/udm.js:581 umc/js/udm/MultiObjectSelect.js:106 msgid "The object property on which the query is filtered." msgstr "Die Objekteigenschaft, nach der gesucht wird." @@ -902,14 +902,14 @@ msgid "This UCS system is part of an Active Directory domain" msgstr "Dieses UCS-System ist Teil einer Active Directory-Domäne" +#: umc/js/udm.js:561 umc/js/udm.js:1238 umc/js/udm.js:1251 #: umc/js/udm/wizards/FirstPageWizard.js:323 #: umc/js/udm/wizards/FirstPageWizard.js:341 -#: umc/js/udm/wizards/FirstPageWizard.js:377 umc/js/udm.js:561 -#: umc/js/udm.js:1238 umc/js/udm.js:1251 +#: umc/js/udm/wizards/FirstPageWizard.js:377 msgid "Type" msgstr "Typ" -#: umc/js/udm/DetailPage.js:287 +#: umc/js/udm/DetailPage.js:289 #, python-format msgid "Type: %(type)s" msgstr "Typ: %(type)s" @@ -918,11 +918,11 @@ msgid "UCS License" msgstr "UCS-Lizenz" -#: umc/js/udm.js:1581 +#: umc/js/udm.js:1585 msgid "UDM General" msgstr "UDM Allgemein" -#: umc/js/udm.js:1582 +#: umc/js/udm.js:1586 msgid "UDM Web" msgstr "UDM Web" @@ -934,11 +934,11 @@ msgid "Upload certificate" msgstr "Zertifikat hochladen" -#: umc/js/udm.js:1583 +#: umc/js/udm.js:1587 msgid "User Account" msgstr "Benutzerkonto" -#: umc/js/udm.js:1584 +#: umc/js/udm.js:1588 msgid "User Contact" msgstr "Benutzer-Kontakt" @@ -954,11 +954,11 @@ msgid "Valid product types" msgstr "Gültige Produkttypen" -#: umc/js/udm.js:1585 +#: umc/js/udm.js:1589 msgid "Windows" msgstr "Windows" -#: umc/js/udm/DetailPage.js:1202 +#: umc/js/udm/DetailPage.js:1207 msgid "" "You are currently editing a policy. Changing its properties affects all " "referenced objects and may affect your system globally." @@ -975,15 +975,15 @@ "Sie verwenden eine GPL Lizenz, die zu keinem Anspruch auf Support oder " "Maintenance-Unterstützung berechtigt." -#: umc/js/udm/DetailPage.js:614 +#: umc/js/udm/DetailPage.js:620 msgid "[Advanced settings]" msgstr "[Erweiterte Einstellungen]" -#: umc/js/udm/DetailPage.js:713 +#: umc/js/udm/DetailPage.js:719 msgid "[Options]" msgstr "[Optionen]" -#: umc/js/udm/DetailPage.js:363 +#: umc/js/udm/DetailPage.js:369 msgid "[Policies]" msgstr "[Richtlinien]" @@ -995,7 +995,7 @@ msgid "computers" msgstr "Rechner" -#: umc/js/udm/DetailPage.js:1093 umc/js/udm/DetailPage.js:1121 +#: umc/js/udm/DetailPage.js:1098 umc/js/udm/DetailPage.js:1126 msgid "edit" msgstr "bearbeiten" @@ -1008,7 +1008,6 @@ msgstr "Gruppen" #: umc/js/udm/ComboBox.js:336 -#, python-brace-format msgid "in {size} objects" msgstr "insgesamt {size} Objekte" @@ -1028,7 +1027,7 @@ msgid "network objects" msgstr "Netz-Objekte" -#: umc/js/udm/DetailPage.js:1078 +#: umc/js/udm/DetailPage.js:1083 msgid "not defined" msgstr "nicht gesetzt" Index: umc/js/udm.js =================================================================== --- umc/js/udm.js (Revision 53489) +++ umc/js/udm.js (Arbeitskopie) @@ -1508,6 +1508,10 @@ } else { this.selectChild(this._detailPage); } + this._detailPage.ready().then(function() { + }, lang.hitch(this, function() { + this.closeDetailPage(); + })); }, closeDetailPage: function() { Index: umc/python/udm/de.po =================================================================== --- umc/python/udm/de.po (Revision 53489) +++ umc/python/udm/de.po (Arbeitskopie) @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: univention-management-console-module-udm\n" "Report-Msgid-Bugs-To: packages@univention.de\n" -"POT-Creation-Date: 2014-09-02 17:08+0200\n" +"POT-Creation-Date: 2014-09-09 16:16+0200\n" "PO-Revision-Date: 2011-11-03 12:26+0100\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,12 +12,12 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: umc/python/udm/__init__.py:315 +#: umc/python/udm/__init__.py:319 #, python-format msgid "%($dn$)s moved" msgstr "%($dn$)s verschoben" -#: umc/python/udm/__init__.py:1161 +#: umc/python/udm/__init__.py:1179 #, python-format msgid "An error occurred while sending the request: %s" msgstr "Ein Fehler ist während des Anforderns aufgetreten: %s" @@ -26,23 +26,22 @@ msgid "Cannot connect to the LDAP service." msgstr "Konnte nicht zum LDAP-Dienst verbinden." -#: umc/python/udm/__init__.py:1145 +#: umc/python/udm/__init__.py:1163 msgid "Cannot parse License from LDAP" msgstr "Fehler beim Auslesen der Lizenz aus dem LDAP" -#: umc/python/udm/__init__.py:386 +#: umc/python/udm/__init__.py:556 #, python-format -msgid "Could not find a matching UDM module for the LDAP object %s" -msgstr "" -"Es konnte kein passendes UDM-Modul für das LDAP-Object %s gefunden werden" +msgid "Could not find LDAP object : %s" +msgstr "Das LDAP-Objekt konnte nicht gefunden werden: %s" -#: umc/python/udm/udm_ldap.py:364 umc/python/udm/__init__.py:505 +#: umc/python/udm/udm_ldap.py:364 umc/python/udm/__init__.py:510 #, python-format msgid "Could not find an UDM module for the superordinate object %s" msgstr "" "Es konnte kein UDM-Modul für das übergeordnete Objekt %s gefunden werden" -#: umc/python/udm/__init__.py:322 +#: umc/python/udm/__init__.py:326 msgid "Could not identify the given LDAP object" msgstr "Das LDAP-Objekt konnte nicht identifiziert werden" @@ -58,24 +57,29 @@ msgid "Install the latest software updates" msgstr "Installieren Sie alle Softwareaktualisierungen" -#: umc/python/udm/__init__.py:344 umc/python/udm/__init__.py:376 +#: umc/python/udm/__init__.py:348 umc/python/udm/__init__.py:380 msgid "Invalid object definition" msgstr "Ungültige Objektdefinition" -#: umc/python/udm/__init__.py:382 +#: umc/python/udm/__init__.py:386 msgid "LDAP DN of object missing" msgstr "Die LDAP-DN des Objektes fehlt" -#: umc/python/udm/__init__.py:302 +#: umc/python/udm/__init__.py:306 #, python-format msgid "LDAP error: %s." msgstr "LDAP-Fehler: %s." -#: umc/python/udm/__init__.py:417 +#: umc/python/udm/__init__.py:422 umc/python/udm/__init__.py:551 msgid "LDAP object could not be identified" msgstr "Das LDAP-Objekt konnte nicht identifiziert werden" -#: umc/python/udm/__init__.py:178 +#: umc/python/udm/__init__.py:553 +#, python-format +msgid "LDAP object exists, but cannot be opened: %s" +msgstr "Das LDAP-Objekt existiert, konnte aber nicht geöffnet werden: %s" + +#: umc/python/udm/__init__.py:182 msgid "License not found. During this session add and modify are disabled." msgstr "" "Keine Lizenz gefunden. Während dieser Sitzung ist das Hinzufügen und " @@ -92,12 +96,12 @@ msgid "More than one object has been found." msgstr "Es wurde mehr als ein Objekt gefunden" -#: umc/python/udm/__init__.py:315 +#: umc/python/udm/__init__.py:319 #, python-format msgid "Moving %d object(s)" msgstr "Verschiebe %d Objekt(e)" -#: umc/python/udm/__init__.py:125 +#: umc/python/udm/__init__.py:129 msgid "No flavor or valid UDM module name specified" msgstr "Keine gültige Variante oder existierendes UDM-Modul wurden angegeben" @@ -105,24 +109,24 @@ msgid "No license has been found." msgstr "Es wurde keine Lizenz gefunden" -#: umc/python/udm/udm_ldap.py:791 +#: umc/python/udm/udm_ldap.py:792 msgid "None" msgstr "Keins" -#: umc/python/udm/udm_ldap.py:594 +#: umc/python/udm/udm_ldap.py:595 msgid "Objects referencing this policy object" msgstr "Objekte, die dieses Richtlinien-Objekt referenzieren" -#: umc/python/udm/__init__.py:571 +#: umc/python/udm/__init__.py:589 msgid "PDF document" msgstr "PDF Dokument" -#: umc/python/udm/udm_ldap.py:303 umc/python/udm/__init__.py:847 +#: umc/python/udm/udm_ldap.py:303 umc/python/udm/__init__.py:865 #, python-format msgid "Property %s not found" msgstr "Die Eigenschaft %s wurde nicht gefunden" -#: umc/python/udm/udm_ldap.py:594 +#: umc/python/udm/udm_ldap.py:595 msgid "Referencing objects" msgstr "Referenzierende Objekte" @@ -145,7 +149,7 @@ "Die LDAP-Basis der Lizenz stimmt nicht mit der LDAP-Basis der UCS-Domäne " "(%s) überein." -#: umc/python/udm/__init__.py:320 +#: umc/python/udm/__init__.py:324 msgid "The destination is missing" msgstr "Das Ziel fehlt" @@ -188,11 +192,11 @@ "Begrenzung der Anzahl an Treffern beträgt %s und kann mit der UCR-Variable " "directory/manager/web/sizelimit angepasst werden." -#: umc/python/udm/__init__.py:324 +#: umc/python/udm/__init__.py:328 msgid "This object can not be moved" msgstr "Das Objekt kann nicht verschoben werden" -#: umc/python/udm/__init__.py:208 +#: umc/python/udm/__init__.py:212 msgid "" "You are currently using the \"Free for personal use\" edition of Univention " "Corporate Server." @@ -200,7 +204,7 @@ "Sie verwenden derzeit die \"Free for personal use\" Ausgabe von Univention " "Corporate Server." -#: umc/python/udm/__init__.py:198 +#: umc/python/udm/__init__.py:202 msgid "" "You have too many DVS client accounts for your license. During this session " "add and modify are disabled." @@ -208,7 +212,7 @@ "Sie haben mehr DVS-Client-Konten, als Ihre Lizenz erlaubt. Während dieser " "Sitzung ist das Hinzufügen und Bearbeiten von Objekten nicht möglich." -#: umc/python/udm/__init__.py:196 +#: umc/python/udm/__init__.py:200 msgid "" "You have too many DVS user accounts for your license. During this session " "add and modify are disabled." @@ -216,7 +220,7 @@ "Sie haben mehr DVS-Benutzerkonten, als Ihre Lizenz erlaubt. Während dieser " "Sitzung ist das Hinzufügen und Bearbeiten von Objekten nicht möglich." -#: umc/python/udm/__init__.py:184 +#: umc/python/udm/__init__.py:188 msgid "" "You have too many client accounts for your license. During this session add " "and modify are disabled." @@ -224,7 +228,7 @@ "Sie haben mehr Benutzerkonten, als Ihre Lizenz erlaubt. Während dieser " "Sitzung ist das Hinzufügen und Bearbeiten von Objekten nicht möglich." -#: umc/python/udm/__init__.py:190 +#: umc/python/udm/__init__.py:194 msgid "" "You have too many corporate client accounts for your license. During this " "session add and modify are disabled." @@ -233,7 +237,7 @@ "Während dieser Sitzung ist das Hinzufügen und Bearbeiten von Objekten nicht " "möglich." -#: umc/python/udm/__init__.py:192 +#: umc/python/udm/__init__.py:196 msgid "" "You have too many desktop accounts for your license. During this session add " "and modify are disabled." @@ -241,7 +245,7 @@ "Sie haben mehr Desktop Rechner, als Ihre Lizenz erlaubt. Während dieser " "Sitzung ist das Hinzufügen und Bearbeiten von Objekten nicht möglich." -#: umc/python/udm/__init__.py:194 +#: umc/python/udm/__init__.py:198 msgid "" "You have too many groupware accounts for your license. During this session " "add and modify are disabled." @@ -249,7 +253,7 @@ "Sie haben mehr Groupware Konten, als Ihre Lizenz erlaubt. Während dieser " "Sitzung ist das Hinzufügen und Bearbeiten von Objekten nicht möglich." -#: umc/python/udm/__init__.py:188 +#: umc/python/udm/__init__.py:192 msgid "" "You have too many managed client accounts for your license. During this " "session add and modify are disabled." @@ -257,7 +261,7 @@ "Sie haben mehr Managed-Client-Konten, als Ihre Lizenz erlaubt. Während " "dieser Sitzung ist das Hinzufügen und Bearbeiten von Objekten nicht möglich." -#: umc/python/udm/__init__.py:186 +#: umc/python/udm/__init__.py:190 msgid "" "You have too many server accounts for your license. During this session add " "and modify are disabled." @@ -265,7 +269,7 @@ "Sie haben mehr Server-Konten, als Ihre Lizenz erlaubt. Während dieser " "Sitzung ist das Hinzufügen und Bearbeiten von Objekten nicht möglich." -#: umc/python/udm/__init__.py:180 umc/python/udm/__init__.py:182 +#: umc/python/udm/__init__.py:184 umc/python/udm/__init__.py:186 msgid "" "You have too many user accounts for your license. During this session add " "and modify are disabled." @@ -273,7 +277,7 @@ "Sie haben mehr Benutzerkonten, als Ihre Lizenz erlaubt. Während dieser " "Sitzung ist das Hinzufügen und Bearbeiten von Objekten nicht möglich." -#: umc/python/udm/__init__.py:206 +#: umc/python/udm/__init__.py:210 msgid "" "Your license does not allow modifications. During this session add and " "modify are disabled." @@ -281,14 +285,14 @@ "Die installierte Lizenz erlaubt keine Änderungen. Während dieser Sitzung ist " "das Hinzufügen und Bearbeiten von Objekten nicht möglich." -#: umc/python/udm/__init__.py:200 +#: umc/python/udm/__init__.py:204 msgid "" "Your license is expired. During this session add and modify are disabled." msgstr "" "Die Lizenz ist abgelaufen. Während dieser Sitzung ist das Hinzufügen und " "Bearbeiten von Objekten nicht möglich." -#: umc/python/udm/__init__.py:202 +#: umc/python/udm/__init__.py:206 msgid "" "Your license is not valid for your LDAP-Base. During this session add and " "modify are disabled." @@ -296,14 +300,14 @@ "Die installierte Linzenz wurde nicht für diese Basis-DN ausgestellt. Während " "dieser Sitzung ist das Hinzufügen und Bearbeiten von Objekten nicht möglich." -#: umc/python/udm/__init__.py:204 +#: umc/python/udm/__init__.py:208 msgid "" "Your license is not valid. During this session add and modify are disabled." msgstr "" "Ihre Lizenz ist nicht gültig. Während dieser Sitzung ist das Hinzufügen und " "Bearbeiten von Objekten nicht möglich." -#: umc/python/udm/__init__.py:210 +#: umc/python/udm/__init__.py:214 msgid "" "Your license status could not be validated. Thus, you are not eligible to " "support and maintenance. If you have bought a license, please contact " @@ -314,7 +318,7 @@ "Sie über eine Lizenz verfügen, wenden Sie sich bitte an Univention oder " "Ihren Univention Partner." -#: umc/python/udm/__init__.py:575 +#: umc/python/udm/__init__.py:593 msgid "text file" msgstr "Textdatei" @@ -328,15 +332,13 @@ #~ "Das LDAP-Objekt konnte nicht gefunden werden, es wurde wahrscheinlich " #~ "verschoben" -#~ msgid "Could not find LDAP object: %s" -#~ msgstr "Das LDAP-Objekt konnte nicht gefunden werden: %s" +#~ msgid "Could not find a matching UDM module for the LDAP object %s" +#~ msgstr "" +#~ "Es konnte kein passendes UDM-Modul für das LDAP-Object %s gefunden werden" #~ msgid "Failed to open LDAP object" #~ msgstr "Fehler beim öffnen des LDAP-Objekts" -#~ msgid "LDAP object exists, but cannot be opened: %s" -#~ msgstr "Das LDAP-Objekt existiert, konnte aber nicht geöffnet werden: %s" - #~ msgid "The license could not be imported: malformed LDIF format" #~ msgstr "" #~ "Die Lizenz konnte nich importiert werden: missgestaltetes LDIF-Format" Index: umc/python/udm/__init__.py =================================================================== --- umc/python/udm/__init__.py (Revision 53489) +++ umc/python/udm/__init__.py (Arbeitskopie) @@ -60,6 +60,8 @@ import univention.admin.objects as udm_objects import univention.admin.uexceptions as udm_errors +from univention.admin.uldap import explodeDn + from univention.config_registry import handler_set import univention.directory.reports as udr @@ -385,15 +387,16 @@ ldap_dn = properties[ '$dn$' ] module = get_module( request.flavor, ldap_dn ) if module is None: - raise UMC_OptionTypeError( _( 'Could not find a matching UDM module for the LDAP object %s' ) % ldap_dn ) - MODULE.info( 'Modifying LDAP object %s' % ldap_dn ) - if '$labelObjectType$' in properties: - del properties[ '$labelObjectType$' ] - try: - module.modify( properties ) - result.append( { '$dn$' : ldap_dn, 'success' : True } ) - except UDM_Error, e: - result.append( { '$dn$' : ldap_dn, 'success' : False, 'details' : str( e ) } ) + self.report_dn_error( ldap_dn, request ) + else: + MODULE.info( 'Modifying LDAP object %s' % ldap_dn ) + if '$labelObjectType$' in properties: + del properties[ '$labelObjectType$' ] + try: + module.modify( properties ) + result.append( { '$dn$' : ldap_dn, 'success' : True } ) + except UDM_Error, e: + result.append( { '$dn$' : ldap_dn, 'success' : False, 'details' : str( e ) } ) return result @@ -445,28 +448,28 @@ ldap_dn = self._user_dn module = get_module( request.flavor, ldap_dn ) if module is None: - MODULE.process( 'A module for the LDAP DN %s could not be found' % ldap_dn ) - continue - obj = module.get( ldap_dn ) - if obj: - props = obj.info - for passwd in module.password_properties: - if passwd in props: - del props[ passwd ] - props[ '$dn$' ] = obj.dn - props[ '$options$' ] = {} - for opt in module.get_options( udm_object = obj ): - props[ '$options$' ][ opt[ 'id' ] ] = opt[ 'value' ] - props[ '$policies$' ] = {} - for policy in obj.policies: - pol_mod = get_module( None, policy ) - if pol_mod and pol_mod.name: - props[ '$policies$' ][ pol_mod.name ] = policy - props[ '$labelObjectType$' ] = module.title; - props['$flags$'] = obj.oldattr.get('univentionObjectFlag', []), - result.append( props ) + self.report_dn_error( ldap_dn, request ) else: - MODULE.process( 'The LDAP object for the LDAP DN %s could not be found' % ldap_dn ) + obj = module.get( ldap_dn ) + if obj: + props = obj.info + for passwd in module.password_properties: + if passwd in props: + del props[ passwd ] + props[ '$dn$' ] = obj.dn + props[ '$options$' ] = {} + for opt in module.get_options( udm_object = obj ): + props[ '$options$' ][ opt[ 'id' ] ] = opt[ 'value' ] + props[ '$policies$' ] = {} + for policy in obj.policies: + pol_mod = get_module( None, policy ) + if pol_mod and pol_mod.name: + props[ '$policies$' ][ pol_mod.name ] = policy + props[ '$labelObjectType$' ] = module.title; + props['$flags$'] = obj.oldattr.get('univentionObjectFlag', []), + result.append( props ) + else: + MODULE.process( 'The LDAP object for the LDAP DN %s could not be found' % ldap_dn ) return result MODULE.info( 'Starting thread for udm/get request' ) @@ -539,6 +542,19 @@ notifier.Callback( self._thread_finished, request ) ) thread.run() + @LDAP_Connection + def report_dn_error(self, ldap_dn, request, ldap_connection = None, ldap_position = None ): + """ Report back to user that a error has occured because of a missing / not readable LDAP object """ + dn_part = explodeDn( ldap_dn )[ 0 ] + control_dn_list = ldap_connection.searchDn(dn_part) + if ldap_dn in control_dn_list: + result.append( { '$dn$' : ldap_dn, 'success' : False, 'details' : _( 'LDAP object could not be identified' ) } ) + MODULE.warn( 'LDAP object exists, but cannot be opened: %s' % ldap_dn ) + self.finished( request.id, None ,_('LDAP object exists, but cannot be opened: %s' ) % ldap_dn , success = False, status = '500') + else: + MODULE.warn( 'Could not find LDAP object %s' % ldap_dn ) + self.finished( request.id, None ,_( 'Could not find LDAP object : %s' ) % ldap_dn , success = False, status = '500') + def reports_query( self, request ): """Returns a list of reports for the given object type""" self.finished( request.id, self.reports_cfg.get_report_names( request.flavor ) ) Index: umc/python/udm/udm_ldap.py =================================================================== --- umc/python/udm/udm_ldap.py (Revision 53489) +++ umc/python/udm/udm_ldap.py (Arbeitskopie) @@ -589,12 +589,13 @@ layout = getattr( self.module, 'layout', [] ) if ldap_dn is not None: mod = get_module( None, ldap_dn ) - if self.name == mod.name and self.is_policy_module(): - layout = copy.copy( layout ) - tab = udm_layout.Tab( _( 'Referencing objects' ), _( 'Objects referencing this policy object' ), - layout = [ '_view_referencing_objects' ] - ) - layout.append(tab) + if mod: + if self.name == mod.name and self.is_policy_module(): + layout = copy.copy( layout ) + tab = udm_layout.Tab( _( 'Referencing objects' ), _( 'Objects referencing this policy object' ), + layout = [ '_view_referencing_objects' ] + ) + layout.append(tab) if layout and isinstance( layout[ 0 ], udm.tab ): return self._parse_old_layout( layout )