diff --git a/README.md b/README.md
index b291bbc3d..93881cc0b 100644
--- a/README.md
+++ b/README.md
@@ -78,18 +78,19 @@ We would like to give a special thank you 🤗 to the people from the community
- Alves, David
- Beck, Pedro
+- Beer, Christian (a.k.a [@ChristianBeer](https://www.github.com/ChristianBeer))
- Bilger, Jean-François
-- Bostoen, Jeffrey (a.k.a @jbostoen)
+- Bostoen, Jeffrey (a.k.a [@jbostoen](https://www.github.com/jbostoen))
- Cardoso, Anderson
- Cassaro, Bruno
-- Casteleyn, Thomas (a.k.a @Hipska)
+- Casteleyn, Thomas (a.k.a [@Hipska](https://www.github.com/Hipska))
- Castro, Randall Badilla
- Colantoni, Maria Laura
- Couronné, Guy
- Dvořák, Lukáš
- Goethals, Stefan
- Gumble, David
-- Kaltefleiter, Lars (a.k.a @larhip)
+- Kaltefleiter, Lars (a.k.a [@larhip](https://www.github.com/larhip))
- Khamit, Shamil
- Kincel, Martin
- Konečný, Kamil
@@ -98,12 +99,12 @@ We would like to give a special thank you 🤗 to the people from the community
- Lazcano, Federico
- Lucas, Jonathan
- Malik, Remie
-- Mindêllo de Andrade, Lucas (a.k.a @rokam)
+- Mindêllo de Andrade, Lucas (a.k.a [@rokam](https://www.github.com/rokam))
- Raenker, Martin
- Rosenke, Stephan
- Seki, Shoji
- Shilov, Vladimir
-- Stukalov, Ilya (a.k.a @ilya-stukalov)
+- Stukalov, Ilya (a.k.a [@ilya](https://www.github.com/ilya)-stukalov)
- Tulio, Marco
- Turrubiates, Miguel
diff --git a/application/displayblock.class.inc.php b/application/displayblock.class.inc.php
index e30242de0..59f752c55 100644
--- a/application/displayblock.class.inc.php
+++ b/application/displayblock.class.inc.php
@@ -476,7 +476,7 @@ class DisplayBlock
$oExceptionAlert = AlertUIBlockFactory::MakeForFailure('Cannot display results', $sExceptionContent);
$oHtml->AddSubBlock($oExceptionAlert);
}
- IssueLog::Error('Exception during GetDisplay: '.$e->getMessage());
+ ExceptionLog::LogException($e);
}
} else {
// render it as an Ajax (asynchronous) call
diff --git a/application/ui.extkeywidget.class.inc.php b/application/ui.extkeywidget.class.inc.php
index 4cec8e222..4162ebcfe 100644
--- a/application/ui.extkeywidget.class.inc.php
+++ b/application/ui.extkeywidget.class.inc.php
@@ -975,7 +975,7 @@ HTML
$oPage->add_ready_script(<< Sie haben das Zurücksetzen Ihres '.ITOP_APPLICATION_SHORT.' Passworts angefordert. Bitte folgen Sie diesem Link (funktioniert nur einmalig) : neues Passwort eingeben%1$s nicht gefunden',
'bkp-free-disk-space' => '%1$s frei in %2$s',
- 'bkp-dir-not-writeable' => '%1$s ist nicht schreibbar',
+ 'bkp-dir-not-writeable' => '%1$s ist nicht beschreibbar',
'bkp-wrong-format-spec' => 'Die verwendete Definition zur Formatierung von Dateinamen ist nicht korrekt (%1$s). Die Standard-Definition %2$s wird verwendet',
'bkp-name-sample' => 'Backup-Dateien werden abhängig von Datum, Zeit und Datenbank-Identifier erstellt. Beispiel: %1$s',
'bkp-week-days' => 'Backups werden jeden %1$s um %2$s durchgeführt',
- 'bkp-retention' => 'Mindestens %1$d Backups werden im Zielverzeichniss vorgehalten',
+ 'bkp-retention' => 'Mindestens %1$d Backups werden im Zielverzeichnis vorgehalten',
'bkp-next-to-delete' => 'Wird gelöscht, wenn das nächste Backup angelegt wird (unter Einstellungen "Menge vorhalten")',
'bkp-table-file' => 'Datei',
'bkp-table-file+' => 'Nur Dateien mit der Endung .zip werden als Backup-Dateien berücksichtigt.',
- 'bkp-table-size' => 'Grösse',
+ 'bkp-table-size' => 'Größe',
'bkp-table-size+' => '',
'bkp-table-actions' => 'Aktionen',
'bkp-table-actions+' => '',
@@ -51,7 +51,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'bkp-status-backups-manual' => 'Manuelle Backups',
'bkp-status-backups-none' => 'Kein Backup vorhanden',
'bkp-next-backup' => 'Das nächste Backup wird am %1$s (%2$s) um %3$s durchgeführt',
- 'bkp-next-backup-unknown' => 'The next backup is not scheduled yet.~~',
+ 'bkp-next-backup-unknown' => 'Das nächste Backup ist noch nicht geplant.',
'bkp-button-backup-now' => 'Starte Backup',
'bkp-button-restore-now' => 'Wiederherstellen!',
'bkp-confirm-backup' => 'Bitte bestätigen Sie, dass Sie jetzt ein Backup erstellen wollen.',
diff --git a/datamodels/2.x/itop-change-mgmt/dictionaries/de.dict.itop-change-mgmt.php b/datamodels/2.x/itop-change-mgmt/dictionaries/de.dict.itop-change-mgmt.php
index 457055b6f..a9590fcee 100644
--- a/datamodels/2.x/itop-change-mgmt/dictionaries/de.dict.itop-change-mgmt.php
+++ b/datamodels/2.x/itop-change-mgmt/dictionaries/de.dict.itop-change-mgmt.php
@@ -20,7 +20,7 @@
* @copyright Copyright (C) 2021 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
-*
+*
*/
Dict::Add('DE DE', 'German', 'Deutsch', array(
'Menu:ChangeManagement' => 'Change Management',
@@ -98,7 +98,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Change/Attribute:reject_reason+' => '',
'Class:Change/Attribute:changemanager_id' => 'Change Manager',
'Class:Change/Attribute:changemanager_id+' => '',
- 'Class:Change/Attribute:changemanager_email' => 'Change Manager Email',
+ 'Class:Change/Attribute:changemanager_email' => 'Change Manager E-Mail',
'Class:Change/Attribute:changemanager_email+' => '',
'Class:Change/Attribute:parent_id' => 'Parent Change',
'Class:Change/Attribute:parent_id+' => '',
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php
index 541257e33..4a6fe87e6 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php
@@ -20,7 +20,7 @@
* @copyright Copyright (C) 2021 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
-*
+*
*/
Dict::Add('DE DE', 'German', 'Deutsch', array(
'Relation:impacts/Description' => 'Elemente betroffen von',
@@ -32,6 +32,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Relation:depends on/Description' => 'Elemente, von denen dieses Element abhängt.',
'Relation:depends on/DownStream' => 'Hängt ab von ...',
'Relation:depends on/UpStream' => 'Wirkt auf ...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
));
@@ -264,13 +266,13 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:DatacenterDevice/Attribute:nb_u+' => '',
'Class:DatacenterDevice/Attribute:managementip' => 'Management-IP',
'Class:DatacenterDevice/Attribute:managementip+' => '',
- 'Class:DatacenterDevice/Attribute:powerA_id' => 'PowerA-Quelle',
+ 'Class:DatacenterDevice/Attribute:powerA_id' => 'Strom-A-Quelle',
'Class:DatacenterDevice/Attribute:powerA_id+' => '',
- 'Class:DatacenterDevice/Attribute:powerA_name' => 'PowerA-Quellenname',
+ 'Class:DatacenterDevice/Attribute:powerA_name' => 'Strom-A-Quellenname',
'Class:DatacenterDevice/Attribute:powerA_name+' => '',
- 'Class:DatacenterDevice/Attribute:powerB_id' => 'PowerB-Quelle',
+ 'Class:DatacenterDevice/Attribute:powerB_id' => 'Strom-B-Quelle',
'Class:DatacenterDevice/Attribute:powerB_id+' => '',
- 'Class:DatacenterDevice/Attribute:powerB_name' => 'PowerB-Quellenname',
+ 'Class:DatacenterDevice/Attribute:powerB_name' => 'Strom-B-Quellenname',
'Class:DatacenterDevice/Attribute:powerB_name+' => '',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list' => 'FC-Ports',
'Class:DatacenterDevice/Attribute:fiberinterfacelist_list+' => '',
@@ -313,7 +315,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Server+' => '',
'Class:Server/Attribute:osfamily_id' => 'OS Familie',
'Class:Server/Attribute:osfamily_id+' => '',
- 'Class:Server/Attribute:osfamily_name' => 'OS-Famillenname',
+ 'Class:Server/Attribute:osfamily_name' => 'OS-Familienname',
'Class:Server/Attribute:osfamily_name+' => '',
'Class:Server/Attribute:osversion_id' => 'OS Version',
'Class:Server/Attribute:osversion_id+' => '',
@@ -1109,7 +1111,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Model/Attribute:type/Value:TapeLibrary+' => '',
'Class:Model/Attribute:type/Value:Phone' => 'Telefon',
'Class:Model/Attribute:type/Value:Phone+' => '',
- 'Class:Model/Attribute:physicaldevices_list' => 'Phyische Geräte',
+ 'Class:Model/Attribute:physicaldevices_list' => 'Physische Geräte',
'Class:Model/Attribute:physicaldevices_list+' => '',
'Class:Model/UniquenessRule:name_brand+' => 'Der Modellname für eine Marke muss eindeutig sein',
'Class:Model/UniquenessRule:name_brand' => 'Es existiert bereits ein Modell mit diesem Namen für diese Marke',
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php
index e3f3944db..387b8b4c1 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php
@@ -36,6 +36,8 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
'Relation:depends on/Description' => 'Elementos de los cuales depende',
'Relation:depends on/DownStream' => 'Depende de...',
'Relation:depends on/UpStream' => 'Impactos...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php
index e7fe025b4..03948b68c 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php
@@ -29,6 +29,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
'Relation:depends on/Description' => 'Konfigurációs elemtől függnek',
'Relation:depends on/DownStream' => 'Függőségek',
'Relation:depends on/UpStream' => 'Hatások',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php
index cd147da45..d0de9f1db 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php
@@ -29,6 +29,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
'Relation:depends on/Description' => 'Elementi di questo elemento dipende da',
'Relation:depends on/DownStream' => 'Dipende da...',
'Relation:depends on/UpStream' => 'Impatto...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php
index 991ace7b7..9b4e93c7f 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php
@@ -29,6 +29,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'Relation:depends on/Description' => 'この要素が依存している要素',
'Relation:depends on/DownStream' => '依存...',
'Relation:depends on/UpStream' => 'インパクト...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php
index d5d22ed58..f6662efe8 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php
@@ -41,6 +41,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'Relation:depends on/Description' => 'Elementen waarvan dit object afhankelijk van is',
'Relation:depends on/DownStream' => 'Is afhankelijk van...',
'Relation:depends on/UpStream' => 'Impact op...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php
index 559281798..b82b0c1d1 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php
@@ -35,6 +35,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'Relation:depends on/Description' => 'Elementos estes, que dependem deste elemento',
'Relation:depends on/DownStream' => 'Depende de...',
'Relation:depends on/UpStream' => 'Impactos...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php
index 55cbc8d25..cb7e9daab 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php
@@ -22,6 +22,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
'Relation:depends on/Description' => 'Элементы, от которых зависит',
'Relation:depends on/DownStream' => 'Зависит от...',
'Relation:depends on/UpStream' => 'Влияет на...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php
index ddf37ffe3..a2a7691ab 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php
@@ -34,6 +34,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Relation:depends on/Description' => 'Prvky, od ktorých závisí tento prvok',
'Relation:depends on/DownStream' => 'Depends on...~~',
'Relation:depends on/UpStream' => 'Impacts...~~',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php
index b5c3cac66..02736e099 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php
@@ -36,6 +36,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Relation:depends on/Description' => 'Bu kaleme bağımlı olan kalemler',
'Relation:depends on/DownStream' => 'Bağımlı olanlar...',
'Relation:depends on/UpStream' => 'Etkiledikleri...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php
index e5a92ad74..eb9177d51 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php
@@ -34,6 +34,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'Relation:depends on/Description' => '该元素依赖的元素...',
'Relation:depends on/DownStream' => '依赖于...',
'Relation:depends on/UpStream' => '影响...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
));
diff --git a/datamodels/2.x/itop-core-update/dictionaries/cs.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/cs.dict.itop-core-update.php
index 245aecdb9..b01641e6d 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/cs.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/cs.dict.itop-core-update.php
@@ -75,8 +75,9 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Application can be updated~~',
'iTopUpdate:UI:CanCoreUpdate:No' => 'Application cannot be updated: %1$s~~',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Warning: application update can fail: %1$s~~',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
- 'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CheckInProgress'=>'Please wait during integrity check~~',
// Setup Messages
'iTopUpdate:UI:SetupMessage:Ready' => 'Ready to start~~',
diff --git a/datamodels/2.x/itop-core-update/dictionaries/da.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/da.dict.itop-core-update.php
index dac4a2799..a670452e7 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/da.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/da.dict.itop-core-update.php
@@ -75,8 +75,9 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Application can be updated~~',
'iTopUpdate:UI:CanCoreUpdate:No' => 'Application cannot be updated: %1$s~~',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Warning: application update can fail: %1$s~~',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
- 'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CheckInProgress'=>'Please wait during integrity check~~',
// Setup Messages
'iTopUpdate:UI:SetupMessage:Ready' => 'Ready to start~~',
diff --git a/datamodels/2.x/itop-core-update/dictionaries/de.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/de.dict.itop-core-update.php
index 5eb796ee2..b9fe8a512 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/de.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/de.dict.itop-core-update.php
@@ -74,9 +74,10 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'iTopUpdate:UI:CanCoreUpdate:Failed' => 'Dateisystemprüfung fehlgeschlagen',
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Anwendungsupgrade kann durchgeführt werden',
'iTopUpdate:UI:CanCoreUpdate:No' => 'Anwendungsupgrade nicht möglich: %1$s',
- 'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Vorsicht: App-Upgrade kann fehlerschlagen: %1$s',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Einige angepasste Dateien wurden erkannt, eine Teil-Update kann nicht ausgeführt werden.
Befolgen Sie das Verfahren, um Ihr iTop manuell zu aktualisieren. Sie müssen das Setup benutzen, um Ihre Applikation zu aktualisieren.
',
- 'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
+ 'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Vorsicht: App-Upgrade kann fehlschlagen: %1$s',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Einige angepasste Dateien wurden erkannt, eine Teil-Update kann nicht ausgeführt werden.
Befolgen Sie das Verfahren, um Ihr iTop manuell zu aktualisieren. Sie müssen das Setup benutzen, um Ihre Applikation zu aktualisieren.
',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Einige neue Module wurden erkannt, eine Teil-Update kann nicht ausgeführt werden.
Befolgen Sie das Verfahren, um Ihr iTop manuell zu aktualisieren. Sie müssen das Setup benutzen, um Ihre Applikation zu aktualisieren.
',
+ 'iTopUpdate:UI:CheckInProgress'=>'Please wait during integrity check~~',
// Setup Messages
'iTopUpdate:UI:SetupMessage:Ready' => 'Bereit zum Upgrade',
@@ -87,7 +88,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'iTopUpdate:UI:SetupMessage:CheckCompile' => 'Prüfung des Anwendungsupgrades',
'iTopUpdate:UI:SetupMessage:Compile' => 'Upgrade von Anwendung und Datenbank',
'iTopUpdate:UI:SetupMessage:UpdateDatabase' => 'Upgrade Datenbank',
- 'iTopUpdate:UI:SetupMessage:ExitMaintenance' => 'Wartungsmodus deaktivert',
+ 'iTopUpdate:UI:SetupMessage:ExitMaintenance' => 'Wartungsmodus deaktiviert',
'iTopUpdate:UI:SetupMessage:UpdateDone' => 'Upgrade abgeschlossen',
// Errors
@@ -116,5 +117,3 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:ModuleInstallation/Attribute:version' => 'Version',
'Class:ModuleInstallation/Attribute:comment' => 'Kommentar',
));
-
-
diff --git a/datamodels/2.x/itop-core-update/dictionaries/en.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/en.dict.itop-core-update.php
index 2a85f789a..d3afe6a06 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/en.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/en.dict.itop-core-update.php
@@ -75,8 +75,9 @@ Dict::Add('EN US', 'English', 'English', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Application can be updated',
'iTopUpdate:UI:CanCoreUpdate:No' => 'Application cannot be updated: %1$s',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Warning: application update can fail: %1$s',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.',
- 'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.',
+ 'iTopUpdate:UI:CheckInProgress'=>'Please wait during integrity check',
diff --git a/datamodels/2.x/itop-core-update/dictionaries/es_cr.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/es_cr.dict.itop-core-update.php
index 9b4d59793..19222828d 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/es_cr.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/es_cr.dict.itop-core-update.php
@@ -76,8 +76,9 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'La aplicación puede ser actualizada',
'iTopUpdate:UI:CanCoreUpdate:No' => 'La aplicación no puede ser actualizada: %1$s',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Advertencia: la actualización de la aplicación puede fallar: %1$s',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
- 'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CheckInProgress'=>'Please wait during integrity check~~',
// Setup Messages
'iTopUpdate:UI:SetupMessage:Ready' => 'Listo para empezar',
diff --git a/datamodels/2.x/itop-core-update/dictionaries/fr.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/fr.dict.itop-core-update.php
index 1f116f353..caa41f9a1 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/fr.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/fr.dict.itop-core-update.php
@@ -75,8 +75,9 @@ Dict::Add('FR FR', 'French', 'Français', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'L\'application peut être mise à jour',
'iTopUpdate:UI:CanCoreUpdate:No' => 'L\'application ne peut pas être mise à jour : %1$s',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Attention : la mise à jour de l\'application peut échouer : %1$s',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Des fichiers modifiés ont été détectés, une mise à jour partielle ne peut pas être effectuée.
Suivez la procedure pour mettre à jour manuellement votre iTop. Vous devez utiliser la page d\'installation pour mettre à jour l\'application.',
- 'iTopUpdate:UI:CheckInProgress' => 'Veuillez patienter pendant la vérification des fichiers',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Des fichiers modifiés ont été détectés, une mise à jour partielle ne peut pas être effectuée.
Suivez la procedure pour mettre à jour manuellement votre iTop. Vous devez utiliser la page d\'installation pour mettre à jour l\'application.',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'De nouveaux modules ont été détectés, une mise à jour partielle ne peut pas être effectuée.
Suivez la procedure pour mettre à jour manuellement votre iTop. Vous devez utiliser la page d\'installation pour mettre à jour l\'application.',
+ 'iTopUpdate:UI:CheckInProgress'=>'Veuillez patienter pendant la vérification d\'intégrité',
// Setup Messages
'iTopUpdate:UI:SetupMessage:Ready' => 'Prêt pour l\\installation',
diff --git a/datamodels/2.x/itop-core-update/dictionaries/hu.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/hu.dict.itop-core-update.php
index 172dde5a1..f0722a306 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/hu.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/hu.dict.itop-core-update.php
@@ -75,7 +75,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Application can be updated~~',
'iTopUpdate:UI:CanCoreUpdate:No' => 'Application cannot be updated: %1$s~~',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Warning: application update can fail: %1$s~~',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
// Setup Messages
diff --git a/datamodels/2.x/itop-core-update/dictionaries/it.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/it.dict.itop-core-update.php
index 3c1c77623..065428023 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/it.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/it.dict.itop-core-update.php
@@ -75,7 +75,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Application can be updated~~',
'iTopUpdate:UI:CanCoreUpdate:No' => 'Application cannot be updated: %1$s~~',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Warning: application update can fail: %1$s~~',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
// Setup Messages
diff --git a/datamodels/2.x/itop-core-update/dictionaries/ja.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/ja.dict.itop-core-update.php
index 0f5a4b805..082652544 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/ja.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/ja.dict.itop-core-update.php
@@ -75,7 +75,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Application can be updated~~',
'iTopUpdate:UI:CanCoreUpdate:No' => 'Application cannot be updated: %1$s~~',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Warning: application update can fail: %1$s~~',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
// Setup Messages
diff --git a/datamodels/2.x/itop-core-update/dictionaries/nl.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/nl.dict.itop-core-update.php
index b8aa12230..3a354b4c0 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/nl.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/nl.dict.itop-core-update.php
@@ -77,7 +77,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Updaten van toepassing is mogelijk',
'iTopUpdate:UI:CanCoreUpdate:No' => 'Updaten van de toepassing is niet mogelijk: %1$s',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Warning: application update can fail: %1$s~~',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
// Setup Messages
diff --git a/datamodels/2.x/itop-core-update/dictionaries/pl.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/pl.dict.itop-core-update.php
index bb161dcdb..69742407f 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/pl.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/pl.dict.itop-core-update.php
@@ -75,7 +75,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Aplikacja może być zaktualizowana',
'iTopUpdate:UI:CanCoreUpdate:No' => 'Nie można zaktualizować aplikacji: %1$s',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Ostrzeżenie: aktualizacja aplikacji może się nie powieść: %1$s',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
// Setup Messages
diff --git a/datamodels/2.x/itop-core-update/dictionaries/pt_br.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/pt_br.dict.itop-core-update.php
index 23f9e1620..6ac9e240e 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/pt_br.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/pt_br.dict.itop-core-update.php
@@ -75,7 +75,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Aplicação pode ser atualizada',
'iTopUpdate:UI:CanCoreUpdate:No' => 'Aplicação não pode ser atualizada: %1$s',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Atenção: a atualização da aplicação pode falhar: %1$s',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
// Setup Messages
diff --git a/datamodels/2.x/itop-core-update/dictionaries/ru.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/ru.dict.itop-core-update.php
index b77889238..1f48f2fec 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/ru.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/ru.dict.itop-core-update.php
@@ -63,7 +63,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Приложение может быть обновлено',
'iTopUpdate:UI:CanCoreUpdate:No' => 'Приложение не может быть обновлено: %1$s',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Warning: application update can fail: %1$s~~',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
// Setup Messages
diff --git a/datamodels/2.x/itop-core-update/dictionaries/sk.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/sk.dict.itop-core-update.php
index 83ceca4e3..b0233d6e8 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/sk.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/sk.dict.itop-core-update.php
@@ -75,7 +75,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Application can be updated~~',
'iTopUpdate:UI:CanCoreUpdate:No' => 'Application cannot be updated: %1$s~~',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Warning: application update can fail: %1$s~~',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
// Setup Messages
diff --git a/datamodels/2.x/itop-core-update/dictionaries/tr.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/tr.dict.itop-core-update.php
index 47777b455..8a45ab3bd 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/tr.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/tr.dict.itop-core-update.php
@@ -75,7 +75,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => 'Application can be updated~~',
'iTopUpdate:UI:CanCoreUpdate:No' => 'Application cannot be updated: %1$s~~',
'iTopUpdate:UI:CanCoreUpdate:Warning' => 'Warning: application update can fail: %1$s~~',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
// Setup Messages
diff --git a/datamodels/2.x/itop-core-update/dictionaries/zh_cn.dict.itop-core-update.php b/datamodels/2.x/itop-core-update/dictionaries/zh_cn.dict.itop-core-update.php
index f4897936c..2fc07729d 100644
--- a/datamodels/2.x/itop-core-update/dictionaries/zh_cn.dict.itop-core-update.php
+++ b/datamodels/2.x/itop-core-update/dictionaries/zh_cn.dict.itop-core-update.php
@@ -75,7 +75,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
'iTopUpdate:UI:CanCoreUpdate:Yes' => '应用无法升级',
'iTopUpdate:UI:CanCoreUpdate:No' => '应用无法升级: %1$s',
'iTopUpdate:UI:CanCoreUpdate:Warning' => '警告: 应用升级可能失败: %1$s',
- 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateUseSetup' => 'Some modified files were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
+ 'iTopUpdate:UI:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
'iTopUpdate:UI:CheckInProgress' => 'Please wait during integrity check~~',
// Setup Messages
diff --git a/datamodels/2.x/itop-core-update/src/Service/CoreUpdater.php b/datamodels/2.x/itop-core-update/src/Service/CoreUpdater.php
index 7a181f70e..f69b9f86b 100644
--- a/datamodels/2.x/itop-core-update/src/Service/CoreUpdater.php
+++ b/datamodels/2.x/itop-core-update/src/Service/CoreUpdater.php
@@ -9,6 +9,7 @@
namespace Combodo\iTop\CoreUpdate\Service;
+use Combodo\iTop\FilesInformation\Service\FileIntegrityException;
use Combodo\iTop\FilesInformation\Service\FilesIntegrity;
use DBBackup;
use Dict;
@@ -535,7 +536,11 @@ final class CoreUpdater
SetupLog::Info('itop-core-update: Archive extracted, check files integrity');
// Check files integrity
- FilesIntegrity::CheckInstallationIntegrity(self::UPDATE_DIR.'web/', true);
+ $sRootPath = self::UPDATE_DIR.'web/';
+ FilesIntegrity::CheckInstallationIntegrity($sRootPath);
+
+ ///Check new modules
+ self::CheckNewModules($sRootPath);
SetupLog::Info('itop-core-update: Files integrity OK');
} catch (Exception $e)
@@ -604,4 +609,38 @@ final class CoreUpdater
throw $e;
}
}
+
+ /**
+ * Check if new modules (not already installed) are present, and throw an exception if that is the case as core update doesn't know how to install them automatically for know
+ *
+ * @param string $sRootPath
+ *
+ * @throws \ApplicationException
+ * @since 2.7.7 3.0.1
+ */
+ private static function CheckNewModules($sRootPath)
+ {
+ $aFilesInfo = FilesIntegrity::GetInstalledFiles($sRootPath.'manifest.xml');
+
+ if ($aFilesInfo === false) {
+ throw new FileIntegrityException(Dict::Format('FilesInformation:Error:MissingFile', 'manifest.xml'));
+ }
+
+ @clearstatcache();
+ $sSourceDir = MetaModel::GetConfig()->Get('source_dir');
+ foreach ($aFilesInfo as $aFileInfo) {
+ if (strpos($aFileInfo['path'], $sSourceDir) === 0) {
+ $aFilePath = explode('/', $aFileInfo['path']);
+ $sFolderPath = $aFilePath[0].'/'.$aFilePath[1].'/'.$aFilePath[2];
+ //if module don't already exist in itop and if module listed in manifest.xml is included in zip
+ if (!is_dir(APPROOT.'/'.$sFolderPath) && !is_file(APPROOT.'/'.$sFolderPath)
+ && is_dir($sRootPath.'/'.$sFolderPath)) {
+ $sLink = utils::GetAbsoluteUrlAppRoot().'setup/';
+ $sLinkManualUpdate = 'https://www.itophub.io/wiki/page?id='.utils::GetItopVersionWikiSyntax().'%3Ainstall%3Aupgrading_itop#manually';
+ throw new FileIntegrityException(Dict::Format('iTopUpdate:UI:CannotUpdateNewModules' , $sLink, $sLinkManualUpdate));
+ }
+ }
+ // Packed with missing files...
+ }
+ }
}
diff --git a/datamodels/2.x/itop-core-update/view/SelectUpdateFile.ready.js.twig b/datamodels/2.x/itop-core-update/view/SelectUpdateFile.ready.js.twig
index dbffbb97c..a7ed94e22 100644
--- a/datamodels/2.x/itop-core-update/view/SelectUpdateFile.ready.js.twig
+++ b/datamodels/2.x/itop-core-update/view/SelectUpdateFile.ready.js.twig
@@ -17,6 +17,7 @@ $.ajax({
if(data.sMessageDetails){
$("#header-requirements-details").removeClass("ibo-is-hidden");
$('#can-core-update-details').html(data.sMessageDetails);
+ $("#toggle-requirements-details").click( function() { $("#can-core-update-details").toggle(); } );
}
oRequirements.removeClass("ibo-is-information");
if (data.bStatus) {
diff --git a/datamodels/2.x/itop-datacenter-mgmt/dictionaries/pl.dict.itop-datacenter-mgmt.php b/datamodels/2.x/itop-datacenter-mgmt/dictionaries/pl.dict.itop-datacenter-mgmt.php
index 59947701f..0c350b28d 100644
--- a/datamodels/2.x/itop-datacenter-mgmt/dictionaries/pl.dict.itop-datacenter-mgmt.php
+++ b/datamodels/2.x/itop-datacenter-mgmt/dictionaries/pl.dict.itop-datacenter-mgmt.php
@@ -1,26 +1,26 @@
-
- */
-
-Dict::Add('PL PL', 'Polish', 'Polski', array(
- // Dictionary entries go here
-));
+
+ */
+
+Dict::Add('PL PL', 'Polish', 'Polski', array(
+ // Dictionary entries go here
+));
diff --git a/datamodels/2.x/itop-endusers-devices/dictionaries/pl.dict.itop-endusers-devices.php b/datamodels/2.x/itop-endusers-devices/dictionaries/pl.dict.itop-endusers-devices.php
index 59947701f..0c350b28d 100644
--- a/datamodels/2.x/itop-endusers-devices/dictionaries/pl.dict.itop-endusers-devices.php
+++ b/datamodels/2.x/itop-endusers-devices/dictionaries/pl.dict.itop-endusers-devices.php
@@ -1,26 +1,26 @@
-
- */
-
-Dict::Add('PL PL', 'Polish', 'Polski', array(
- // Dictionary entries go here
-));
+
+ */
+
+Dict::Add('PL PL', 'Polish', 'Polski', array(
+ // Dictionary entries go here
+));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/cs.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/cs.dict.itop-files-information.php
index 3f0f5c75b..a0e286fe3 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/cs.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/cs.dict.itop-files-information.php
@@ -24,8 +24,8 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Missing file: %1$s~~',
'FilesInformation:Error:CorruptedFile' => 'File %1$s is corrupted~~',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
'FilesInformation:Error:CantWriteToFile' => 'Can not write to file %1$s~~',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/da.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/da.dict.itop-files-information.php
index 1ab48d49b..8c685a013 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/da.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/da.dict.itop-files-information.php
@@ -24,8 +24,8 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Missing file: %1$s~~',
'FilesInformation:Error:CorruptedFile' => 'File %1$s is corrupted~~',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
'FilesInformation:Error:CantWriteToFile' => 'Can not write to file %1$s~~',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/de.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/de.dict.itop-files-information.php
index ba6a42ac2..fb7003cf8 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/de.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/de.dict.itop-files-information.php
@@ -24,9 +24,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Fehlende Datei: %1$s',
'FilesInformation:Error:CorruptedFile' => 'Datei %1$s ist beschädigt',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
'FilesInformation:Error:CantWriteToFile' => 'Datei %1$s kann nicht geschrieben werden',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Einige neue Module wurden erkannt, eine Teil-Update kann nicht ausgeführt werden.
Befolgen Sie das Verfahren, um Ihr iTop manuell zu aktualisieren. Sie müssen das Setup benutzen, um Ihre Applikation zu aktualisieren.
',
-
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/en.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/en.dict.itop-files-information.php
index bbf2dac67..ebbb32cc3 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/en.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/en.dict.itop-files-information.php
@@ -25,8 +25,8 @@ Dict::Add('EN US', 'English', 'English', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Missing file: %1$s',
'FilesInformation:Error:CorruptedFile' => 'File %1$s is corrupted',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s ',
'FilesInformation:Error:CantWriteToFile' => 'Can not write to file %1$s',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.',
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/es_cr.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/es_cr.dict.itop-files-information.php
index 2faa1fd97..d1430ca9a 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/es_cr.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/es_cr.dict.itop-files-information.php
@@ -25,8 +25,8 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Archivo faltante: %1$s',
'FilesInformation:Error:CorruptedFile' => 'El archivo %1$s está corrupto',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
'FilesInformation:Error:CantWriteToFile' => 'No se puede escribir al archivo %1$s',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/fr.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/fr.dict.itop-files-information.php
index 60c6af913..68d9066df 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/fr.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/fr.dict.itop-files-information.php
@@ -24,9 +24,8 @@ Dict::Add('FR FR', 'French', 'Français', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Ficher manquant : %1$s',
'FilesInformation:Error:CorruptedFile' => 'Le fichier %1$s est corrompu',
+ 'FilesInformation:Error:ListCorruptedFile' => 'Fichier(s) corrompu(s): %1$s',
'FilesInformation:Error:CantWriteToFile' => 'Impossible de modifier le fichier %1$s',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'De nouveaux modules ont été détectés, une mise à jour partielle ne peut pas être effectuée.
Suivez la procedure pour mettre à jour manuellement votre iTop. Vous devez utiliser la page d\'installation pour mettre à jour l\'application.',
-
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/hu.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/hu.dict.itop-files-information.php
index 60528771c..f98b71305 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/hu.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/hu.dict.itop-files-information.php
@@ -24,8 +24,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Missing file: %1$s~~',
'FilesInformation:Error:CorruptedFile' => 'File %1$s is corrupted~~',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
'FilesInformation:Error:CantWriteToFile' => 'Can not write to file %1$s~~',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/it.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/it.dict.itop-files-information.php
index 4fb5670c1..04e3e7eff 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/it.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/it.dict.itop-files-information.php
@@ -24,8 +24,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Missing file: %1$s~~',
'FilesInformation:Error:CorruptedFile' => 'File %1$s is corrupted~~',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
'FilesInformation:Error:CantWriteToFile' => 'Can not write to file %1$s~~',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/ja.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/ja.dict.itop-files-information.php
index 18a46d644..8c9e04327 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/ja.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/ja.dict.itop-files-information.php
@@ -24,8 +24,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Missing file: %1$s~~',
'FilesInformation:Error:CorruptedFile' => 'File %1$s is corrupted~~',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
'FilesInformation:Error:CantWriteToFile' => 'Can not write to file %1$s~~',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/nl.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/nl.dict.itop-files-information.php
index 6afda2893..e6a9d8f6a 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/nl.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/nl.dict.itop-files-information.php
@@ -26,8 +26,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Ontbrekend bestand: %1$s',
'FilesInformation:Error:CorruptedFile' => 'Corrupt bestand: %1$s',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
'FilesInformation:Error:CantWriteToFile' => 'Kan niet schrijven naar bestand %1$s',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/pl.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/pl.dict.itop-files-information.php
index 592518043..74b665b5a 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/pl.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/pl.dict.itop-files-information.php
@@ -25,8 +25,8 @@ Dict::Add('PL PL', 'Polish', 'Polski', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Brakujący plik: %1$s',
'FilesInformation:Error:CorruptedFile' => 'Plik %1$s jest uszkodzony',
+ 'FilesInformation:Error:ListCorruptedFile' => 'Fichier(s) corrompu(s): %1$s~~',
'FilesInformation:Error:CantWriteToFile' => 'Nie można zapisać do pliku %1$s',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/pt_br.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/pt_br.dict.itop-files-information.php
index f0d928866..405a5bd13 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/pt_br.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/pt_br.dict.itop-files-information.php
@@ -24,8 +24,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Faltando arquivo: %1$s',
'FilesInformation:Error:CorruptedFile' => 'Arquivo %1$s está corrompido',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
'FilesInformation:Error:CantWriteToFile' => 'Sem permissão de escrita no arquivo %1$s',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/ru.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/ru.dict.itop-files-information.php
index cf4fe9492..d1e2b297f 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/ru.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/ru.dict.itop-files-information.php
@@ -12,8 +12,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Файл %1$s отсутствует',
'FilesInformation:Error:CorruptedFile' => 'Файл %1$s повреждён',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
'FilesInformation:Error:CantWriteToFile' => 'Невозможно выполнить запись в файл %1$s',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/sk.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/sk.dict.itop-files-information.php
index 34298f121..6b5f13a88 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/sk.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/sk.dict.itop-files-information.php
@@ -24,8 +24,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Missing file: %1$s~~',
'FilesInformation:Error:CorruptedFile' => 'File %1$s is corrupted~~',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
'FilesInformation:Error:CantWriteToFile' => 'Can not write to file %1$s~~',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/tr.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/tr.dict.itop-files-information.php
index 3b01ce8f8..a8b5cccc1 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/tr.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/tr.dict.itop-files-information.php
@@ -24,8 +24,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
// Errors
'FilesInformation:Error:MissingFile' => 'Missing file: %1$s~~',
'FilesInformation:Error:CorruptedFile' => 'File %1$s is corrupted~~',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
'FilesInformation:Error:CantWriteToFile' => 'Can not write to file %1$s~~',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
));
diff --git a/datamodels/2.x/itop-files-information/dictionaries/zh_cn.dict.itop-files-information.php b/datamodels/2.x/itop-files-information/dictionaries/zh_cn.dict.itop-files-information.php
index d2103f3cb..3693ede2d 100644
--- a/datamodels/2.x/itop-files-information/dictionaries/zh_cn.dict.itop-files-information.php
+++ b/datamodels/2.x/itop-files-information/dictionaries/zh_cn.dict.itop-files-information.php
@@ -24,8 +24,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
// Errors
'FilesInformation:Error:MissingFile' => '文件丢失: %1$s~~',
'FilesInformation:Error:CorruptedFile' => '文件 %1$s 已损坏',
+ 'FilesInformation:Error:ListCorruptedFile' => 'File(s) corrupted: %1$s~~',
'FilesInformation:Error:CantWriteToFile' => '文件 %1$s 无法写入',
- 'FilesInformation:Error:CannotUpdateNewModules' => 'Some new modules were detected, a partial update cannot be executed.Follow the procedure in order to manually upgrade your iTop. You must use the setup to update the application.~~',
));
diff --git a/datamodels/2.x/itop-files-information/src/Service/FilesInformation.php b/datamodels/2.x/itop-files-information/src/Service/FilesInformation.php
index 51a95611c..9ebad086a 100644
--- a/datamodels/2.x/itop-files-information/src/Service/FilesInformation.php
+++ b/datamodels/2.x/itop-files-information/src/Service/FilesInformation.php
@@ -56,7 +56,7 @@ class FilesInformation
try
{
- FilesIntegrity::CheckInstallationIntegrity();
+ FilesIntegrity::CheckInstallationIntegrity(APPROOT, false);
}
catch (FileIntegrityException $e)
{
diff --git a/datamodels/2.x/itop-files-information/src/Service/FilesIntegrity.php b/datamodels/2.x/itop-files-information/src/Service/FilesIntegrity.php
index 716d4331a..5ed7cf82c 100644
--- a/datamodels/2.x/itop-files-information/src/Service/FilesIntegrity.php
+++ b/datamodels/2.x/itop-files-information/src/Service/FilesIntegrity.php
@@ -13,8 +13,6 @@ use DOMDocument;
use DOMElement;
use DOMNode;
use DOMXPath;
-use MetaModel;
-use utils;
class FilesIntegrity
{
@@ -81,12 +79,12 @@ class FilesIntegrity
* Check that files present in iTop folder corresponds to the manifest
*
* @param string $sRootPath
- * @param bool $bCheckNewModule
+ * @param bool $bExitAtFirstError
*
* @throws \Combodo\iTop\FilesInformation\Service\FileIntegrityException
- * @since 3.0.1 Add $bCheckNewModule parameter
+ * @since 2.7.7 3.0.1 Add $bExitAtFirstError parameter
*/
- public static function CheckInstallationIntegrity($sRootPath = APPROOT, $bCheckNewModule = false)
+ public static function CheckInstallationIntegrity($sRootPath = APPROOT, $bExitAtFirstError = true)
{
$aFilesInfo = FilesIntegrity::GetInstalledFiles($sRootPath.'manifest.xml');
@@ -95,8 +93,10 @@ class FilesIntegrity
throw new FileIntegrityException(Dict::Format('FilesInformation:Error:MissingFile', 'manifest.xml'));
}
+ $bHasErrors = false;
+ $sErrorFiles ="";
+
@clearstatcache();
- $sSourceDir = MetaModel::GetConfig()->Get('source_dir');
foreach ($aFilesInfo as $aFileInfo)
{
$sFile = $sRootPath.$aFileInfo['path'];
@@ -108,20 +108,19 @@ class FilesIntegrity
$sChecksum = md5($sContent);
if (($iSize != $aFileInfo['size']) || ($sChecksum != $aFileInfo['md5']))
{
- throw new FileIntegrityException(Dict::Format('FilesInformation:Error:CorruptedFile', $sFile));
- }
- }
- if($bCheckNewModule && strpos($aFileInfo['path'],$sSourceDir) === 0){
- $aFilePath = explode('/',$aFileInfo['path']);
- $sFolderPath = $aFilePath[0].'/'.$aFilePath[1].'/'.$aFilePath[2];
- if ( !(is_dir(APPROOT.'/'.$sFolderPath)) && !(is_file(APPROOT.'/'.$sFolderPath)) ){
- $sLink = utils::GetAbsoluteUrlAppRoot().'setup/';
- $sLinkManualUpdate = 'https://www.itophub.io/wiki/page?id='.utils::GetItopVersionWikiSyntax().'%3Ainstall%3Aupgrading_itop#manually';
- throw new FileIntegrityException(Dict::Format('FilesInformation:Error:CannotUpdateNewModules', $sLink, $sLinkManualUpdate));
+ if($bExitAtFirstError) {
+ throw new FileIntegrityException(Dict::Format('FilesInformation:Error:CorruptedFile', $sFile));
+ } else {
+ $bHasErrors = true;
+ $sErrorFiles .=' '.$sErrorFiles.'
'));
+ }
}
public static function IsInstallationConform($sRootPath, &$sErrorMsg)
diff --git a/datamodels/2.x/itop-portal-base/portal/public/css/portal.css b/datamodels/2.x/itop-portal-base/portal/public/css/portal.css
index 965e0beea..f8fe934ec 100644
--- a/datamodels/2.x/itop-portal-base/portal/public/css/portal.css
+++ b/datamodels/2.x/itop-portal-base/portal/public/css/portal.css
@@ -34,7 +34,7 @@
*/
/*!
* Combodo portal template v1.0.0
- */
+*/
/*******************/
/* Global settings */
/*******************/
@@ -42,6 +42,7 @@
body {
padding-top: 60px;
}
+
body.home {
padding-top: 70px;
}
@@ -50,6 +51,7 @@ footer {
margin: 5em 1em;
text-align: center;
}
+
/* Environment banner */
#envbanner {
position: relative;
@@ -57,37 +59,48 @@ footer {
padding: 5px 15px;
text-align: center;
}
+
#envbanner > button {
margin-left: 5px;
color: #000;
}
+
/* Navigation menu */
-.navbar-nav .dropdown-menu a .glyphicon, .user_infos .dropdown-menu a .glyphicon {
+.navbar-nav .dropdown-menu a .glyphicon,
+.user_infos .dropdown-menu a .glyphicon {
margin-right: 15px;
}
-.nav > li > a > span.brick_icon, .dropdown-menu > li > a > span.brick_icon {
+
+.nav > li > a > span.brick_icon,
+.dropdown-menu > li > a > span.brick_icon {
margin-right: 20px;
vertical-align: sub;
}
+
/* Topbar */
#topbar .navbar-header {
position: relative;
z-index: 2;
}
+
#topbar .navbar-collapse {
position: relative;
z-index: 1;
overflow-y: auto;
}
+
#topbar .navbar-collapse > .navbar-nav {
padding-top: 30px;
}
+
#topbar .navbar-brand > img {
max-height: 100%;
}
+
#topbar .user_infos {
text-decoration: none;
}
+
#topbar .user_photo {
position: absolute;
display: block;
@@ -102,6 +115,7 @@ footer {
border-radius: 100%;
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.4);
}
+
#topbar .user_fullname {
display: inline-block;
position: absolute;
@@ -112,6 +126,7 @@ footer {
text-overflow: ellipsis;
overflow-x: hidden;
}
+
/* Sidebar */
@media (min-width: 768px) {
#sidebar {
@@ -122,10 +137,12 @@ footer {
/* Overriding BS */
height: 100%;
}
+
#sidebar .user_card {
padding: 30px 0px;
text-align: center;
}
+
#sidebar .user_card .user_photo {
margin: 0px auto 10px auto;
width: 80px;
@@ -137,48 +154,59 @@ footer {
border: 2px solid #FFFFFF;
border-radius: 100%;
}
+
#sidebar .user_card .user_infos {
font-size: 1em;
color: #FFFFFF;
}
+
#sidebar .user_card .user_infos .dropdown-toggle {
color: #FFFFFF;
}
+
#sidebar .user_card .user_options.dropdown-menu {
width: 92%;
left: 4%;
}
+
#sidebar .user_card .user_fullname {
font-weight: 600;
}
+
#sidebar .menu {
max-height: 59%;
overflow-y: auto;
overflow-x: hidden;
}
+
#sidebar .menu .navbar-nav {
width: 100%;
}
+
#sidebar .menu .navbar-nav > li {
width: 100%;
}
+
#sidebar .menu .navbar-nav > li > a > .brick_icon {
width: 1.2em;
vertical-align: sub;
text-align: center;
margin-right: 10px;
}
+
#sidebar .logo {
position: absolute;
bottom: 15px;
width: 100%;
text-align: center;
}
+
#sidebar .logo img {
max-width: 100%;
max-height: 50px;
- /* Main content */
}
+
+ /* Main content */
#main-wrapper {
margin-top: 20px;
}
@@ -189,6 +217,7 @@ footer {
width: 120px;
height: 120px;
}
+
#sidebar .menu .nav > li > a > .brick_icon {
margin-right: 20px;
}
@@ -205,17 +234,21 @@ footer {
background-color: black;
opacity: 0.5;
}
+
#page_overlay .overlay_content {
margin-top: 20em;
width: 100%;
color: white;
}
+
.overlay_content {
text-align: center;
}
+
.content_loader {
text-align: center;
}
+
.content_loader .icon {
margin-bottom: 0.3em;
/*width: 52px;*/
@@ -229,14 +262,17 @@ footer {
-moz-animation: spin 1.2s linear infinite;
-ms-animation: spin 1.2s linear infinite;
}
+
.content_loader .message {
font-size: 1.5em;
/* 2em; */
}
+
.datatables_overlay {
padding: 5% 0px !important;
background-color: white;
}
+
/******************/
/* Global classes */
/******************/
@@ -253,19 +289,22 @@ footer {
-moz-box-align: center;
-ms-flex-align: center;
align-items: center;
- -webkit-box-pack: center;
/* Also 'margin: 0 auto' doesn't have any effect on flex items in such web browsers
- hence the bootstrap's container won't be aligned to the center anymore.
- Therefore, we should use the following declarations to get it centered again */
+ hence the bootstrap's container won't be aligned to the center anymore.
+
+ Therefore, we should use the following declarations to get it centered again */
+ -webkit-box-pack: center;
-moz-box-pack: center;
-ms-flex-pack: center;
-webkit-justify-content: center;
justify-content: center;
}
+
.text_decoration {
vertical-align: baseline;
margin-right: 8px;
}
+
/*********************/
/* Global animations */
/*********************/
@@ -297,10 +336,12 @@ footer {
margin-top: 11px;
margin-bottom: -11px;
}
+
.list-group.tree .list-group-item {
padding-right: 0px;
/* To align all actions on the right without indent */
}
+
/******************/
/* Modal settings */
/******************/
@@ -308,10 +349,12 @@ footer {
z-index: 9999;
/* Should always be on top to display errors messages */
}
+
.modal-content .content_loader {
margin: 7em 0em;
text-align: center;
}
+
/*******************/
/* Clipboard icons */
/*******************/
@@ -323,23 +366,28 @@ footer {
.url-to-clipboard.url-to-clipboard-icon:hover {
opacity: 1;
}
+
.url-to-clipboard-tooltip-copied {
color: green;
margin-right: 3px;
}
+
/**************************/
/* MagnificPopup settings */
/**************************/
.mfp-bg {
z-index: 1200;
}
+
.mfp-wrap {
z-index: 1210;
}
+
.mfp-img {
cursor: pointer;
cursor: zoom-out;
}
+
/********************/
/* Typeahead setting */
/********************/
@@ -347,6 +395,7 @@ footer {
max-height: 200px;
overflow-y: auto;
}
+
@media (min-width: 768px) {
.twitter-typeahead .tt-menu {
max-height: 300px;
@@ -357,19 +406,23 @@ footer {
text-align: center;
font-size: 0.6em;
}
+
.twitter-typeahead .tt-dataset > .content_loader .icon {
height: 25px;
}
+
.twitter-typeahead .tt-dataset .no_result {
text-align: center;
font-style: italic;
}
+
/*****************/
/* Home settings */
/*****************/
.home #main-wrapper {
padding-top: 15px;
}
+
.home .tile {
display: block;
margin-bottom: 8px;
@@ -385,22 +438,27 @@ footer {
line-height: 4em;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
}
+
.home .tile .tile_decoration {
position: absolute;
top: 0.3em;
left: 2.5em;
}
+
.home .tile .tile_title {
font-weight: bold;
color: #777;
}
+
.home .tile .tile_title > span.icon {
color: #EA7D1E;
}
+
.home .tile .tile_description {
display: none;
color: #555555;
}
+
/**********************************/
/* ManageBrick badge tile display */
/**********************************/
@@ -408,12 +466,15 @@ footer {
display: table;
width: 100%;
}
+
.home a.tile.tile_badge > div > div {
display: table-row;
}
+
.home a.tile.tile_badge > div > div > div {
display: table-cell;
}
+
@media (max-width: 768px) {
.home a.tile.tile_badge > div > div > div.tile_body div.tile_count {
position: absolute;
@@ -422,6 +483,7 @@ footer {
text-align: right;
font-size: 1.2em;
}
+
.home a.tile.tile_badge > div.tile_description {
display: none;
}
@@ -435,9 +497,11 @@ footer {
text-align: left;
transition: all 0.2s linear;
}
+
.home .tile:hover {
box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.1);
}
+
.home .tile .tile_decoration {
display: block;
position: relative;
@@ -446,31 +510,38 @@ footer {
left: initial;
margin: 0px 30px 15px 0px;
}
+
.home .tile .tile_body {
display: block;
padding-left: 4.3em;
text-align: left;
line-height: 1.5em;
}
+
.home .tile .tile_title {
margin-bottom: 1em;
font-size: 1em;
}
+
.home .tile .tile_description {
display: block;
text-align: left;
}
+
.home a.tile.tile_badge {
height: 10em;
overflow: hidden;
}
+
.home a.tile.tile_badge > div > div > div.tile_decoration {
top: unset;
vertical-align: middle;
}
+
.home a.tile.tile_badge > div > div > div.tile_decoration > span.icon {
font-size: 4em;
}
+
.home a.tile.tile_badge > div > div > div.tile_body {
position: relative;
padding: 0;
@@ -478,12 +549,14 @@ footer {
vertical-align: middle;
text-align: right;
}
+
.home a.tile.tile_badge > div > div > div.tile_body .tile_title {
margin-top: 1em;
margin-bottom: 0;
font-size: 1em;
font-weight: normal;
}
+
.home a.tile.tile_badge > div > div > div.tile_body .tile_count {
position: absolute;
top: 0;
@@ -492,6 +565,7 @@ footer {
font-weight: bold;
color: #777;
}
+
.home a.tile.tile_badge .tile_description {
display: none;
}
@@ -501,27 +575,35 @@ footer {
min-height: 14em;
padding: 30px 40px 30px 40px;
}
+
.home .tile .tile_decoration > span.icon {
font-size: 4em;
}
+
.home .tile .tile_body {
padding-left: 6.3em;
}
+
.home .tile .tile_title {
font-size: 1.4em;
}
+
.home .tile .tile_description {
font-size: 1.2em;
}
+
.home a.tile.tile_badge > div > div > div.tile_body .tile_title {
font-size: 1.2em;
}
+
.home a.tile.tile_badge > div > div > div.tile_body .tile_count {
font-size: 3em;
}
+
.home a.tile.tile_badge > div > div > div.tile_decoration > span.icon {
font-size: 4em;
}
+
.home a.tile.tile_badge .tile_description {
display: block;
font-size: 1em;
@@ -534,22 +616,28 @@ footer {
min-height: 15em;
padding: 40px 50px 30px 50px;
}
+
.home .tile .tile_decoration {
margin: 0px 40px 15px 0px;
top: 1.5em;
}
+
.home .tile .tile_decoration > span.icon {
font-size: 6em;
}
+
.home .tile .tile_body {
padding-left: 9.1em;
}
+
.home .tile .tile_title {
font-size: 1.5em;
}
+
.home .tile .tile_description {
font-size: 1.2em;
}
+
.home a.tile.tile_badge > div > div > div.tile_decoration > span.icon {
font-size: 6em;
}
@@ -560,6 +648,7 @@ footer {
#main-header {
text-align: center;
}
+
#main-header-title {
margin-bottom: 15px;
}
@@ -568,26 +657,30 @@ footer {
margin-top: 8px;
margin-bottom: 20px;
}
+
#main-header-actions {
margin-bottom: 15px;
}
+
/* This is no longer necessary but we keep it just in case */
/*#main-header-actions .btn-group .btn{
- padding: 0em 1.5em;
- line-height: 2.4em;
- font-size: 14px;
- background-image: none;
- }*/
+ padding: 0em 1.5em;
+ line-height: 2.4em;
+ font-size: 14px;
+ background-image: none;
+}*/
@media (min-width: 768px) {
#main-header:after {
clear: both;
}
+
#main-header-title {
float: left;
margin-bottom: 0px;
min-height: 6em;
text-align: left;
}
+
#main-header-actions {
float: right;
margin-bottom: 0px;
@@ -596,24 +689,29 @@ footer {
.dataTables_wrapper {
padding: 10px 10px;
}
+
.dataTable.table td img {
max-width: 100%;
height: initial !important;
}
+
#brick_content_toolbar {
/* margin: 10px 0px 6px 0px; */
padding: 10px;
}
+
#brick_content_toolbar > div label {
font-weight: normal;
white-space: nowrap;
text-align: left;
}
+
#brick_content_toolbar > div label input {
margin-left: 0.5em;
display: inline-block;
width: 130px;
}
+
/***********************/
/* Brick communication */
/***********************/
@@ -624,11 +722,13 @@ footer {
border: none;
font-weight: initial;
}
+
.home .tile_communication .carousel {
margin-bottom: 0px;
width: 100%;
height: 200px;
}
+
/**********************/
/* Brick user profile */
/**********************/
@@ -645,6 +745,7 @@ footer {
background-color: black;
opacity: 0.5;
}
+
#user-profile-wrapper .user_profile_picture .preview {
display: inline-block;
position: relative;
@@ -652,27 +753,33 @@ footer {
max-height: 175px;
overflow: hidden;
}
+
#user-profile-wrapper .user_profile_picture .preview img {
max-width: 100%;
max-height: 100%;
}
+
#user-profile-wrapper .user_profile_picture .actions {
display: inline-block;
vertical-align: top;
/*middle;*/
margin-left: 5px;
}
+
#user-profile-wrapper .user_profile_picture .actions .btn {
display: block;
position: relative;
margin-bottom: 10px;
}
+
#user-profile-wrapper .user_profile_picture .actions .btn:last-child {
margin-bottom: 0px;
}
+
#user-profile-wrapper .user_profile_picture .actions .btn.btn_edit {
overflow: hidden;
}
+
#user-profile-wrapper .user_profile_picture .actions .btn.btn_edit input {
position: absolute;
top: 0px;
@@ -682,6 +789,7 @@ footer {
opacity: 0;
cursor: pointer;
}
+
/****************/
/* Brick browse */
/****************/
@@ -691,9 +799,11 @@ footer {
position: relative;
margin-top: 0px;
}
+
#brick_content_tree .list-group-item {
padding-top: 0px;
}
+
#brick_content_tree .list-group-item > .tree-item-wrapper {
display: block;
padding-top: 10px;
@@ -701,41 +811,58 @@ footer {
text-decoration: inherit;
cursor: pointer;
}
+
.list-group-item > .list-group-item-actions {
/*display: none; Displaying actions only when hovering was not unanimous in the team */
position: absolute;
top: 10px;
right: 10px;
}
-.list-group-item:hover > .list-group-item-actions, .mosaic-group-item:hover > .mosaic-group-item-actions {
+
+.list-group-item:hover > .list-group-item-actions,
+.mosaic-group-item:hover > .mosaic-group-item-actions {
display: block;
}
-.list-group-item .list-group-item-actions a:not(:first-child), .mosaic-group-item .mosaic-group-item-actions a:not(:first-child) {
+
+.list-group-item .list-group-item-actions a:not(:first-child),
+.mosaic-group-item .mosaic-group-item-actions a:not(:first-child) {
margin-left: 10px;
}
+
.list-group-item .keep-spinning {
animation: spin 1s linear infinite;
-webkit-animation: spin 1s linear infinite;
-moz-animation: spin 1s linear infinite;
-ms-animation: spin 1s linear infinite;
}
+
.list-group.tree .list-group-item .list-group-item-description {
display: block;
margin-top: 3px;
font-size: 0.8em;
}
+
/* Secondary actions */
-.list-group-item-actions .group-actions-wrapper, .mosaic-group-item-actions .group-actions-wrapper, table .group-actions-wrapper {
+.list-group-item-actions .group-actions-wrapper,
+.mosaic-group-item-actions .group-actions-wrapper,
+table .group-actions-wrapper {
text-align: center;
}
+
table .group-actions {
position: relative;
}
-.list-group-item-actions a.glyphicon-menu-hamburger, .mosaic-group-item-actions a.glyphicon-menu-hamburger, table .group-actions a.glyphicon-menu-hamburger {
+
+.list-group-item-actions a.glyphicon-menu-hamburger,
+.mosaic-group-item-actions a.glyphicon-menu-hamburger,
+table .group-actions a.glyphicon-menu-hamburger {
cursor: pointer;
text-decoration: none;
}
-.list-group-item-actions .item-action-wrapper, .mosaic-group-item-actions .item-action-wrapper, table .group-actions .item-action-wrapper {
+
+.list-group-item-actions .item-action-wrapper,
+.mosaic-group-item-actions .item-action-wrapper,
+table .group-actions .item-action-wrapper {
display: none;
position: absolute;
z-index: 5;
@@ -745,32 +872,48 @@ table .group-actions {
-moz-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15);
box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15);
}
-.list-group-item-actions .item-action-wrapper .glyphicon, .mosaic-group-item-actions .item-action-wrapper .glyphicon, table .group-actions .item-action-wrapper .glyphicon {
+
+.list-group-item-actions .item-action-wrapper .glyphicon,
+.mosaic-group-item-actions .item-action-wrapper .glyphicon,
+table .group-actions .item-action-wrapper .glyphicon {
margin-right: 0.6em;
}
-.list-group-item-actions .item-action-wrapper.collapse.in, .mosaic-group-item-actions .item-action-wrapper.collapse.in, table .group-actions .item-action-wrapper.collapse.in {
+
+.list-group-item-actions .item-action-wrapper.collapse.in,
+.mosaic-group-item-actions .item-action-wrapper.collapse.in,
+table .group-actions .item-action-wrapper.collapse.in {
display: block;
}
-.list-group-item-actions .item-action-wrapper .panel-body > p, .mosaic-group-item-actions .item-action-wrapper .panel-body > p, table .group-actions .item-action-wrapper .panel-body > p {
+
+.list-group-item-actions .item-action-wrapper .panel-body > p,
+.mosaic-group-item-actions .item-action-wrapper .panel-body > p,
+table .group-actions .item-action-wrapper .panel-body > p {
text-align: left;
white-space: nowrap;
}
-.list-group-item-actions .item-action-wrapper .panel-body > p:last-child, .mosaic-group-item-actions .item-action-wrapper .panel-body > p:last-child, table .group-actions .item-action-wrapper .panel-body > p:last-child {
+
+.list-group-item-actions .item-action-wrapper .panel-body > p:last-child,
+.mosaic-group-item-actions .item-action-wrapper .panel-body > p:last-child,
+table .group-actions .item-action-wrapper .panel-body > p:last-child {
margin-bottom: 0px;
}
+
#brick_content_empty {
display: none;
padding: 40px;
font-size: 1.3em;
font-style: italic;
}
+
/* Loader */
-#brick_tree_overlay, #brick_mosaic_overlay {
+#brick_tree_overlay,
+#brick_mosaic_overlay {
display: none;
padding: 8% 0px;
border-radius: 0px 0px 4px 4px;
font-size: 1em;
}
+
/****************************************************************/
/* - Mosaic mode */
/* */
@@ -788,6 +931,7 @@ table .group-actions {
position: relative;
padding: 10px 10px 1px 10px;
}
+
/* Breadcrumb */
#mosaic-breadcrumb {
margin-bottom: 5px;
@@ -797,23 +941,29 @@ table .group-actions {
overflow-x: hidden;
text-overflow: ellipsis;
}
+
.mosaic-group {
display: none;
}
+
/* Only the first level is showed by default */
.mosaic-group:first-of-type {
display: block;
}
-.mosaic-group-back, .mosaic-group-item {
+
+.mosaic-group-back,
+.mosaic-group-item {
position: relative;
height: 55px;
margin-bottom: 10px;
text-align: center;
color: #FFFFFF;
}
+
.mosaic-group-back {
font-size: 25px;
}
+
.mosaic-item {
display: table;
width: 100%;
@@ -822,71 +972,95 @@ table .group-actions {
background-color: #585653;
transition: all linear 0.3s;
}
-.mosaic-item, .mosaic-item:hover, .mosaic-item:active, .mosaic-item:focus, .mosaic-item:visited {
+
+.mosaic-item,
+.mosaic-item:hover,
+.mosaic-item:active,
+.mosaic-item:focus,
+.mosaic-item:visited {
color: #FFFFFF;
text-decoration: none;
}
+
.mosaic-item:active {
background-color: #9e510f;
}
-.mosaic-item-image, .mosaic-item-text {
+
+.mosaic-item-image,
+.mosaic-item-text {
display: table-cell;
text-align: center;
vertical-align: middle;
}
+
.mosaic-item-image > img {
max-width: 85%;
}
+
.mosaic-item-text {
max-width: 1px;
/* This is an arbitrary value. It is just here to make .mosaic-item-name wrap when there is a very long word in it. */
overflow: hidden;
}
+
.mosaic-group-item > .mosaic-group-item-actions {
position: absolute;
top: 5px;
right: 5px;
}
+
.mosaic-group-item-actions > a {
color: #FFFFFF;
text-decoration: none;
}
-.mosaic-group-item-actions > a:hover, .mosaic-group-item-actions > a:focus {
+
+.mosaic-group-item-actions > a:hover,
+.mosaic-group-item-actions > a:focus {
color: #EEEEEE;
}
+
@media (max-width: 768px) {
.mosaic-group-item > .mosaic-group-item-actions {
top: 12px;
right: 6px;
}
+
.mosaic-group-item > .mosaic-group-item-actions > .glyphicon {
margin-top: 5px;
}
+
.mosaic-group-item-actions > a {
font-size: 20px;
- /* All layouts */
}
+
+ /* All layouts */
.mosaic-item-image {
width: 55px;
padding: 10px;
}
+
.mosaic-item-image > img {
max-height: 30px;
}
+
.mosaic-item-name {
font-size: 14px;
max-height: 50px;
overflow: hidden;
}
+
.mosaic-item-description {
display: none;
- /* Layout 2 */
}
+
+ /* Layout 2 */
.mosaic-item-layout-2 .mosaic-item-description {
display: block;
- /* Layout 5/7 */
}
- .mosaic-item-layout-5 .mosaic-item-name, .mosaic-item-layout-7 .mosaic-item-name {
+
+ /* Layout 5/7 */
+ .mosaic-item-layout-5 .mosaic-item-name,
+.mosaic-item-layout-7 .mosaic-item-name {
padding-right: 40px;
}
}
@@ -899,21 +1073,26 @@ table .group-actions {
/* We don't put 2% to keep a margin in case of a bad browser rendering */
word-break: break-word;
}
+
.mosaic-item {
padding: 10px;
}
- .mosaic-item:hover, .mosaic-item:focus {
+
+ .mosaic-item:hover,
+.mosaic-item:focus {
background-color: #EA7D1E;
box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.2);
- /* All layouts */
- /* .mosaic-item-image{
- vertical-align: inherit; Note: This was introduced to avoid image from going down the tile when .mosaic-item-name was way too long, but the .mosaic-item-image glitched by being a little too high. As a very long .mosaic-item-name is extremely rare, we decided that it was not worth it.
- }*/
}
+
+ /* All layouts */
+ /* .mosaic-item-image{
+ vertical-align: inherit; Note: This was introduced to avoid image from going down the tile when .mosaic-item-name was way too long, but the .mosaic-item-image glitched by being a little too high. As a very long .mosaic-item-name is extremely rare, we decided that it was not worth it.
+ }*/
.mosaic-item-text .mosaic-item-text-wrapper {
max-height: 100px;
/* Must be .mosaic-item absolute height (in px) */
}
+
.mosaic-item-name {
max-height: 100%;
/* It's ok if description is pushed down and not visible; but we truncate before it flows out of the tile */
@@ -921,32 +1100,41 @@ table .group-actions {
font-weight: 600;
font-size: 12px;
}
+
.mosaic-item-description {
overflow: hidden;
text-overflow: ellipsis;
- /* Layout 1 */
}
+
+ /* Layout 1 */
.mosaic-item-layout-1 .mosaic-item-name {
font-weight: inherit;
font-size: 14px;
- /* Layout 7 */
}
+
+ /* Layout 7 */
.mosaic-item-layout-7 .mosaic-item-image {
display: none;
}
- .mosaic-item-layout-3 .mosaic-item-description, .mosaic-item-layout-7 .mosaic-item-description {
+
+ .mosaic-item-layout-3 .mosaic-item-description,
+.mosaic-item-layout-7 .mosaic-item-description {
margin-top: 10px;
max-height: 40px;
font-size: 10px;
- /* Layout 5 & 7 */
}
- .mosaic-item-layout-5 .mosaic-item-image, .mosaic-item-layout-7 .mosaic-item-image {
+
+ /* Layout 5 & 7 */
+ .mosaic-item-layout-5 .mosaic-item-image,
+.mosaic-item-layout-7 .mosaic-item-image {
display: table-cell;
width: 65px;
padding-left: 5px;
padding-right: 10px;
}
- .mosaic-item-layout-5 .mosaic-item-image > img, .mosaic-item-layout-7 .mosaic-item-image > img {
+
+ .mosaic-item-layout-5 .mosaic-item-image > img,
+.mosaic-item-layout-7 .mosaic-item-image > img {
max-width: 65px;
/* Equals parent element width */
max-height: 100px;
@@ -957,21 +1145,28 @@ table .group-actions {
.mosaic-item {
padding: 10px 15px;
}
+
.mosaic-group-back {
font-size: 40px;
- /* Layout 5 & 7 */
}
- .mosaic-item-layout-5 .mosaic-item-image, .mosaic-item-layout-7 .mosaic-item-image {
+
+ /* Layout 5 & 7 */
+ .mosaic-item-layout-5 .mosaic-item-image,
+.mosaic-item-layout-7 .mosaic-item-image {
width: 105px;
padding-right: 18px;
}
- .mosaic-item-layout-5 .mosaic-item-image > img, .mosaic-item-layout-7 .mosaic-item-image > img {
+
+ .mosaic-item-layout-5 .mosaic-item-image > img,
+.mosaic-item-layout-7 .mosaic-item-image > img {
max-width: 105px;
/* Equals parent element width */
max-height: 100px;
/* Equals parent element height */
}
- .mosaic-item-layout-5 .mosaic-item-name, .mosaic-item-layout-7 .mosaic-item-name {
+
+ .mosaic-item-layout-5 .mosaic-item-name,
+.mosaic-item-layout-7 .mosaic-item-name {
font-size: 12px;
}
}
@@ -980,14 +1175,17 @@ table .group-actions {
width: 24%;
height: 140px;
margin-right: 1.3%;
- /* All layouts */
}
+
+ /* All layouts */
.mosaic-item-text .mosaic-item-text-wrapper {
max-height: 120px;
/* Must be .mosaic-item absolute height (in px) */
/* overflow hidden inherited */
}
- .mosaic-item-layout-5 .mosaic-item-image > img, .mosaic-item-layout-7 .mosaic-item-image > img {
+
+ .mosaic-item-layout-5 .mosaic-item-image > img,
+.mosaic-item-layout-7 .mosaic-item-image > img {
max-height: 120px;
/* Equals parent element height */
}
@@ -1017,12 +1215,15 @@ table .group-actions {
.tile.tile-filter-brick a.tile_decoration {
cursor: default;
}
+
.tile.tile-filter-brick .tile_filterbox .form-group:first-child {
width: 100%;
}
-.tile.tile-filter-brick .tile_filterbox input[type="text"] {
+
+.tile.tile-filter-brick .tile_filterbox input[type=text] {
width: 100%;
}
+
@media (max-width: 768px) {
.tile.tile-filter-brick .tile_filterbox .form-group:first-child {
margin-bottom: 5px;
@@ -1032,10 +1233,12 @@ table .group-actions {
.tile.tile-filter-brick .tile_filterbox form {
display: table;
}
+
.tile.tile-filter-brick .tile_filterbox .form-group:first-child {
display: table-cell;
}
- .tile.tile-filter-brick .tile_filterbox button[type="submit"] {
+
+ .tile.tile-filter-brick .tile_filterbox button[type=submit] {
margin-left: 5px;
}
}
@@ -1047,7 +1250,7 @@ table .group-actions {
/*********/
/* Forms */
/*********/
-.form_field_label > .control-label[data-tooltip-instantiated="true"]::after {
+.form_field_label > .control-label[data-tooltip-instantiated=true]::after {
content: "?";
padding-left: 3px;
vertical-align: top;
@@ -1055,33 +1258,39 @@ table .group-actions {
color: #777;
font-size: 0.85em;
}
+
.form_field .form_mandatory .control-label:after {
- content: "\002a";
+ content: "*";
position: relative;
left: 3px;
color: #EA7D1E;
font-size: 0.9em;
}
+
/* Note: We don't put the .form_field selector as it must work for read-only */
.form-control-static img {
max-width: 100% !important;
height: initial !important;
}
+
/* ExternalKey */
.selectobject .input-group-addon {
cursor: pointer;
}
+
/* InlineImage */
.inline-image {
cursor: pointer;
cursor: zoom-in;
}
+
/* CaseLog field */
.caselog-thread {
position: relative;
border: 1px solid #ddd;
border-top: none;
}
+
.caselog-thread--header {
padding: 8px;
font-size: 11px;
@@ -1092,6 +1301,7 @@ table .group-actions {
color: #777;
/* body: color */
}
+
.caselog-thread--header-toggler {
cursor: pointer;
color: inherit;
@@ -1106,6 +1316,7 @@ table .group-actions {
margin: 0 0.4em 0 0.2em;
/* Note: Difference between left and right margin is due to a left space being output because the line break in the HTML isn't tidy */
}
+
.caselog-thread--header-info > span {
margin-left: 0.5em;
}
@@ -1115,12 +1326,14 @@ table .group-actions {
.caselog-thread--header-info > span:first-child {
margin-left: 0;
}
+
.caselog-thread--content {
padding: 5px;
/*max-height: 400px;
- overflow: auto;*/
+ overflow: auto;*/
background-color: #f2f2f2;
}
+
.caselog-thread--date {
margin-bottom: 10px;
text-align: center;
@@ -1129,6 +1342,7 @@ table .group-actions {
.caselog-thread--date:first-child {
display: none;
}
+
.caselog-thread--block {
position: relative;
min-height: 40px;
@@ -1138,9 +1352,12 @@ table .group-actions {
.caselog-thread--block:last-child {
margin-bottom: 0px;
}
-.caselog-thread--block-medallion, .caselog-thread--block-entries {
+
+.caselog-thread--block-medallion,
+.caselog-thread--block-entries {
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
}
+
.caselog-thread--block-medallion {
position: absolute;
top: 0px;
@@ -1160,6 +1377,7 @@ table .group-actions {
background-repeat: no-repeat;
border-radius: 100%;
}
+
.caselog-thread--block-user {
display: none;
margin-left: 54px;
@@ -1168,6 +1386,7 @@ table .group-actions {
color: #FFFFFF;
/* .caselog-thread--block-entries background-color */
}
+
.caselog-thread--block-entries {
position: relative;
display: inline-block;
@@ -1176,6 +1395,7 @@ table .group-actions {
background-color: #585653;
color: #FFFFFF;
}
+
.caselog-thread--block-entry {
position: relative;
padding: 8px 10px;
@@ -1219,18 +1439,20 @@ table .group-actions {
.caselog-thread--block-entry:hover:not(.closed) .caselog-thread--block-entry-toggler {
opacity: 1;
}
+
.caselog-thread--block-entry-content {
display: block;
overflow-x: auto;
+ /* Force user-generated tables to fit within the container as they often have an hard-coded width */
}
.caselog-thread--block-entry-content > p:last-of-type {
margin-bottom: 0px;
- /* Force user-generated tables to fit within the container as they often have an hard-coded width */
}
.caselog-thread--block-entry-content table {
width: unset !important;
max-width: max-content;
}
+
.caselog-thread--block-entry-date {
margin-top: 5px;
opacity: 0.6;
@@ -1238,6 +1460,7 @@ table .group-actions {
text-align: right;
transition: all 0.2s linear;
}
+
.caselog-thread--block-entry-toggler {
position: absolute;
top: 2px;
@@ -1249,6 +1472,7 @@ table .group-actions {
/* .caselog-thread--block-entries background-color */
transition: all 0.2s linear;
}
+
.caselog-thread--block-me {
text-align: right;
}
@@ -1280,6 +1504,7 @@ table .group-actions {
border-left-color: #585653;
/* .caselog-thread--block-entries background-color */
}
+
.caselog-thread--block-color-1 .caselog-thread--block-medallion {
color: #444;
background-color: #FFFFFF;
@@ -1298,6 +1523,7 @@ table .group-actions {
border-top-color: #FFFFFF;
border-right-color: #FFFFFF;
}
+
.caselog-thread--block-color-2 .caselog-thread--block-medallion {
color: #444;
background-color: #FFFFFF;
@@ -1316,6 +1542,7 @@ table .group-actions {
border-top-color: #FFFFFF;
border-right-color: #FFFFFF;
}
+
.caselog-thread--block-color-3 .caselog-thread--block-medallion {
color: #444;
background-color: #FFFFFF;
@@ -1334,6 +1561,7 @@ table .group-actions {
border-top-color: #FFFFFF;
border-right-color: #FFFFFF;
}
+
.caselog-thread--block-color-4 .caselog-thread--block-medallion {
color: #444;
background-color: #FFFFFF;
@@ -1352,6 +1580,7 @@ table .group-actions {
border-top-color: #FFFFFF;
border-right-color: #FFFFFF;
}
+
.caselog-thread--block-color-5 .caselog-thread--block-medallion {
color: #444;
background-color: #FFFFFF;
@@ -1370,8 +1599,9 @@ table .group-actions {
border-top-color: #FFFFFF;
border-right-color: #FFFFFF;
}
+
/* collapsable sections*/
-.form_linkedset_toggler, .form_upload_toggler, .form_linkedset_toggler:hover, .form_upload_toggler:hover, .form_linkedset_toggler:focus, .form_upload_toggler:focus {
+.form_linkedset_toggler, .form_linkedset_toggler:hover, .form_linkedset_toggler:focus, .form_upload_toggler, .form_upload_toggler:hover, .form_upload_toggler:focus {
text-decoration: none;
color: inherit;
}
@@ -1393,24 +1623,30 @@ table .group-actions {
.form_linkedset_toggler > .glyphicon.collapsed, .form_upload_toggler > .glyphicon.collapsed {
transform: rotateZ(-90deg);
}
+
/* - DataTables : Loader */
.form_linkedset_wrapper .datatables_overlay {
padding: 8px !important;
}
+
.form_linkedset_wrapper .overlay_content {
font-size: 0.6em;
}
+
.form_linkedset_wrapper .content_loader {
margin: 0px;
}
+
.form_linkedset_wrapper .content_loader .icon {
height: 23px;
}
+
/* - DataTables : Fit the table in the form */
.form_linkedset_wrapper .dataTables_wrapper {
margin-bottom: 5px;
padding: 0px;
}
+
/* FileUpload */
.attachments_container .attachments-list thead > tr > th {
text-align: center;
@@ -1420,29 +1656,28 @@ table .group-actions {
text-align: left;
vertical-align: middle;
}
-.attachments_container .attachments-list tbody > tr > td[role="icon"] {
+.attachments_container .attachments-list tbody > tr > td[role=icon] {
text-align: center;
}
-.attachments_container .attachments-list tbody > tr > td[role="icon"] img {
+.attachments_container .attachments-list tbody > tr > td[role=icon] img {
max-height: 32px;
}
-.attachments_container .attachments-list tbody > tr > td[role="formatted-size"] {
+.attachments_container .attachments-list tbody > tr > td[role=formatted-size] {
text-align: right;
}
-.attachments_container .attachments-list tbody > tr > td[role="delete"] {
+.attachments_container .attachments-list tbody > tr > td[role=delete] {
text-align: center;
}
+
.attachment-tooltip {
- width: 350px;
- height: 300px;
-}
-.attachment-tooltip img {
max-width: 100%;
max-height: 100%;
}
+
.upload_container input {
display: inline;
}
+
.upload_container .loader {
visibility: hidden;
margin-left: 7px;
@@ -1452,23 +1687,28 @@ table .group-actions {
-moz-animation: spin 1s linear infinite;
-ms-animation: spin 1s linear infinite;
}
+
#drag_overlay {
display: block;
top: inherit;
bottom: 0px;
height: 0px;
}
+
#drag_overlay .overlay_content {
margin-top: 5em;
width: 100%;
color: white;
}
+
#drag_overlay .overlay_content .icon {
font-size: 3em;
}
+
#drag_overlay .overlay_content .message {
font-size: 1.5em;
}
+
/* Attachments drag & drop zone, only for none mobile devices */
@media (min-width: 768px) {
#drag_overlay.drag_in {
@@ -1477,12 +1717,14 @@ table .group-actions {
-moz-animation: show-drop-zone 0.3s ease-out forwards;
-ms-animation: show-drop-zone 0.3s ease-out forwards;
}
+
#drag_overlay.drag_out {
animation: hide-drop-zone 0.3s ease-out forwards;
-webkit-animation: hide-drop-zone 0.3s ease-out forwards;
-moz-animation: hide-drop-zone 0.3s ease-out forwards;
-ms-animation: hide-drop-zone 0.3s ease-out forwards;
}
+
@keyframes show-drop-zone {
100% {
height: 20%;
@@ -1540,37 +1782,47 @@ table .group-actions {
.form_fields .file_open_link {
margin-left: 10px;
}
+
.form_buttons {
padding-top: 20px;
text-align: center;
}
+
.form_buttons .form_btn_misc {
margin-bottom: 20px;
}
+
.form_buttons .form_btn_transitions {
margin-bottom: 20px;
}
+
.form_buttons .btn .glyphicon {
margin-right: 0.5em;
}
+
.form_btn_regular.sticky {
display: none;
}
+
@media (min-width: 768px) {
.form_buttons .form_btn_misc {
float: left !important;
}
+
.form_buttons .form_btn_transitions {
float: right !important;
margin-left: 3px;
}
+
.form_buttons .form_btn_regular {
text-align: right;
}
+
.form_buttons .form_btn_regular .btn {
width: inherit;
- /* Making regular button sticky */
}
+
+ /* Making regular button sticky */
.form_btn_regular.sticky {
display: block;
position: fixed;
@@ -1583,12 +1835,15 @@ table .group-actions {
border-radius: 0px;
transition: right 0.3s;
}
+
.form_btn_regular.sticky.closed {
right: -75px;
}
+
.form_btn_regular.sticky button {
display: block;
}
+
.form_btn_regular.sticky button:first-child {
margin-bottom: 4px;
}
@@ -1597,11 +1852,13 @@ table .group-actions {
.form_field .cke {
border: 1px solid #ddd;
}
+
.form_field.has-error .cke {
border: 1px solid #b94a48;
border-radius: 0px;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
+
/* CKEditor : Styling notifications based on BS alerts */
.cke_notification {
position: relative;
@@ -1611,31 +1868,38 @@ table .group-actions {
border-radius: 4px;
background-color: #FFFFFF;
}
+
.cke_notification_close {
position: absolute;
top: 2px;
right: 5px;
}
+
.cke_notification_message {
margin-bottom: 0px;
line-height: 1em;
font-size: 1em;
}
+
.cke_notification_success {
display: none;
background-color: #dff0d8;
border-color: #58a959;
color: #468847;
}
+
.cke_notification_warning {
background-color: #fcf8e3;
border-color: #ceae78;
color: #c09853;
}
+
/* CKEditor : Misc */
-.cke_toolbox_collapser, .cke_toolbox_collapser .cke_arrow {
+.cke_toolbox_collapser,
+.cke_toolbox_collapser .cke_arrow {
cursor: pointer !important;
}
+
.cke_toolbox_collapser.cke_toolbox_collapser_min ~ .editor-fullscreen-button {
display: block;
width: 12px;
@@ -1646,18 +1910,23 @@ table .group-actions {
background-position: center center !important;
background-repeat: no-repeat !important;
background-size: 100% !important;
- background-image: url('../../../../../images/full-screen.png') !important;
+ background-image: url("../../../../../images/full-screen.png") !important;
}
.cke_toolbox_collapser.cke_toolbox_collapser_min ~ .editor-fullscreen-button:hover {
background-color: #E5E5E5;
}
+
/* DataTables : Selection inputs */
-.dataTable.table th span.row_input, .dataTable.table td span.row_input {
+.dataTable.table th span.row_input,
+.dataTable.table td span.row_input {
display: inline-block;
width: 100%;
text-align: center;
}
+
/* Wiki text (hyperlinks) */
.wiki_broken_link {
text-decoration: line-through;
}
+
+/*# sourceMappingURL=portal.css.map */
diff --git a/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss b/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss
index caa3de4bf..bcbd0a761 100644
--- a/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss
+++ b/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss
@@ -1571,13 +1571,8 @@ table .group-actions .item-action-wrapper .panel-body > p:last-child{
}
}
.attachment-tooltip {
- width: 350px;
- height: 300px;
-
- img {
max-width: 100%;
max-height: 100%;
- }
}
.upload_container input{
diff --git a/datamodels/2.x/itop-portal-base/portal/public/lib/bootstrap/css/bootstrap-theme.css.map b/datamodels/2.x/itop-portal-base/portal/public/lib/bootstrap/css/bootstrap-theme.min.css.map
similarity index 100%
rename from datamodels/2.x/itop-portal-base/portal/public/lib/bootstrap/css/bootstrap-theme.css.map
rename to datamodels/2.x/itop-portal-base/portal/public/lib/bootstrap/css/bootstrap-theme.min.css.map
diff --git a/datamodels/2.x/itop-portal-base/portal/public/lib/bootstrap/css/bootstrap.css.map b/datamodels/2.x/itop-portal-base/portal/public/lib/bootstrap/css/bootstrap.min.css.map
similarity index 100%
rename from datamodels/2.x/itop-portal-base/portal/public/lib/bootstrap/css/bootstrap.css.map
rename to datamodels/2.x/itop-portal-base/portal/public/lib/bootstrap/css/bootstrap.min.css.map
diff --git a/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php b/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php
index 573a6217d..030f74ef6 100644
--- a/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php
+++ b/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php
@@ -517,6 +517,8 @@ class ObjectController extends BrickController
$oSubRequest = $oRequest;
$oSubRequest->request->set('operation', 'submit');
$oSubRequest->request->set('stimulus_code', '');
+ $oSubRequest->request->set('formmanager_class', $aData['form']['formmanager_class']);
+ $oSubRequest->request->set('formmanager_data', json_encode($aData['form']['formmanager_data']));
$aData = array('sMode' => 'apply_stimulus');
$aData['form'] = $oObjectFormHandler->HandleForm($oSubRequest, $aData['sMode'], $sObjectClass, $sObjectId,
@@ -1244,7 +1246,7 @@ class ObjectController extends BrickController
}
$aData['att_id'] = $iAttId;
- $aData['preview'] = $oDocument->IsPreviewAvailable() ? 'true' : 'false';
+ $aData['preview'] = $oDocument->IsPreviewAvailable() ;
$aData['file_size'] = $oDocument->GetFormattedSize();
$aData['creation_date'] = $oAttachment->Get('creation_date');
$aData['user_id_friendlyname'] = $oAttachment->Get('user_id_friendlyname');
diff --git a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php
index bb09ae089..1c5fc46e7 100644
--- a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php
+++ b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php
@@ -189,7 +189,7 @@ class ObjectFormManager extends FormManager
*
* @return bool true if the data are identical
*
- * @since 2.7.6 3.0.0 N°4384 check formmanager_data
+ * @since 2.7.6 3.0.0 N°4384 Check formmanager_data
*/
public static function CanTrustFormLayoutContent($sPostedFormManagerData, $aOriginalFormProperties)
{
@@ -200,7 +200,7 @@ class ObjectFormManager extends FormManager
return true;
}
- // we need to parse the content so that autoclose tags are returned correctly (`` => ``)
+ // We need to parse the content so that autoclose tags are returned correctly (`` => ``)
$oHtmlDocument = new \DOMDocument();
$sPostedFormLayoutContent = (isset($aPostedFormManagerData['formproperties']['layout']['content'])) ? $aPostedFormManagerData['formproperties']['layout']['content'] : '';
diff --git a/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php b/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php
index c2bd24e2d..537236e99 100644
--- a/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php
+++ b/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php
@@ -50,12 +50,17 @@ use UserRights;
*/
class ObjectFormHandlerHelper
{
- /** @var string ENUM_MODE_VIEW */
+ /** @var string */
const ENUM_MODE_VIEW = 'view';
- /** @var string ENUM_MODE_EDIT */
+ /** @var string */
const ENUM_MODE_EDIT = 'edit';
- /** @var string ENUM_MODE_CREATE */
+ /** @var string */
const ENUM_MODE_CREATE = 'create';
+ /**
+ * @var string
+ * @since 2.7.7 3.0.1 3.1.0
+ */
+ const ENUM_MODE_APPLY_STIMULUS = 'apply_stimulus';
/** @var \Combodo\iTop\Portal\Helper\RequestManipulatorHelper $oRequestManipulator */
private $oRequestManipulator;
@@ -172,7 +177,7 @@ class ObjectFormHandlerHelper
'label' => Dict::S('Portal:Button:Submit'),
),
);
- if ($sMode !== 'apply_stimulus')
+ if ($sMode !== static::ENUM_MODE_APPLY_STIMULUS)
{
// Add transition buttons
$oSetToCheckRights = DBObjectSet::FromObject($oObject);
@@ -237,9 +242,9 @@ class ObjectFormHandlerHelper
// Note : We might need to distinguish form & renderer endpoints
switch($sMode)
{
- case 'create':
- case 'edit':
- case 'view':
+ case static::ENUM_MODE_CREATE:
+ case static::ENUM_MODE_EDIT:
+ case static::ENUM_MODE_VIEW:
$sFormEndpoint = $this->oUrlGenerator->generate(
'p_object_'.$sMode,
array(
@@ -249,7 +254,7 @@ class ObjectFormHandlerHelper
);
break;
- case 'apply_stimulus':
+ case static::ENUM_MODE_APPLY_STIMULUS:
$sFormEndpoint = $this->oUrlGenerator->generate(
'p_object_apply_stimulus',
array(
diff --git a/datamodels/2.x/itop-request-mgmt-itil/dictionaries/de.dict.itop-request-mgmt-itil.php b/datamodels/2.x/itop-request-mgmt-itil/dictionaries/de.dict.itop-request-mgmt-itil.php
index 4edb18017..769e63ba7 100644
--- a/datamodels/2.x/itop-request-mgmt-itil/dictionaries/de.dict.itop-request-mgmt-itil.php
+++ b/datamodels/2.x/itop-request-mgmt-itil/dictionaries/de.dict.itop-request-mgmt-itil.php
@@ -31,7 +31,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Menu:UserRequest:OpenRequests+' => '',
'UI:WelcomeMenu:MyAssignedCalls' => 'Mir zugewiesene Benutzeranfragen',
'UI-RequestManagementOverview-RequestByType-last-14-days' => 'Benutzeranfragen der letzten 14 Tage nach Typ',
- 'UI-RequestManagementOverview-Last-14-days' => 'Anzahl Benutzeranfragen der letzen 14 Tage',
+ 'UI-RequestManagementOverview-Last-14-days' => 'Anzahl Benutzeranfragen der letzten 14 Tage',
'UI-RequestManagementOverview-OpenRequestByStatus' => 'Offene Benutzeranfragen nach Status',
'UI-RequestManagementOverview-OpenRequestByAgent' => 'Offene Benutzeranfragen nach Bearbeiter',
'UI-RequestManagementOverview-OpenRequestByType' => 'Offene Benutzeranfragen nach Typ',
@@ -122,7 +122,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:UserRequest/Attribute:origin/Value:portal+' => '',
'Class:UserRequest/Attribute:approver_id' => 'Genehmiger',
'Class:UserRequest/Attribute:approver_id+' => '',
- 'Class:UserRequest/Attribute:approver_email' => 'Gemehhmiger-Email',
+ 'Class:UserRequest/Attribute:approver_email' => 'Gemehhmiger-E-Mail',
'Class:UserRequest/Attribute:approver_email+' => '',
'Class:UserRequest/Attribute:service_id' => 'Service',
'Class:UserRequest/Attribute:service_id+' => '',
diff --git a/datamodels/2.x/itop-request-mgmt/dictionaries/de.dict.itop-request-mgmt.php b/datamodels/2.x/itop-request-mgmt/dictionaries/de.dict.itop-request-mgmt.php
index d9268d902..1aa8b8baa 100644
--- a/datamodels/2.x/itop-request-mgmt/dictionaries/de.dict.itop-request-mgmt.php
+++ b/datamodels/2.x/itop-request-mgmt/dictionaries/de.dict.itop-request-mgmt.php
@@ -128,7 +128,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:UserRequest/Attribute:origin/Value:portal+' => '',
'Class:UserRequest/Attribute:approver_id' => 'Genehmiger',
'Class:UserRequest/Attribute:approver_id+' => '',
- 'Class:UserRequest/Attribute:approver_email' => 'Genehmiger-Email',
+ 'Class:UserRequest/Attribute:approver_email' => 'Genehmiger-E-Mail',
'Class:UserRequest/Attribute:approver_email+' => '',
'Class:UserRequest/Attribute:service_id' => 'Service',
'Class:UserRequest/Attribute:service_id+' => '',
@@ -178,7 +178,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:UserRequest/Attribute:resolution_code/Value:assistance+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:bug fixed' => 'Bugfix',
'Class:UserRequest/Attribute:resolution_code/Value:bug fixed+' => '',
- 'Class:UserRequest/Attribute:resolution_code/Value:hardware repair' => 'Hardware-Reperatur',
+ 'Class:UserRequest/Attribute:resolution_code/Value:hardware repair' => 'Hardware-Reparatur',
'Class:UserRequest/Attribute:resolution_code/Value:hardware repair+' => '',
'Class:UserRequest/Attribute:resolution_code/Value:other' => 'Andere',
'Class:UserRequest/Attribute:resolution_code/Value:other+' => '',
@@ -260,7 +260,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Portal:SelectServiceElementFrom_Service' => 'Wählen Sie ein Service-Element für %1$s',
'Portal:ListServices' => 'Liste der Services',
'Portal:TitleDetailsFor_Service' => 'Details für Service',
- 'Portal:Button:CreateRequestFromService' => 'EIne Benutzeranfrage betreffend dieses Dienstes erzeugen',
+ 'Portal:Button:CreateRequestFromService' => 'Eine Benutzeranfrage betreffend dieses Dienstes erzeugen',
'Portal:ListOpenRequests' => 'Offene Benutzeranfragen auflisten',
'Portal:UserRequest:MoreInfo' => 'Weitere Informationen',
'Portal:Details-Service-Element' => 'Service-Elemente',
@@ -272,7 +272,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Portal:NoOpenProblem' => 'Keine offenen Problems',
'Portal:SelectLanguage' => 'Ändern Sie Ihre Spracheinstellung',
'Portal:LanguageChangedTo_Lang' => 'Spracheinstellung geändert auf: ',
- 'Portal:ChooseYourFavoriteLanguage' => 'WÄhlen Sie Ihre bevorzugte Sprache',
+ 'Portal:ChooseYourFavoriteLanguage' => 'Wählen Sie Ihre bevorzugte Sprache',
'Class:UserRequest/Method:ResolveChildTickets' => 'Kind-Tickets lösen',
'Class:UserRequest/Method:ResolveChildTickets+' => 'Lösung auf Kind-Tickets übertragen (ev_autoresolve), und folgende Ticket-Eigenschaften angleichen: Service, Team, Agent, Lösungsinformationen',
diff --git a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/de.dict.itop-service-mgmt-provider.php b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/de.dict.itop-service-mgmt-provider.php
index 4f3b61b52..2030c9226 100644
--- a/datamodels/2.x/itop-service-mgmt-provider/dictionaries/de.dict.itop-service-mgmt-provider.php
+++ b/datamodels/2.x/itop-service-mgmt-provider/dictionaries/de.dict.itop-service-mgmt-provider.php
@@ -20,7 +20,7 @@
* @copyright Copyright (C) 2021 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
-*
+*
*/
Dict::Add('DE DE', 'German', 'Deutsch', array(
'Menu:ServiceManagement' => 'Service-Management',
@@ -39,7 +39,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Menu:ServiceSubcategory+' => '',
'Menu:Service' => 'Services',
'Menu:Service+' => '',
- 'Menu:ServiceElement' => 'Sevice-Elemente',
+ 'Menu:ServiceElement' => 'Service-Elemente',
'Menu:ServiceElement+' => '',
'Menu:SLA' => 'SLAs',
'Menu:SLA+' => '',
diff --git a/datamodels/2.x/itop-service-mgmt/dictionaries/de.dict.itop-service-mgmt.php b/datamodels/2.x/itop-service-mgmt/dictionaries/de.dict.itop-service-mgmt.php
index e9ad75441..6fd2450ee 100644
--- a/datamodels/2.x/itop-service-mgmt/dictionaries/de.dict.itop-service-mgmt.php
+++ b/datamodels/2.x/itop-service-mgmt/dictionaries/de.dict.itop-service-mgmt.php
@@ -20,7 +20,7 @@
* @copyright Copyright (C) 2021 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
-*
+*
*/
Dict::Add('DE DE', 'German', 'Deutsch', array(
'Menu:ServiceManagement' => 'Service Management',
@@ -38,7 +38,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Menu:ServiceSubcategory+' => 'Service-Unterkategorien',
'Menu:Service' => 'Services',
'Menu:Service+' => 'Services',
- 'Menu:ServiceElement' => 'Sevice-Elemente',
+ 'Menu:ServiceElement' => 'Service-Elemente',
'Menu:ServiceElement+' => '',
'Menu:SLA' => 'SLAs',
'Menu:SLA+' => 'Service Level Agreements',
diff --git a/datamodels/2.x/itop-structure/dictionaries/de.dict.itop-structure.php b/datamodels/2.x/itop-structure/dictionaries/de.dict.itop-structure.php
index d8f1a45ec..9445698ff 100644
--- a/datamodels/2.x/itop-structure/dictionaries/de.dict.itop-structure.php
+++ b/datamodels/2.x/itop-structure/dictionaries/de.dict.itop-structure.php
@@ -118,7 +118,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Contact/Attribute:org_id+' => '',
'Class:Contact/Attribute:org_name' => 'Organisation',
'Class:Contact/Attribute:org_name+' => '',
- 'Class:Contact/Attribute:email' => 'Email',
+ 'Class:Contact/Attribute:email' => 'E-Mail',
'Class:Contact/Attribute:email+' => '',
'Class:Contact/Attribute:phone' => 'Telefonnummer',
'Class:Contact/Attribute:phone+' => '',
@@ -163,7 +163,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Person/Attribute:team_list+' => '',
'Class:Person/Attribute:tickets_list' => 'Tickets',
'Class:Person/Attribute:tickets_list+' => '',
- 'Class:Person/Attribute:manager_id_friendlyname' => 'Manager Friendly Name',
+ 'Class:Person/Attribute:manager_id_friendlyname' => 'Manager-Name (lesbar)',
'Class:Person/Attribute:manager_id_friendlyname+' => '',
'Class:Person/Attribute:picture' => 'Bild',
'Class:Person/Attribute:picture+' => '',
@@ -272,7 +272,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
//
Dict::Add('DE DE', 'German', 'Deutsch', array(
- 'Class:DocumentType' => 'Dokumentyp',
+ 'Class:DocumentType' => 'Dokumenttyp',
'Class:DocumentType+' => '',
));
diff --git a/datamodels/2.x/itop-themes-compat/de.dict.itop-themes-compat.php b/datamodels/2.x/itop-themes-compat/de.dict.itop-themes-compat.php
index 94b8fbfed..181bd28cb 100644
--- a/datamodels/2.x/itop-themes-compat/de.dict.itop-themes-compat.php
+++ b/datamodels/2.x/itop-themes-compat/de.dict.itop-themes-compat.php
@@ -7,5 +7,5 @@
*/
Dict::Add('DE DE', 'German', 'Deutsch', array(
- 'theme:light-grey' => 'Light Grey (deprecated)~~',
+ 'theme:light-grey' => 'Light Grey (veraltet)',
));
diff --git a/datamodels/2.x/itop-tickets/dictionaries/de.dict.itop-tickets.php b/datamodels/2.x/itop-tickets/dictionaries/de.dict.itop-tickets.php
index e74b7f85e..6d4c05e15 100644
--- a/datamodels/2.x/itop-tickets/dictionaries/de.dict.itop-tickets.php
+++ b/datamodels/2.x/itop-tickets/dictionaries/de.dict.itop-tickets.php
@@ -20,7 +20,7 @@
* @copyright Copyright (C) 2021 Combodo SARL
* @licence http://opensource.org/licenses/AGPL-3.0
-*
+*
*/
Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Ticket' => 'Ticket',
@@ -90,7 +90,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:lnkContactToTicket/Attribute:ticket_ref+' => '',
'Class:lnkContactToTicket/Attribute:contact_id' => 'Kontakt',
'Class:lnkContactToTicket/Attribute:contact_id+' => '',
- 'Class:lnkContactToTicket/Attribute:contact_email' => 'Kontakt-Email',
+ 'Class:lnkContactToTicket/Attribute:contact_email' => 'Kontakt-E-Mail',
'Class:lnkContactToTicket/Attribute:contact_email+' => '',
'Class:lnkContactToTicket/Attribute:role' => 'Rolle (Text)',
'Class:lnkContactToTicket/Attribute:role+' => '',
@@ -127,7 +127,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:WorkOrder/Attribute:team_name+' => '',
'Class:WorkOrder/Attribute:agent_id' => 'Bearbeiter',
'Class:WorkOrder/Attribute:agent_id+' => '',
- 'Class:WorkOrder/Attribute:agent_email' => 'Melder-Email',
+ 'Class:WorkOrder/Attribute:agent_email' => 'Melder-E-Mail',
'Class:WorkOrder/Attribute:agent_email+' => '',
'Class:WorkOrder/Attribute:start_date' => 'Startdatum',
'Class:WorkOrder/Attribute:start_date+' => '',
@@ -165,16 +165,16 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:cmdbAbstractObject/Method:SetCurrentDate+' => 'Ein Attribut (Feld) mit der aktuellen Zeit und Datum schreiben',
'Class:cmdbAbstractObject/Method:SetCurrentDate/Param:1' => 'Zielfeld',
'Class:cmdbAbstractObject/Method:SetCurrentDate/Param:1+' => 'Das Feld, das im aktuellen Objekt geschrieben werden soll',
- 'Class:cmdbAbstractObject/Method:SetCurrentDateIfNull' => 'SetCurrentDateIfNull~~',
- 'Class:cmdbAbstractObject/Method:SetCurrentDateIfNull+' => 'Set an empty field with the current date and time~~',
- 'Class:cmdbAbstractObject/Method:SetCurrentDateIfNull/Param:1' => 'Target Field~~',
- 'Class:cmdbAbstractObject/Method:SetCurrentDateIfNull/Param:1+' => 'The field to set, in the current object~~',
+ 'Class:cmdbAbstractObject/Method:SetCurrentDateIfNull' => 'SetCurrentDateIfNull',
+ 'Class:cmdbAbstractObject/Method:SetCurrentDateIfNull+' => 'Ein Attribut (Feld), wenn leer, mit der aktuellen Zeit und Datum schreiben',
+ 'Class:cmdbAbstractObject/Method:SetCurrentDateIfNull/Param:1' => 'Zielfeld',
+ 'Class:cmdbAbstractObject/Method:SetCurrentDateIfNull/Param:1+' => 'Das Feld, das im aktuellen Objekt geschrieben werden soll',
'Class:cmdbAbstractObject/Method:SetCurrentUser' => 'SetCurrentUser',
- 'Class:cmdbAbstractObject/Method:SetCurrentUser+' => 'Ein Attribut (Feld) mit dem dezeit eingeloggten User schreiben',
+ 'Class:cmdbAbstractObject/Method:SetCurrentUser+' => 'Ein Attribut (Feld) mit dem derzeit eingeloggten User schreiben',
'Class:cmdbAbstractObject/Method:SetCurrentUser/Param:1' => 'Zielfeld',
'Class:cmdbAbstractObject/Method:SetCurrentUser/Param:1+' => 'Das Feld, das im aktuellen Objekt geschrieben werden soll. Falls das Feld vom Typ String ist, wird der FriendlyName des Users verwendet, ansonsten der Identifikator. Der FriendlyName ist der Name, der mit dem User-Account verknüpften Person (falls vorhanden), ansonsten der Accountname (Login).',
'Class:cmdbAbstractObject/Method:SetCurrentPerson' => 'SetCurrentPerson',
- 'Class:cmdbAbstractObject/Method:SetCurrentPerson+' => 'Schreibe ein Attribut (Feld) mit der gerade eingeloggten Person (die \\"Person\\", die mit dem geade eingeloggten User verknüpft ist)',
+ 'Class:cmdbAbstractObject/Method:SetCurrentPerson+' => 'Schreibe ein Attribut (Feld) mit der gerade eingeloggten Person (die \\"Person\\", die mit dem gerade eingeloggten User verknüpft ist)',
'Class:cmdbAbstractObject/Method:SetCurrentPerson/Param:1' => 'Zielfeld',
'Class:cmdbAbstractObject/Method:SetCurrentPerson/Param:1+' => 'Das Feld, das im aktuellen Objekt geschrieben werden soll. Falls das Feld vom Typ String ist, wird der FriendlyName des Users verwendet, ansonsten der Identifikator.',
'Class:cmdbAbstractObject/Method:SetElapsedTime' => 'SetElapsedTime',
@@ -185,34 +185,34 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:2+' => 'Das Feld, aus dem die Refernzzeit/datum gelesen werden soll',
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:3' => 'Arbeitszeiten',
'Class:cmdbAbstractObject/Method:SetElapsedTime/Param:3+' => 'Leer lassen um das Standard-Arbeitzeiten-Schema zu verwenden, oder auf \\"DefaultWorkingTimeComputer\\" setzen um ein 24x7-Schema zu erzwingen',
- 'Class:cmdbAbstractObject/Method:SetIfNull' => 'SetIfNull~~',
- 'Class:cmdbAbstractObject/Method:SetIfNull+' => 'Set a field only if it is empty, with a static value~~',
- 'Class:cmdbAbstractObject/Method:SetIfNull/Param:1' => 'Target Field~~',
- 'Class:cmdbAbstractObject/Method:SetIfNull/Param:1+' => 'The field to set, in the current object~~',
- 'Class:cmdbAbstractObject/Method:SetIfNull/Param:2' => 'Value~~',
- 'Class:cmdbAbstractObject/Method:SetIfNull/Param:2+' => 'The value to set~~',
- 'Class:cmdbAbstractObject/Method:AddValue' => 'AddValue~~',
- 'Class:cmdbAbstractObject/Method:AddValue+' => 'Add a fixed value to a field~~',
- 'Class:cmdbAbstractObject/Method:AddValue/Param:1' => 'Target Field~~',
- 'Class:cmdbAbstractObject/Method:AddValue/Param:1+' => 'The field to modify, in the current object~~',
- 'Class:cmdbAbstractObject/Method:AddValue/Param:2' => 'Value~~',
- 'Class:cmdbAbstractObject/Method:AddValue/Param:2+' => 'Decimal value which will be added, can be negative~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDate' => 'SetComputedDate~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDate+' => 'Set a field with a date computed from another field with extra logic~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDate/Param:1' => 'Target Field~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDate/Param:1+' => 'The field to set, in the current object~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDate/Param:2' => 'Modifier~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDate/Param:2+' => 'Textual information to modify the source date, eg. "+3 days"~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDate/Param:3' => 'Source field~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDate/Param:3+' => 'The field used as source to apply the Modifier logic~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull' => 'SetComputedDateIfNull~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull+' => 'Set non empty field with a date computed from another field with extra logic~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull/Param:1' => 'Target Field~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull/Param:1+' => 'The field to set, in the current object~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull/Param:2' => 'Modifier~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull/Param:2+' => 'Textual information to modify the source date, eg. "+3 days"~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull/Param:3' => 'Source field~~',
- 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull/Param:3+' => 'The field used as source to apply the Modifier logic~~',
+ 'Class:cmdbAbstractObject/Method:SetIfNull' => 'SetIfNull',
+ 'Class:cmdbAbstractObject/Method:SetIfNull+' => 'Ein Attribut (Feld), wenn leer, mit einem festen Wert schreiben',
+ 'Class:cmdbAbstractObject/Method:SetIfNull/Param:1' => 'Zielfeld',
+ 'Class:cmdbAbstractObject/Method:SetIfNull/Param:1+' => 'Das Feld, das im aktuellen Objekt geschrieben werden soll',
+ 'Class:cmdbAbstractObject/Method:SetIfNull/Param:2' => 'Wert',
+ 'Class:cmdbAbstractObject/Method:SetIfNull/Param:2+' => 'Der Wert der geschrieben werden soll',
+ 'Class:cmdbAbstractObject/Method:AddValue' => 'AddValue',
+ 'Class:cmdbAbstractObject/Method:AddValue+' => 'Addiert einen festen Wert zu einem Attribut (Feld)',
+ 'Class:cmdbAbstractObject/Method:AddValue/Param:1' => 'Zielfeld',
+ 'Class:cmdbAbstractObject/Method:AddValue/Param:1+' => 'Das Feld, das im aktuellen Objekt geschrieben werden soll',
+ 'Class:cmdbAbstractObject/Method:AddValue/Param:2' => 'Wert',
+ 'Class:cmdbAbstractObject/Method:AddValue/Param:2+' => 'Dezimalwert welcher addiert werden soll, kann auch negativ sein',
+ 'Class:cmdbAbstractObject/Method:SetComputedDate' => 'SetComputedDate',
+ 'Class:cmdbAbstractObject/Method:SetComputedDate+' => 'Ein Attribut (Feld) mit einem Datum schreiben, welches aus einem anderen Feld berechnet wird',
+ 'Class:cmdbAbstractObject/Method:SetComputedDate/Param:1' => 'Zielfeld',
+ 'Class:cmdbAbstractObject/Method:SetComputedDate/Param:1+' => 'Das Feld, das im aktuellen Objekt geschrieben werden soll',
+ 'Class:cmdbAbstractObject/Method:SetComputedDate/Param:2' => 'Modifikator',
+ 'Class:cmdbAbstractObject/Method:SetComputedDate/Param:2+' => 'Modifikator für das Quellfeld in Textform z.B. "+3 days"',
+ 'Class:cmdbAbstractObject/Method:SetComputedDate/Param:3' => 'Quellfeld',
+ 'Class:cmdbAbstractObject/Method:SetComputedDate/Param:3+' => 'Das Feld, welches als Quellfeld für den Modifikator verwendet werden soll',
+ 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull' => 'SetComputedDateIfNull',
+ 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull+' => 'Ein Attribut (Feld), wenn leer, mit einem Datum schreiben, welches aus einem anderen Feld berechnet wird',
+ 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull/Param:1' => 'Zielfeld',
+ 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull/Param:1+' => 'Das Feld, das im aktuellen Objekt geschrieben werden soll',
+ 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull/Param:2' => 'Modifikator',
+ 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull/Param:2+' => 'Modifikator für das Quellfeld in Textform z.B. "+3 days"',
+ 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull/Param:3' => 'Quellfeld',
+ 'Class:cmdbAbstractObject/Method:SetComputedDateIfNull/Param:3+' => 'Das Feld, welches als Quellfeld für den Modifikator verwendet werden soll',
'Class:cmdbAbstractObject/Method:Reset' => 'Reset',
'Class:cmdbAbstractObject/Method:Reset+' => 'Ein Attribut (Feld) auf seinen Default-Wert zurücksetzen',
'Class:cmdbAbstractObject/Method:Reset/Param:1' => 'Zielfeld',
@@ -242,4 +242,4 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Document/Attribute:contracts_list+' => '',
'Class:Document/Attribute:services_list' => 'Services',
'Class:Document/Attribute:services_list+' => '',
-));
\ No newline at end of file
+));
diff --git a/dictionaries/de.dictionary.itop.core.php b/dictionaries/de.dictionary.itop.core.php
index 38bb694b5..6cb66219b 100644
--- a/dictionaries/de.dictionary.itop.core.php
+++ b/dictionaries/de.dictionary.itop.core.php
@@ -77,7 +77,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Core:AttributeArchiveFlag/Value:no' => 'Nein',
'Core:AttributeArchiveFlag/Label' => 'Archiviert',
'Core:AttributeArchiveFlag/Label+' => '',
- 'Core:AttributeArchiveDate/Label' => 'Archivierungs Datum',
+ 'Core:AttributeArchiveDate/Label' => 'Archivierungsdatum',
'Core:AttributeArchiveDate/Label+' => '',
'Core:AttributeObsolescenceFlag' => 'Obsoleszenz-Flag',
@@ -107,7 +107,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Core:AttributeEncryptedString' => 'Verschlüsselter String',
'Core:AttributeEncryptedString+' => 'mit einem lokalen Schüssel verschlüsselter String',
'Core:AttributeEncryptUnknownLibrary' => 'Angegebene Library zur Verschlüsslung (%1$s) ist unbekannt',
- 'Core:AttributeEncryptFailedToDecrypt' => '** Entschlüsslungsfehler **',
+ 'Core:AttributeEncryptFailedToDecrypt' => '** Entschlüsselungsfehler **',
'Core:AttributeText' => 'Text',
'Core:AttributeText+' => 'Mehrzeiliger String',
@@ -115,14 +115,14 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Core:AttributeHTML' => 'HTML',
'Core:AttributeHTML+' => 'HTML-String',
- 'Core:AttributeEmailAddress' => 'Email-Adresse',
- 'Core:AttributeEmailAddress+' => 'Email-Adresse',
+ 'Core:AttributeEmailAddress' => 'E-Mail-Adresse',
+ 'Core:AttributeEmailAddress+' => 'E-Mail-Adresse',
'Core:AttributeIPAddress' => 'IP-Adresse',
'Core:AttributeIPAddress+' => 'IP-Adresse',
'Core:AttributeOQL' => 'OQL',
- 'Core:AttributeOQL+' => 'Object-Query-Langage-Ausdruck',
+ 'Core:AttributeOQL+' => 'Object-Query-Language-Ausdruck',
'Core:AttributeEnum' => 'Enum',
'Core:AttributeEnum+' => 'Liste vordefinierter alphanumerischer Strings',
@@ -175,7 +175,7 @@ Operatoren:
'Core:AttributeExternalKey' => 'Externer Schlüssel',
'Core:AttributeExternalKey+' => 'Externer (oder fremder) Schlüssel',
- 'Core:AttributeHierarchicalKey' => 'Hierarischer Key',
+ 'Core:AttributeHierarchicalKey' => 'Hierarchischer Key',
'Core:AttributeHierarchicalKey+' => 'Externer Key oder Foreign Key zum Parent',
'Core:AttributeExternalField' => 'Externes Feld',
@@ -204,7 +204,7 @@ Operatoren:
'Core:AttributeTag' => 'Tags',
'Core:AttributeTag+' => '',
-
+
'Core:Context=REST/JSON' => 'REST',
'Core:Context=Synchro' => 'Synchro',
'Core:Context=Setup' => 'Setup',
@@ -381,8 +381,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
//
Dict::Add('DE DE', 'German', 'Deutsch', array(
- 'Class:EventNotificationEmail' => 'Email Emission Event',
- 'Class:EventNotificationEmail+' => 'Verfolgung einer Email, die gesendet wurde',
+ 'Class:EventNotificationEmail' => 'E-Mail Emission Event',
+ 'Class:EventNotificationEmail+' => 'Verfolgung einer E-Mail, die gesendet wurde',
'Class:EventNotificationEmail/Attribute:to' => 'An',
'Class:EventNotificationEmail/Attribute:to+' => '',
'Class:EventNotificationEmail/Attribute:cc' => 'Kopie an',
@@ -498,7 +498,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:Action/Attribute:trigger_list+' => 'Trigger, die mit dieser Aktion verknüpft sind',
'Class:Action/Attribute:finalclass' => 'Typ',
'Class:Action/Attribute:finalclass+' => '',
- 'Action:WarningNoTriggerLinked' => 'Warning, no trigger is linked to the action. It will not be active until it has at least 1.~~',
+ 'Action:WarningNoTriggerLinked' => 'Warnung, es ist kein Trigger mit dieser Aktion verknüpft. Die Aktion ist nicht aktiv solange nicht mindestens 1 Trigger verknüpft ist.',
));
//
@@ -515,7 +515,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
//
Dict::Add('DE DE', 'German', 'Deutsch', array(
- 'Class:ActionEmail' => 'Email-Benachrichtigung',
+ 'Class:ActionEmail' => 'E-Mail-Benachrichtigung',
'Class:ActionEmail+' => '',
'Class:ActionEmail/Attribute:status+' => 'Dieser Zustand entscheidet, wer benachrichtigt werden soll: nur der Testempfänger, alle (To, cc und Bcc) oder niemand',
'Class:ActionEmail/Attribute:status/Value:test+' => 'Nur der Testempfänger wird benachrichtigt',
@@ -524,13 +524,13 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:ActionEmail/Attribute:test_recipient' => 'Testempfänger',
'Class:ActionEmail/Attribute:test_recipient+' => 'Empfänger im Fall eines "Test"-Status',
'Class:ActionEmail/Attribute:from' => 'Von (E-Mail)',
- 'Class:ActionEmail/Attribute:from+' => 'Absenderadresse wird im Email-Header mitgesendet',
+ 'Class:ActionEmail/Attribute:from+' => 'Absenderadresse wird im E-Mail-Header mitgesendet',
'Class:ActionEmail/Attribute:from_label' => 'Von (Label)',
- 'Class:ActionEmail/Attribute:from_label+' => 'Absendername wird im Email-Header mitgesendet',
+ 'Class:ActionEmail/Attribute:from_label+' => 'Absendername wird im E-Mail-Header mitgesendet',
'Class:ActionEmail/Attribute:reply_to' => 'Antworten an (E-Mail)',
- 'Class:ActionEmail/Attribute:reply_to+' => 'Wird im Email-Header mitgesendet',
+ 'Class:ActionEmail/Attribute:reply_to+' => 'Wird im E-Mail-Header mitgesendet',
'Class:ActionEmail/Attribute:reply_to_label' => 'Antworten an (Label)',
- 'Class:ActionEmail/Attribute:reply_to_label+' => 'Wird im Email-Header mitgesendet',
+ 'Class:ActionEmail/Attribute:reply_to_label+' => 'Wird im E-Mail-Header mitgesendet',
'Class:ActionEmail/Attribute:to' => 'An',
'Class:ActionEmail/Attribute:to+' => 'Empfänger der Nachricht',
'Class:ActionEmail/Attribute:cc' => 'Kopie an',
@@ -538,7 +538,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:ActionEmail/Attribute:bcc' => 'Blindkopie (BCC)',
'Class:ActionEmail/Attribute:bcc+' => '',
'Class:ActionEmail/Attribute:subject' => 'Betreff',
- 'Class:ActionEmail/Attribute:subject+' => 'Betreff der Email',
+ 'Class:ActionEmail/Attribute:subject+' => 'Betreff der E-Mail',
'Class:ActionEmail/Attribute:body' => 'Inhalt der Nachricht',
'Class:ActionEmail/Attribute:body+' => '',
'Class:ActionEmail/Attribute:importance' => 'Priorität',
@@ -578,7 +578,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:TriggerOnObject/Attribute:target_class' => 'Zielklasse',
'Class:TriggerOnObject/Attribute:target_class+' => '',
'Class:TriggerOnObject/Attribute:filter' => 'Filter',
- 'Class:TriggerOnObject/Attribute:filter+' => 'Limit the object list (of the target class) which will activate the trigger~~',
+ 'Class:TriggerOnObject/Attribute:filter+' => 'Einschränkung der Objekte (der Zielklasse) welche den Trigger aktivieren.',
'TriggerOnObject:WrongFilterQuery' => 'Fehlerhafter Filter-Query: %1$s',
'TriggerOnObject:WrongFilterClass' => 'Der Filter muss Objekte vom Typ \\"%1$s\\" zurückgeben.',
));
@@ -657,8 +657,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:TriggerOnObjectMention' => 'Trigger (bei Objekterwähnung)',
'Class:TriggerOnObjectMention+' => 'Trigger bei Objekterwähnung (@xxx) einer Objekt mit [eine Kinderklasse von] eine gegebene Klasse in ein Log-Attribut',
- 'Class:TriggerOnObjectMention/Attribute:mentioned_filter' => 'Mentioned filter~~',
- 'Class:TriggerOnObjectMention/Attribute:mentioned_filter+' => 'Limit the list of mentioned objects which will activate the trigger. If empty, any mentioned object (of any class) will activate it.~~',
+ 'Class:TriggerOnObjectMention/Attribute:mentioned_filter' => 'Filter für Objekterwähnung',
+ 'Class:TriggerOnObjectMention/Attribute:mentioned_filter+' => 'Einschränkung der Objekte welche diesen Trigger aktivieren. Wenn leer, wird er von jedem Objekt (beliebige Klasse) aktiviert.',
));
//
@@ -713,11 +713,11 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:SynchroDataSource/Attribute:full_load_periodicity' => 'Intervall zwischen zwei vollständigen Reloads',
'Class:SynchroDataSource/Attribute:full_load_periodicity+' => 'Ein vollständiger Reload des gesamten Datenbestands muss mindestens in diesem Intervall erfolgen',
'Class:SynchroDataSource/Attribute:action_on_zero' => 'Verhalten bei keinen Treffern',
- 'Class:SynchroDataSource/Attribute:action_on_zero+' => 'Verhalten, wenn die Suche keine Objekte zurückgibt',
+ 'Class:SynchroDataSource/Attribute:action_on_zero+' => 'Verhalten, wenn die Suche keine Objekte zurück gibt',
'Class:SynchroDataSource/Attribute:action_on_one' => 'Verhalten bei einem Treffer',
- 'Class:SynchroDataSource/Attribute:action_on_one+' => 'Verhalten, wenn die Suche genau ein Objekt zurückgibt',
+ 'Class:SynchroDataSource/Attribute:action_on_one+' => 'Verhalten, wenn die Suche genau ein Objekt zurück gibt',
'Class:SynchroDataSource/Attribute:action_on_multiple' => 'Verhalten bei vielen Treffern',
- 'Class:SynchroDataSource/Attribute:action_on_multiple+' => 'Verhalten, wenn die Suche mehr als ein Objekt zurückgibt',
+ 'Class:SynchroDataSource/Attribute:action_on_multiple+' => 'Verhalten, wenn die Suche mehr als ein Objekt zurück gibt',
'Class:SynchroDataSource/Attribute:user_delete_policy' => 'Zugelassene Benutzer',
'Class:SynchroDataSource/Attribute:user_delete_policy+' => 'Benutzer, die synchronisierte Objekte löschen dürfen',
'Class:SynchroDataSource/Attribute:delete_policy/Value:never' => 'Niemand',
@@ -749,7 +749,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Core:SynchroUpdate:Yes' => 'Ja',
'Core:SynchroUpdate:No' => 'Nein',
'Core:Synchro:LastestStatus' => 'Neuester Status',
- 'Core:Synchro:History' => 'Synchronisations-Verlauf',
+ 'Core:Synchro:History' => 'Synchronisationsverlauf',
'Core:Synchro:NeverRun' => 'Synchronisation noch nicht erfolgt. Kein Protokoll verfügbar.',
'Core:Synchro:SynchroEndedOn_Date' => 'Die letzte Synchronisation endete um %1$s.',
'Core:Synchro:SynchroRunningStartedOn_Date' => 'Die Synchronisation, die um %1$s gestartet wurde, läuft noch ...',
@@ -773,13 +773,13 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Core:SynchroLogTitle' => '%1$s - %2$s',
'Core:Synchro:Nb_Replica' => 'Replica verarbeitet: %1$s',
'Core:Synchro:Nb_Class:Objects' => '%1$s: %2$s',
- 'Class:SynchroDataSource/Error:AtLeastOneReconciliationKeyMustBeSpecified' => 'Mindestens ein Abgleichsschlüssel muss angegeben werden, oder das Abgleichsvorgehen muß den primären Schlüssel verwenden.',
+ 'Class:SynchroDataSource/Error:AtLeastOneReconciliationKeyMustBeSpecified' => 'Mindestens ein Abgleichsschlüssel muss angegeben werden, oder das Abgleichsvorgehen muss den primären Schlüssel verwenden.',
'Class:SynchroDataSource/Error:DeleteRetentionDurationMustBeSpecified' => 'Der Zeitraum bis zur endgültigen Löschung muss angegeben werden, da die Objekte nach einer Kennzeichnung als obsolet gelöscht werden.',
'Class:SynchroDataSource/Error:DeletePolicyUpdateMustBeSpecified' => 'Obsolete Objekte werden aktualisiert, aber es wurde keine Aktualisierung angegeben.',
'Class:SynchroDataSource/Error:DataTableAlreadyExists' => 'Tabelle %1$s existiert bereits in der Datenbank. Bitte benutzen Sie einen anderen Namen für die Datenbanktabelle aus dieser Datenquelle.',
'Core:SynchroReplica:PublicData' => 'Öffentliche Daten',
'Core:SynchroReplica:PrivateDetails' => 'Private Hinweise',
- 'Core:SynchroReplica:BackToDataSource' => 'Zurück zur Synchronisations-Datenquelle: %1$s',
+ 'Core:SynchroReplica:BackToDataSource' => 'Zurück zur Synchronisationsdatenquelle: %1$s',
'Core:SynchroReplica:ListOfReplicas' => 'Liste der Replica',
'Core:SynchroAttExtKey:ReconciliationById' => 'id (Primärschlüssel)',
'Core:SynchroAtt:attcode' => 'Attribut',
@@ -807,7 +807,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Core:SyncSplitModeCLIOnly' => 'Die Synchronisation kann nur in Chunks ausgeführt werden, wenn sie im CLI-Moduls verwendet wird.',
'Core:Synchro:ListReplicas_AllReplicas_Errors_Warnings' => '%1$s Replicas, %2$s Fehler, %3$s Warnung(en).',
'Core:SynchroReplica:TargetObject' => 'Synchronisiertes Objekt: %1$s',
- 'Class:AsyncSendEmail' => 'Email (asynchron)',
+ 'Class:AsyncSendEmail' => 'E-Mail (asynchron)',
'Class:AsyncSendEmail/Attribute:to' => 'An',
'Class:AsyncSendEmail/Attribute:subject' => 'Betreff',
'Class:AsyncSendEmail/Attribute:body' => 'Body',
@@ -832,7 +832,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:create' => 'Erzeugen',
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:error' => 'Fehler',
'Class:SynchroDataSource/Attribute:action_on_multiple/Value:take_first' => 'Ersten Treffer benutzen',
- 'Class:SynchroDataSource/Attribute:delete_policy' => 'Löschungs-Policy',
+ 'Class:SynchroDataSource/Attribute:delete_policy' => 'Löschrichtlinie',
'Class:SynchroDataSource/Attribute:delete_policy/Value:delete' => 'Löschen',
'Class:SynchroDataSource/Attribute:delete_policy/Value:ignore' => 'Ignorieren',
'Class:SynchroDataSource/Attribute:delete_policy/Value:update' => 'Update',
@@ -915,7 +915,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
// Bulk export
'Core:BulkExport:MissingParameter_Param' => 'Fehlender Parameter "%1$s"',
- 'Core:BulkExport:InvalidParameter_Query' => 'ungültiger Wert für den Paramter "query". Es gibt keinen Eintrag in der Query-Bibliothek, der zu der id "%1$s" korrespondiert.',
+ 'Core:BulkExport:InvalidParameter_Query' => 'ungültiger Wert für den Parameter "query". Es gibt keinen Eintrag in der Query-Bibliothek, der zu der id "%1$s" korrespondiert.',
'Core:BulkExport:ExportFormatPrompt' => 'Exportformat:',
'Core:BulkExportOf_Class' => '%1$s-Export',
'Core:BulkExport:ClickHereToDownload_FileName' => 'Klicken Sie hier um %1$s herunterzuladen',
@@ -926,7 +926,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Core:BulkExport:XLSXFormat' => 'Excel 2007 oder neuer (*.xlsx)',
'Core:BulkExport:PDFFormat' => 'PDF-Dokument (*.pdf)',
'Core:BulkExport:DragAndDropHelp' => 'Nutzen Sie Drag and Drop für die Spaltenüberschriften um die Spalten zu sortieren. Vorschau %1$s Zeilen. Gesamtzeilenzahl für den Export: %2$s.',
- 'Core:BulkExport:EmptyPreview' => 'Wählen Sie die Spalten für den Export aus der obenstehenden Liste',
+ 'Core:BulkExport:EmptyPreview' => 'Wählen Sie die Spalten für den Export aus der oben stehenden Liste',
'Core:BulkExport:ColumnsOrder' => 'Spaltenreihenfolge',
'Core:BulkExport:AvailableColumnsFrom_Class' => 'Verfügbare Spalten für %1$s',
'Core:BulkExport:NoFieldSelected' => 'Wählen Sie mindestens eine Spalte für den Export aus',
@@ -934,10 +934,10 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Core:BulkExport:UncheckAll' => 'Auswahl aufheben',
'Core:BulkExport:ExportCancelledByUser' => 'Export durch den Benutzer abgebrochen',
'Core:BulkExport:CSVOptions' => 'CSV-Optionen',
- 'Core:BulkExport:CSVLocalization' => 'Lokaliserung',
+ 'Core:BulkExport:CSVLocalization' => 'Lokalisierung',
'Core:BulkExport:PDFOptions' => 'PDF-Optionen',
'Core:BulkExport:PDFPageFormat' => 'Seitenformat',
- 'Core:BulkExport:PDFPageSize' => 'Seitengrösse:',
+ 'Core:BulkExport:PDFPageSize' => 'Seitengröße:',
'Core:BulkExport:PageSize-A4' => 'A4',
'Core:BulkExport:PageSize-A3' => 'A3',
'Core:BulkExport:PageSize-Letter' => 'Letter',
@@ -1088,8 +1088,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:AsyncTask/Attribute:last_error+' => '',
'Class:AsyncTask/Attribute:last_attempt' => 'Letzter Versuch',
'Class:AsyncTask/Attribute:last_attempt+' => '',
- 'Class:AsyncTask:InvalidConfig_Class_Keys' => 'Invalid format for the configuration of "async_task_retries[%1$s]". Expecting an array with the following keys: %2$s~~',
- 'Class:AsyncTask:InvalidConfig_Class_InvalidKey_Keys' => 'Invalid format for the configuration of "async_task_retries[%1$s]": unexpected key "%2$s". Expecting only the following keys: %3$s~~',
+ 'Class:AsyncTask:InvalidConfig_Class_Keys' => 'Ungültiges Format der Konfiguration für "async_task_retries[%1$s]". Erwartet wird ein Array mit den Schlüsseln: %2$s',
+ 'Class:AsyncTask:InvalidConfig_Class_InvalidKey_Keys' => 'Ungültiges Format der Konfiguration für "async_task_retries[%1$s]": unerwarteter Schlüssel "%2$s". Erwartet werden nur die Schlüssel: %3$s',
));
//
@@ -1127,6 +1127,3 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:ResourceSystemMenu' => 'Ressource "System Menü"',
'Class:ResourceSystemMenu+' => '',
));
-
-
-
diff --git a/dictionaries/de.dictionary.itop.ui.php b/dictionaries/de.dictionary.itop.ui.php
index d69780ae8..9ae46baeb 100644
--- a/dictionaries/de.dictionary.itop.ui.php
+++ b/dictionaries/de.dictionary.itop.ui.php
@@ -6,7 +6,7 @@
Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:AuditCategory' => 'Audit-Kategorie',
'Class:AuditCategory+' => 'Definition einer Objektgruppe, die durch Regeln überprüft werden soll.',
- 'Class:AuditCategory/Attribute:name' => 'Kategorienname',
+ 'Class:AuditCategory/Attribute:name' => 'Kategoriename',
'Class:AuditCategory/Attribute:name+' => 'Kurzname für diese Kategorie',
'Class:AuditCategory/Attribute:description' => 'Beschreibung der Audit-Kategorien',
'Class:AuditCategory/Attribute:description+' => 'Ausführliche Beschreibung dieser Audit-Kategorie',
@@ -33,7 +33,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:AuditRule/Attribute:query' => 'Durchzuführende Abfrage',
'Class:AuditRule/Attribute:query+' => 'Die auszuführende OQL-Abfrage',
'Class:AuditRule/Attribute:valid_flag' => 'Gültiges Objekt?',
- 'Class:AuditRule/Attribute:valid_flag+' => 'true falls die Regel ein gültiges Objekt zurückgibt, andernfalls false',
+ 'Class:AuditRule/Attribute:valid_flag+' => 'true falls die Regel ein gültiges Objekt zurück gibt, andernfalls false',
'Class:AuditRule/Attribute:valid_flag/Value:true' => 'true',
'Class:AuditRule/Attribute:valid_flag/Value:true+' => 'true',
'Class:AuditRule/Attribute:valid_flag/Value:false' => 'false',
@@ -41,7 +41,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:AuditRule/Attribute:category_id' => 'Kategorie',
'Class:AuditRule/Attribute:category_id+' => 'Kategorie für diese Regel',
'Class:AuditRule/Attribute:category_name' => 'Kategorie',
- 'Class:AuditRule/Attribute:category_name+' => 'Kategorienname für diese Regel',
+ 'Class:AuditRule/Attribute:category_name+' => 'Kategoriename für diese Regel',
));
//
@@ -86,11 +86,11 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:User/Attribute:org_id' => 'Organisation',
'Class:User/Attribute:org_id+' => 'Organisation der verknüpften Person',
'Class:User/Attribute:last_name' => 'Nachname',
- 'Class:User/Attribute:last_name+' => 'Nachname des Kontaktes',
+ 'Class:User/Attribute:last_name+' => 'Nachname des Kontakts',
'Class:User/Attribute:first_name' => 'Vorname',
- 'Class:User/Attribute:first_name+' => 'Vorname des Kontaktes',
- 'Class:User/Attribute:email' => 'Email-Adresse',
- 'Class:User/Attribute:email+' => 'Email-Adresse des Kontaktes',
+ 'Class:User/Attribute:first_name+' => 'Vorname des Kontakts',
+ 'Class:User/Attribute:email' => 'E-Mail-Adresse',
+ 'Class:User/Attribute:email+' => 'E-Mail-Adresse des Kontakts',
'Class:User/Attribute:login' => 'Login',
'Class:User/Attribute:login+' => 'Benutzer-Anmeldename',
'Class:User/Attribute:language' => 'Sprache',
@@ -110,10 +110,10 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
'Class:User/Error:LoginMustBeUnique' => 'Login-Namen müssen unterschiedlich sein - "%1s" benutzt diesen Login-Name bereits.',
'Class:User/Error:AtLeastOneProfileIsNeeded' => 'Mindestens ein Profil muss diesem Benutzer zugewiesen sein.',
- 'Class:User/Error:ProfileNotAllowed' => 'Profile "%1$s" cannot be added it will deny the access to backoffice~~',
- 'Class:User/Error:StatusChangeIsNotAllowed' => 'Changing status is not allowed for your own User~~',
- 'Class:User/Error:AllowedOrgsMustContainUserOrg' => 'Allowed organizations must contain User organization~~',
- 'Class:User/Error:CurrentProfilesHaveInsufficientRights' => 'The current list of profiles does not give sufficient access rights (Users are not modifiable anymore)~~',
+ 'Class:User/Error:ProfileNotAllowed' => 'Profil "%1$s" kann nicht hinzugefügt werde, es verhindert den Zugriff auf das Backoffice.',
+ 'Class:User/Error:StatusChangeIsNotAllowed' => 'Statusänderungen sind für den eigenen Benutzer nicht erlaubt.',
+ 'Class:User/Error:AllowedOrgsMustContainUserOrg' => 'Die Organisation des Benutzers muss in den erlaubten Organisationen enthalten sein.',
+ 'Class:User/Error:CurrentProfilesHaveInsufficientRights' => 'Die aktuelle Liste an Profilen vergibt unzureichende Berechtigungen (Benutzer können nicht mehr geändert werden)',
'Class:User/Error:AtLeastOneOrganizationIsNeeded' => 'Mindestens eine Organisation muss diesem Benutzer zugewiesen sein.',
'Class:User/Error:OrganizationNotAllowed' => 'Diese Organisation ist nicht erlaubt.',
'Class:User/Error:UserOrganizationNotAllowed' => 'Das Benutzerkonto gehört nicht zu den für Sie freigegebenen Organisationen',
@@ -412,7 +412,7 @@ We hope you’ll enjoy this version as much as we enjoyed imagining and creating
'UI:Button:Insert' => 'Einfügen',
'UI:Button:More' => 'Mehr',
'UI:Button:Less' => 'Weniger',
- 'UI:Button:Wait' => 'Bitte warten Sie, während die Felder geupdated werden...',
+ 'UI:Button:Wait' => 'Bitte warten Sie, während die Felder aktualisiert werden...',
'UI:Treeview:CollapseAll' => 'Alle einklappen',
'UI:Treeview:ExpandAll' => 'Alle ausklappen',
'UI:UserPref:DoNotShowAgain' => 'Nicht wieder zeigen',
@@ -424,19 +424,19 @@ We hope you’ll enjoy this version as much as we enjoyed imagining and creating
'UI:SearchFor_Class' => 'Suche nach Objekten vom Typ "%1$s"',
'UI:NoObjectToDisplay' => 'Kein Objekt zur Anzeige vorhanden.',
'UI:Error:SaveFailed' => 'Objekt kann nicht gespeichert werden:',
- 'UI:Error:MandatoryTemplateParameter_object_id' => 'Parameter object_id ist erforderlich, wenn link_attr verwendet wird. Überprüfen Sie die Defintion des Display-Templates.',
- 'UI:Error:MandatoryTemplateParameter_target_attr' => 'Parameter target_attr ist erforderlich, wenn link_attr verwendet wird. Überprüfen Sie die Defintion des Display-Templates.',
- 'UI:Error:MandatoryTemplateParameter_group_by' => 'Parameter group_by ist erforderlich. Überprüfen Sie die Defintion des Display-Templates.',
+ 'UI:Error:MandatoryTemplateParameter_object_id' => 'Parameter object_id ist erforderlich, wenn link_attr verwendet wird. Überprüfen Sie die Definition des Display-Templates.',
+ 'UI:Error:MandatoryTemplateParameter_target_attr' => 'Parameter target_attr ist erforderlich, wenn link_attr verwendet wird. Überprüfen Sie die Definition des Display-Templates.',
+ 'UI:Error:MandatoryTemplateParameter_group_by' => 'Parameter group_by ist erforderlich. Überprüfen Sie die Definition des Display-Templates.',
'UI:Error:InvalidGroupByFields' => 'Ungültige Felder-Liste, um diese zu gruppieren von: "%1$s".',
'UI:Error:UnsupportedStyleOfBlock' => 'Fehler: nicht unterstützter Blockform: "%1$s".',
- 'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Ungültige Link-Defintion: die Klasse der zu managenden Objekte: %1$s wurde nicht als externer Schlüssel in der Klasse %2$s gefunden.',
+ 'UI:Error:IncorrectLinkDefinition_LinkedClass_Class' => 'Ungültige Link-Definition: die Klasse der zu managenden Objekte: %1$s wurde nicht als externer Schlüssel in der Klasse %2$s gefunden.',
'UI:Error:Object_Class_Id_NotFound' => 'Objekt: %1$s:%2$d wurde nicht gefunden.',
'UI:Error:WizardCircularReferenceInDependencies' => 'Fehler: gegenseitige Beziehung in den Abhängigkeiten zwischen den Feldern, überprüfen Sie das Datenmodell.',
'UI:Error:UploadedFileTooBig' => 'Die hochgeladene Datei ist zu groß. (Maximal erlaubte Dateigröße ist %1$s. Überprüfen Sie upload_max_filesize und post_max_size in der PHP-Konfiguration.',
'UI:Error:UploadedFileTruncated.' => 'Hochgeladene Datei wurde beschränkt!',
'UI:Error:NoTmpDir' => 'Der temporäre Ordner ist nicht definiert.',
- 'UI:Error:CannotWriteToTmp_Dir' => 'Nicht möglich, die tempöräre Datei auf die Festplatte zu speichern: upload_tmp_dir = "%1$s".',
- 'UI:Error:UploadStoppedByExtension_FileName' => 'Der Upload wurde von der Erweiterung gestoppt. (urspünglicher Dateiname = "%1$s").',
+ 'UI:Error:CannotWriteToTmp_Dir' => 'Nicht möglich, die temporäre Datei auf die Festplatte zu speichern: upload_tmp_dir = "%1$s".',
+ 'UI:Error:UploadStoppedByExtension_FileName' => 'Der Upload wurde von der Erweiterung gestoppt. (ursprünglicher Dateiname = "%1$s").',
'UI:Error:UploadFailedUnknownCause_Code' => 'Dateiupload fehlgeschlagen, unbekannte Ursache (Fehlercode = "%1$s").',
'UI:Error:1ParametersMissing' => 'Fehler: der folgende Parameter muss für diese Operation spezifiziert sein: %1$s.',
@@ -492,7 +492,7 @@ We hope you’ll enjoy this version as much as we enjoyed imagining and creating
'UI:Menu:New' => 'Neu...',
'UI:Menu:Add' => 'Hinzufügen...',
'UI:Menu:Manage' => 'Verwalten...',
- 'UI:Menu:EMail' => 'eMail',
+ 'UI:Menu:EMail' => 'E-Mail',
'UI:Menu:CSVExport' => 'CSV-Export...',
'UI:Menu:Modify' => 'Modifizieren...',
'UI:Menu:Delete' => 'Löschen...',
@@ -527,7 +527,7 @@ We hope you’ll enjoy this version as much as we enjoyed imagining and creating
'UI:Login:ForgotPwdForm' => 'Neues Passwort zusenden',
'UI:Login:ForgotPwdForm+' => ITOP_APPLICATION_SHORT.' kann Ihnen eine Mail mit Anweisungen senden, wie Sie Ihren Account/Passwort zurücksetzen können',
'UI:Login:ResetPassword' => 'Jetzt senden!',
- 'UI:Login:ResetPwdFailed' => 'Konnte keine Email versenden: %1$s',
+ 'UI:Login:ResetPwdFailed' => 'Konnte keine E-Mail versenden: %1$s',
'UI:Login:SeparatorOr' => 'oder',
'UI:ResetPwd-Error-WrongLogin' => '\'%1$s\' ist kein gültiger Login',
@@ -535,14 +535,14 @@ We hope you’ll enjoy this version as much as we enjoyed imagining and creating
'UI:ResetPwd-Error-FixedPwd' => 'das Benutzerkonto erlaubt keinen Passwort-Reset. ',
'UI:ResetPwd-Error-NoContact' => 'das Benutzerkonto ist nicht mit einer Person verknüpft. ',
'UI:ResetPwd-Error-NoEmailAtt' => 'das Benutzerkonto ist nicht mit einer Person verknüpft, die eine Mailadresse besitzt. Bitte wenden Sie sich an Ihren Administrator. ',
- 'UI:ResetPwd-Error-NoEmail' => 'die email Adresse dieses Accounts fehlt. Bitte kontaktieren Sie Ihren Administrator.',
- 'UI:ResetPwd-Error-Send' => 'Beim Versenden der Email trat ein technisches Problem auf. Bitte kontaktieren Sie Ihren Administrator.',
+ 'UI:ResetPwd-Error-NoEmail' => 'die E-Mail-Adresse dieses Accounts fehlt. Bitte kontaktieren Sie Ihren Administrator.',
+ 'UI:ResetPwd-Error-Send' => 'Beim Versenden der E-Mail trat ein technisches Problem auf. Bitte kontaktieren Sie Ihren Administrator.',
'UI:ResetPwd-EmailSent' => 'Bitte schauen Sie in Ihre Mailbox und folgen Sie den Anweisungen.',
'UI:ResetPwd-EmailSubject' => 'Zurücksetzen Ihres '.ITOP_APPLICATION_SHORT.'-Passworts',
'UI:ResetPwd-EmailBody' => '
-Aktionen define the actions to be performed when the triggers execute. For now there are only two kind of actions: +Aktionen definieren, welche beim auslösen eines Triggers ausgeführt werden. Aktuell gibt es nur zwei Arten von Aktionen:
Um Aktionen auszuführen, müssen diese mit Trigger verknüpft sein. -Wenn Aktionen mit Trigger verknüpft sind, bekommt jede Aktion eine Auftragsnummer, die die Reihenfolge der auszuführenden Aktionen festlegt.
~~', +Wenn Aktionen mit Trigger verknüpft sind, bekommt jede Aktion eine Auftragsnummer, die die Reihenfolge der auszuführenden Aktionen festlegt.', 'UI:NotificationsMenu:Triggers' => 'Trigger', 'UI:NotificationsMenu:AvailableTriggers' => 'Verfügbare Trigger', 'UI:NotificationsMenu:OnCreate' => 'Wenn ein Objekt erstellt wird', 'UI:NotificationsMenu:OnStateEnter' => 'Wenn ein Objekt einen gegebenen Status erlangt', 'UI:NotificationsMenu:OnStateLeave' => 'Wenn ein Objekt einen gegebenen Status verlässt', 'UI:NotificationsMenu:Actions' => 'Aktionen', - 'UI:NotificationsMenu:Actions:ActionEmail' => 'Email actions~~', - 'UI:NotificationsMenu:Actions:ActionWebhook' => 'Webhook actions (outgoing integrations)~~', - 'UI:NotificationsMenu:Actions:Action' => 'Other actions~~', + 'UI:NotificationsMenu:Actions:ActionEmail' => 'E-Mail Aktionen', + 'UI:NotificationsMenu:Actions:ActionWebhook' => 'Webhook Aktionen (ausgehende Integrationen)', + 'UI:NotificationsMenu:Actions:Action' => 'Andere Aktionen', 'UI:NotificationsMenu:AvailableActions' => 'Verfügbare Aktionen', 'Menu:TagAdminMenu' => 'Tag-Konfiguration', @@ -1088,7 +1088,7 @@ Wenn Aktionen mit Trigger verknüpft sind, bekommt jede Aktion eine Auftragsnumm 'Portal:NoRequestMgmt' => 'Lieber %1$s, Sie wurden hierher umgeleitet, weil Ihr Account mit dem Profil \'Portal user\' konfiguriert wurde. Leider wurde in '.ITOP_APPLICATION_SHORT.' aber das \'Request Management\'-Feature nicht installiert. Bitte kontaktieren Sie Ihren Administrator.', 'Portal:Refresh' => 'Neu laden', 'Portal:Back' => 'Zurück', - 'Portal:WelcomeUserOrg' => 'Wilkommen %1$s, von %2$s', + 'Portal:WelcomeUserOrg' => 'Willkommen %1$s, von %2$s', 'Portal:TitleDetailsFor_Request' => 'Details für Benutzeranfrage', 'Portal:ShowOngoing' => 'Zeige offene Requests', 'Portal:ShowClosed' => 'Zeige geschlossene Requests', @@ -1144,10 +1144,10 @@ Wenn Aktionen mit Trigger verknüpft sind, bekommt jede Aktion eine Auftragsnumm 'UI:CaseLogTypeYourTextHere' => 'Geben Sie Ihren Text hier ein:', 'UI:CaseLog:Header_Date_UserName' => '%1$s - %2$s:', 'UI:CaseLog:InitialValue' => 'Anfangswert:', - 'UI:AttemptingToSetASlaveAttribute_Name' => 'Das Feld %1$s ist nicht schreibbar, weil es durch die Datensynchronisation geführt wird. Wert nicht gesetzt.', + 'UI:AttemptingToSetASlaveAttribute_Name' => 'Das Feld %1$s ist nicht beschreibbar, weil es durch die Datensynchronisation geführt wird. Wert nicht gesetzt.', 'UI:ActionNotAllowed' => 'Sie haben nicht die Berechtigung, diese Aktion auf diesen Objekten auszuführen.', 'UI:BulkAction:NoObjectSelected' => 'Bitte wählen Sie mindestens ein Objekt, um diese Aktion auszuführen.', - 'UI:AttemptingToChangeASlaveAttribute_Name' => 'Das Feld %1$s ist nicht schreibbar, weil es durch die Datensynchronisation geführt wird. Wert bleibt unverändert.', + 'UI:AttemptingToChangeASlaveAttribute_Name' => 'Das Feld %1$s ist nicht beschreibbar, weil es durch die Datensynchronisation geführt wird. Wert bleibt unverändert.', 'UI:Pagination:HeaderSelection' => 'Gesamt: %1$s Objekte (%2$s Objekte ausgewählt).', 'UI:Pagination:HeaderNoSelection' => 'Gesamt: %1$s Objekte.', 'UI:Pagination:PageSize' => '%1$s Objekte pro Seite', @@ -1169,7 +1169,7 @@ Wenn Aktionen mit Trigger verknüpft sind, bekommt jede Aktion eine Auftragsnumm 'UI:Favorites:ShowObsoleteData+' => 'Zeige obsolete (veraltete) Daten in Suchresultaten und Auswahllisten von Objekten', 'UI:NavigateAwayConfirmationMessage' => 'Jedwede Veränderung wird verworfen.', 'UI:CancelConfirmationMessage' => 'Sie werden Ihre Änderungen verlieren. Dennoch fortfahren?', - 'UI:AutoApplyConfirmationMessage' => 'Einige Änderungen wurden noch nicht angewandt. Möchten Sie, daß '.ITOP_APPLICATION_SHORT.' diese berüchsichtigt?', + 'UI:AutoApplyConfirmationMessage' => 'Einige Änderungen wurden noch nicht angewandt. Möchten Sie, dass '.ITOP_APPLICATION_SHORT.' diese berücksichtigt?', 'UI:Create_Class_InState' => 'Erzeuge die/das %1$s in Status: ', 'UI:OrderByHint_Values' => 'Sortierreihenfolge: %1$s', 'UI:Menu:AddToDashboard' => 'Zu Dashboard hinzufügen...', @@ -1186,7 +1186,7 @@ Wenn Aktionen mit Trigger verknüpft sind, bekommt jede Aktion eine Auftragsnumm 'UI:ConfigureThisList' => 'Liste konfigurieren...', 'UI:ListConfigurationTitle' => 'Listenkonfiguration', - 'UI:ColumnsAndSortOrder' => 'Spalten und Sortierrheienfolge:', + 'UI:ColumnsAndSortOrder' => 'Spalten und Sortierreihenfolge:', 'UI:UseDefaultSettings' => 'Verwende Default-Einstellungen', 'UI:UseSpecificSettings' => 'Verwende folgende Einstellungen:', 'UI:Display_X_ItemsPerPage_prefix' => '', @@ -1225,8 +1225,8 @@ Wenn Aktionen mit Trigger verknüpft sind, bekommt jede Aktion eine Auftragsnumm 'UI:DashboardEdit:AutoReload' => 'Automatischer Reload', 'UI:DashboardEdit:AutoReloadSec' => 'Intervall für automatischen Reload (Sekunden)', 'UI:DashboardEdit:AutoReloadSec+' => 'Der Mindestwert beträgt %1$d Sekunden', - 'UI:DashboardEdit:Revert' => 'Revert~~', - 'UI:DashboardEdit:Apply' => 'Apply~~', + 'UI:DashboardEdit:Revert' => 'Zurücksetzen', + 'UI:DashboardEdit:Apply' => 'Anwenden', 'UI:DashboardEdit:Layout' => 'Layout', 'UI:DashboardEdit:Properties' => 'Dashboard-Einstellungen', @@ -1429,7 +1429,7 @@ Wenn Aktionen mit Trigger verknüpft sind, bekommt jede Aktion eine Auftragsnumm 'UI:About:Extension_Version' => 'Version: %1$s', 'UI:About:RemoteExtensionSource' => 'Data', - 'UI:DisconnectedDlgMessage' => 'Sie sind abgemeldet. Sie müssen sich identifizeren, um die Anwendung weiter zu benutzen.', + 'UI:DisconnectedDlgMessage' => 'Sie sind abgemeldet. Sie müssen sich identifizieren, um die Anwendung weiter zu benutzen.', 'UI:DisconnectedDlgTitle' => 'Warnung!', 'UI:LoginAgain' => 'Erneut einloggen', 'UI:StayOnThePage' => 'Auf dieser Seite bleiben', diff --git a/dictionaries/ui/components/breadcrumbs/de.dictionary.itop.breadcrumbs.php b/dictionaries/ui/components/breadcrumbs/de.dictionary.itop.breadcrumbs.php index 0d8bbb430..475fb622e 100644 --- a/dictionaries/ui/components/breadcrumbs/de.dictionary.itop.breadcrumbs.php +++ b/dictionaries/ui/components/breadcrumbs/de.dictionary.itop.breadcrumbs.php @@ -19,5 +19,5 @@ // Global search Dict::Add('DE DE', 'German', 'Deutsch', array( - 'UI:Component:Breadcrumbs:PreviousItemsListToggler:Label' => 'Previous pages~~', -)); \ No newline at end of file + 'UI:Component:Breadcrumbs:PreviousItemsListToggler:Label' => 'Vorherige Seiten', +)); diff --git a/dictionaries/ui/components/datatable/de.dictionary.itop.datatable.php b/dictionaries/ui/components/datatable/de.dictionary.itop.datatable.php index 40d0b4b97..ac1b8e102 100644 --- a/dictionaries/ui/components/datatable/de.dictionary.itop.datatable.php +++ b/dictionaries/ui/components/datatable/de.dictionary.itop.datatable.php @@ -24,8 +24,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', array( 'UI:Datatables:Language:Info' => '_TOTAL_ Objekte', 'UI:Datatables:Language:InfoEmpty' => 'Keine Information', 'UI:Datatables:Language:EmptyTable' => 'Keine Daten in dieser Tabelle verfügbar', - 'UI:Datatables:Language:Error' => 'An error occured while running the query~~', + 'UI:Datatables:Language:Error' => 'Bei der Ausführung des Query ist ein Fehler aufgetreten', 'UI:Datatables:Language:DisplayLength:All' => 'Alle', 'UI:Datatables:Language:Sort:Ascending' => 'Aktivieren für aufsteigende Sortierung', 'UI:Datatables:Language:Sort:Descending' => 'Aktivieren für absteigende Sortierung', -)); \ No newline at end of file +)); diff --git a/dictionaries/ui/components/input/de.dictionary.itop.input.php b/dictionaries/ui/components/input/de.dictionary.itop.input.php index a0fff6b5c..c13e4b9a5 100644 --- a/dictionaries/ui/components/input/de.dictionary.itop.input.php +++ b/dictionaries/ui/components/input/de.dictionary.itop.input.php @@ -19,5 +19,5 @@ // Input Dict::Add('DE DE', 'German', 'Deutsch', array( - 'UI:Component:Input:Password:DoesNotMatch' => 'Passwords do not match~~', -)); \ No newline at end of file + 'UI:Component:Input:Password:DoesNotMatch' => 'Passwörter stimmen nicht überein', +)); diff --git a/dictionaries/ui/layouts/navigation-menu/de.dictionary.itop.navigation-menu.php b/dictionaries/ui/layouts/navigation-menu/de.dictionary.itop.navigation-menu.php index a1dcd4d26..b0c230e1e 100644 --- a/dictionaries/ui/layouts/navigation-menu/de.dictionary.itop.navigation-menu.php +++ b/dictionaries/ui/layouts/navigation-menu/de.dictionary.itop.navigation-menu.php @@ -19,7 +19,7 @@ // Navigation menu Dict::Add('DE DE', 'German', 'Deutsch', array( 'UI:Layout:NavigationMenu:CompanyLogo:AltText' => 'Unternehmenslogo', - 'UI:Layout:NavigationMenu:Silo:Label' => 'Select organization to filter on~~', + 'UI:Layout:NavigationMenu:Silo:Label' => 'Organisation zum filtern auswählen', 'UI:Layout:NavigationMenu:Toggler:Tooltip' => 'Ausklappen/Einklappen', 'UI:Layout:NavigationMenu:Toggler:TooltipWithSiloLabel' => 'Ausklappen/Einklappen (Gefiltert nach %1$s)', 'UI:Layout:NavigationMenu:MenuFilter:Input:Placeholder' => 'Filter...', @@ -28,7 +28,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array( 'UI:Layout:NavigationMenu:MenuFilter:Placeholder:Hint' => 'Kein Ergebnis für diesen Menü-Filter', 'UI:Layout:NavigationMenu:UserInfo:WelcomeMessage:Text' => 'Hi %1$s!', 'UI:Layout:NavigationMenu:UserInfo:Picture:AltText' => '%1$s\'s Profilbild', - 'UI:Layout:NavigationMenu:UserMenu:Toggler:Label' => 'Open user menu~~', + 'UI:Layout:NavigationMenu:UserMenu:Toggler:Label' => 'Benutzermenü öffnen', 'UI:Layout:NavigationMenu:KeyboardShortcut:FocusFilter' => 'Filtere Menüeinträge', -)); \ No newline at end of file +)); diff --git a/dictionaries/ui/pages/preferences/de.dictionary.itop.preferences.php b/dictionaries/ui/pages/preferences/de.dictionary.itop.preferences.php index 1513986c2..5eb734d3e 100644 --- a/dictionaries/ui/pages/preferences/de.dictionary.itop.preferences.php +++ b/dictionaries/ui/pages/preferences/de.dictionary.itop.preferences.php @@ -30,12 +30,12 @@ Dict::Add('DE DE', 'German', 'Deutsch', array( 'UI:Preferences:RichText:ToolbarState:Collapsed' => 'Eingeklappt', 'UI:Preferences:ActivityPanel:Title' => 'Aktives Panel', 'UI:Preferences:ActivityPanel:EntryFormOpened' => 'Formular standardmäßig geöffnet', - 'UI:Preferences:ActivityPanel:EntryFormOpened+' => 'Ob ein Formular, wenn ein Objekt angezeigt wird, standardmäßig geöffnet ist. Wenn dieser Haken nicht gesetzt ist, können Sie das Formmular mit einem Klick auf den Compose-Button trotzdem jederzeit öffnen.', + 'UI:Preferences:ActivityPanel:EntryFormOpened+' => 'Ob ein Formular, wenn ein Objekt angezeigt wird, standardmäßig geöffnet ist. Wenn dieser Haken nicht gesetzt ist, können Sie das Formular mit einem Klick auf den Compose-Button trotzdem jederzeit öffnen.', 'UI:Preferences:PersonalizeKeyboardShortcuts:Title' => 'Keyboard-Shortcuts dieser Applikation', 'UI:Preferences:PersonalizeKeyboardShortcuts:Input:Hint' => 'Geben Sie einen Keyboard-Shortcut ein', 'UI:Preferences:PersonalizeKeyboardShortcuts:Button:Tooltip' => 'Nehmen Sie einen Keyboard-Shortcut auf', - 'UI:Preferences:PersonalizeKeyboardShortcuts:Button:Reset' => 'Reset~~', - 'UI:Preferences:PersonalizeKeyboardShortcuts:Button:Reset:Tooltip' => 'Back to default keyboard shortcut~~', + 'UI:Preferences:PersonalizeKeyboardShortcuts:Button:Reset' => 'Zurücksetzen', + 'UI:Preferences:PersonalizeKeyboardShortcuts:Button:Reset:Tooltip' => 'Auf den Standard-Keyboard-Shortcut zurücksetzen', 'UI:Preferences:Tabs:Title' => 'Tabs', 'UI:Preferences:Tabs:Layout:Label' => 'Layout', 'UI:Preferences:Tabs:Layout:Horizontal' => 'Horizontal', diff --git a/js/components/button-group.js b/js/components/button-group.js new file mode 100644 index 000000000..a459a2372 --- /dev/null +++ b/js/components/button-group.js @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2013-2022 Combodo SARL + * + * This file is part of iTop. + * + * iTop is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * iTop is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + */ + +; +// Apply a listener to element so we don't have to create one for every button on the page + +// ibo-button-group elements +$('body').on('enter_loading_state.button_group.itop', '[data-role="ibo-button-group"]', function(){ + $(this).find('[data-role="ibo-button"]').each(function(){ + $(this).prop('disabled', true); + }); + $(this).find('[data-role="ibo-button"]:first').trigger('enter_loading_state.button.itop'); +}) +.on('leave_loading_state.button_group.itop', '[data-role="ibo-button-group"]', function(){ + $(this).find('[data-role="ibo-button"]').each(function(){ + $(this).prop('disabled', false); + }); + $(this).find('[data-role="ibo-button"]:first').trigger('leave_loading_state.button.itop'); +}); \ No newline at end of file diff --git a/js/components/button.js b/js/components/button.js index 5d5b23806..8c404e8ed 100644 --- a/js/components/button.js +++ b/js/components/button.js @@ -17,7 +17,9 @@ */ ; -// Apply a listener to element so we don't havec to create one for every button on the page +// Apply a listener to element so we don't have to create one for every button on the page + +// ibo-button elements $('body').on('enter_loading_state.button.itop', '[data-role="ibo-button"]', function(){ $(this).addClass('ibo-is-loading').prop('disabled', true); }) diff --git a/js/extkeywidget.js b/js/extkeywidget.js index 6014debc5..830b06984 100644 --- a/js/extkeywidget.js +++ b/js/extkeywidget.js @@ -564,6 +564,7 @@ function ExtKeyWidget(id, sTargetClass, sFilter, sTitle, bSelectMode, oWizHelper var oTemp = $('
')
- .after(this.indicator);
- for(k in this.options.buttons)
- {
+ .after(this.inputToBeDeleted)
+ .after(this.inputToBeAdded)
+ .after(this.inputToBeRemoved)
+ .after('
')
+ .after(this.indicator);
+ for (k in this.options.buttons) {
this.element.after(this.oButtons[this.options.buttons[k]]).after(' ');
}
-
- this.element.find('.selectList'+this.id).bind('change', function() { me._updateButtons(); });
- this.oButtons['delete'].on('click', function() {
- $('.selectList'+me.id+':checked', me.element).each( function() { me._deleteRow($(this)); });
+
+ this.element.find('.selectList'+this.id).bind('change', function () {
+ me._updateButtons();
});
- this.oButtons['create'].on('click', function() {
+ this.oButtons['delete'].on('click', function () {
+ $('.selectList'+me.id+':checked', me.element).each(function () {
+ me._deleteRow($(this));
+ });
+ });
+ this.oButtons['create'].on('click', function () {
me._createRow();
});
- this.oButtons['remove'].on('click', function() {
- $('.selectList'+me.id+':checked', me.element).each( function() { me._removeRow($(this)); });
+ this.oButtons['remove'].on('click', function () {
+ $('.selectList'+me.id+':checked', me.element).each(function () {
+ me._removeRow($(this));
+ });
});
- this.oButtons['add'].on('click', function() {
+ this.oButtons['add'].on('click', function () {
me._selectToAdd();
});
-
+
this._updateButtons();
},
-
+
// called when created, and later when changing options
- _refresh: function()
- {
+ _refresh: function () {
this._updateButtons();
},
// events bound via _bind are removed automatically
// revert other modifications here
- _destroy: function()
- {
+ _destroy: function () {
this.element
- .removeClass('itop-directlinks');
+ .removeClass('itop-directlinks');
},
// _setOptions is called with a hash of all options that are changing
- _setOptions: function()
- {
+ _setOptions: function () {
// in 1.9 would use _superApply
this._superApply(arguments);
},
// _setOption is called for each individual option that is changing
- _setOption: function( key, value )
- {
+ _setOption: function (key, value) {
// in 1.9 would use _super
this._superApply(arguments);
-
- if (key == 'fields') this._refresh();
+
+ if (key == 'fields') {
+ this._refresh();
+ }
},
- _updateButtons: function()
- {
+ _updateButtons: function () {
var oChecked = $('.selectList'+this.id+':checked', this.element);
- switch(oChecked.length)
- {
+ switch (oChecked.length) {
case 0:
this.oButtons['delete'].prop('disabled', true);
this.oButtons['remove'].prop('disabled', true);
this.oButtons['modify'].prop('disabled', true);
- break;
-
+ break;
+
case 1:
this.oButtons['delete'].prop('disabled', false);
this.oButtons['remove'].prop('disabled', false);
this.oButtons['modify'].prop('disabled', false);
- break;
-
+ break;
+
default:
this.oButtons['delete'].prop('disabled', false);
this.oButtons['remove'].prop('disabled', false);
this.oButtons['modify'].prop('disabled', true);
- break;
+ break;
}
},
- _updateTable: function()
- {
+ _updateTable: function () {
var me = this;
/*
this.datatable.trigger("update").trigger("applyWidgets");
this.datatable.tableHover();*/
- this.datatable.find('.selectList'+this.id).bind('change', function() { me._updateButtons(); });
+ this.datatable.find('.selectList'+this.id).bind('change', function () {
+ me._updateButtons();
+ });
},
- _updateDlgPosition: function()
- {
- this.oDlg.dialog('option', { position: { my: "center", at: "center", of: window }});
+ _updateDlgPosition: function () {
+ this.oDlg.dialog('option', {position: {my: "center", at: "center", of: window}});
},
- _createRow: function()
- {
+ _createRow: function () {
this.oButtons['create'].prop('disabled', true);
this.indicator.html('
');
oParams = this.options.submit_parameters;
@@ -176,30 +176,39 @@ $(function()
oParams.att_code = this.options.att_code;
oParams.iInputId = this.id;
var me = this;
- if (this.options.oWizardHelper)
- {
+ if (this.options.oWizardHelper) {
this.options.oWizardHelper.UpdateWizard();
oParams.json = this.options.oWizardHelper.ToJSON();
}
- $.post(this.options.submit_to, oParams, function(data){
+ $.post(this.options.submit_to, oParams, function (data) {
me.oDlg = $('');
$('body').append(me.oDlg);
me.oDlg.html(data);
- me.oDlg.find('form').removeAttr('onsubmit').bind('submit', function() { me._onCreateRow(); return false; } );
- me.oDlg.find('button.cancel').off('click').on('click', function() { me.oDlg.dialog('close'); } );
-
+ me.oDlg.find('form').removeAttr('onsubmit');
+ me.oDlg.find('button[type="submit"]').on('click', function (event) {
+ me._onCreateRow();
+ return false;
+ });
+ setTimeout(function () {
+ me.oDlg.find('button.cancel').off('click').on('click', function () {
+ me.oDlg.dialog('close');
+ });
+ }, 500);
me.oDlg.dialog({
title: me.options.labels['creation_title'],
modal: true,
width: 'auto',
height: 'auto',
- maxHeight: $(window).height() - 50,
- position: { my: "center", at: "center", of: window },
- close: function() { me._onDlgClose(); }
+ maxHeight: $(window).height()-50,
+ position: {my: "center", at: "center", of: window},
+ close: function () {
+ me._onDlgClose();
+ }
});
me.indicator.html('');
me.oButtons['create'].prop('disabled', false);
me._updateDlgPosition();
+
});
},
_selectToAdd: function()
@@ -221,38 +230,46 @@ $(function()
}
);
- if (this.options.oWizardHelper)
- {
+ if (this.options.oWizardHelper) {
this.options.oWizardHelper.UpdateWizard();
oParams.json = this.options.oWizardHelper.ToJSON();
}
var me = this;
- $.post(this.options.submit_to, oParams, function(data){
+ $.post(this.options.submit_to, oParams, function (data) {
me.oDlg = $('');
$('body').append(me.oDlg);
me.oDlg.html(data);
- me.oDlg.find('form').removeAttr('onsubmit').bind('submit', function() { me._onSearchToAdd(); return false; } );
- $('#SearchFormToAdd_'+me.id).resize(function() { me._onSearchDlgUpdateSize(); });
-
+ me.oDlg.find('form').removeAttr('onsubmit').bind('submit', function () {
+ me._onSearchToAdd();
+ return false;
+ });
+ $('#SearchFormToAdd_'+me.id).resize(function () {
+ me._onSearchDlgUpdateSize();
+ });
+
me.oDlg.dialog({
title: me.options.labels['selection_title'],
modal: true,
- width: $(window).width()*0.8,
- height: $(window).height()*0.8,
- maxHeight: $(window).height() - 50,
- position: { my: "center", at: "center", of: window },
- close: function() { me._onDlgClose(); },
- resizeStop: function() { me._onSearchDlgUpdateSize(); },
+ width: $(window).width() * 0.8,
+ height: $(window).height() * 0.8,
+ maxHeight: $(window).height()-50,
+ position: {my: "center", at: "center", of: window},
+ close: function () {
+ me._onDlgClose();
+ },
+ resizeStop: function () {
+ me._onSearchDlgUpdateSize();
+ },
buttons: [
{
text: Dict.S('UI:Button:Cancel'),
class: "cancel ibo-is-alternative ibo-is-neutral",
- click: function() {
+ click: function () {
$(this).dialog('close');
}
},
{
- text: Dict.S('UI:Button:Add'),
+ text: Dict.S('UI:Button:Add'),
class: "ok ibo-is-regular ibo-is-primary",
click: function() {
me._onDoAdd();
@@ -439,39 +456,48 @@ $(function()
var me = this;
me.oDlg.find('button').prop('disabled', true);
me.oDlg.find('span.indicator').html('
');
- $.post(this.options.submit_to, oParams, function(data){
+ $.post(this.options.submit_to, oParams, function (data) {
me.oDlg.html(data);
- me.oDlg.find('form').removeAttr('onsubmit').bind('submit', function() { me._onCreateRow(); return false; } );
- me.oDlg.find('button.cancel').off('click').on('click', function() { me.oDlg.dialog('close'); } );
- me._updateDlgPosition();
+ me.oDlg.find('form').removeAttr('onsubmit').bind('submit', function () {
+ me._onCreateRow();
+ return false;
+ });
+ me.oDlg.find('button.cancel').off('click').on('click', function () {
+ me.oDlg.dialog('close');
+ });
+ me._updateDlgPosition();
});
},
- _onCreateRow: function()
- {
+ _onCreateRow: function () {
// Validate the form
+ var me = this;
var sFormId = this.oDlg.find('form').attr('id');
- if (CheckFields(sFormId, true))
- {
+ if (CheckFields(sFormId, true)) {
// Gather the values from the form
+ me.oDlg.find('.htmlEditor').each(function () {
+ CKEDITOR.instances[this.id].destroy();
+ if ($('#'+this.id).data('timeout_validate') != undefined) {
+ clearInterval($('#'+this.id).data('timeout_validate'));
+ }
+ });
+
oParams = this.options.submit_parameters;
var oValues = {};
- this.oDlg.find(':input').each( function() {
- if (this.name != '')
- {
+ this.oDlg.find(':input').each(function () {
+ if (this.name != '') {
oParams[this.name] = this.value;
oValues[this.name] = this.value;
}
});
var nextIdx = 0;
- for(k in this.toBeCreated)
- {
+ for (k in this.toBeCreated) {
nextIdx++;
}
nextIdx++;
this.toBeCreated[nextIdx] = oValues;
this.inputToBeCreated.val(JSON.stringify(this.toBeCreated));
this.oDlg.dialog('close');
-
+
oParams = this.options.submit_parameters;
oParams.operation = 'getLinksetRow';
oParams['class'] = this.options.class_name;
@@ -483,7 +509,7 @@ $(function()
this.oButtons['create'].prop('disabled', true);
this.indicator.html('
');
- $.post(this.options.submit_to, oParams, function(data){
+ $.post(this.options.submit_to, oParams, function (data) {
// From data variable we get data entry and insert the first (and only) one
me.datatable.DataTable().row.add(data.data[0]).draw();
$('#datatable_'+me.id+' .dataTables_empty').hide();
@@ -494,34 +520,27 @@ $(function()
});
}
},
- _onDlgClose: function()
- {
+ _onDlgClose: function () {
this.oDlg.remove();
this.oDlg = null;
},
- _onSearchDlgUpdateSize: function()
- {
+ _onSearchDlgUpdateSize: function () {
var searchHeight = $('#SearchFormToAdd_'+this.id).outerHeight();
var dlgHeight = this.oDlg.height();
- $('.wizContainer', this.oDlg).height(dlgHeight - 20);
- $('#SearchResultsToAdd_'+this.id).height(dlgHeight - 50 - searchHeight);
+ $('.wizContainer', this.oDlg).height(dlgHeight-20);
+ $('#SearchResultsToAdd_'+this.id).height(dlgHeight-50-searchHeight);
},
- _deleteRow: function(oCheckbox)
- {
+ _deleteRow: function (oCheckbox) {
var iObjKey = parseInt(oCheckbox.val(), 10); // Number in base 10
-
- if (iObjKey > 0)
- {
+
+ if (iObjKey > 0) {
// Existing objet: add it to the "to be deleted" list
// if it has not just been added now
- if (this._InArray(this.toBeAdded, iObjKey))
- {
+ if (this._InArray(this.toBeAdded, iObjKey)) {
this.toBeAdded = this._ArrayRemove(this.toBeAdded, iObjKey);
- this.inputToBeAdded.val(JSON.stringify(this.toBeAdded));
- }
- else
- {
- this.toBeDeleted.push(iObjKey);
+ this.inputToBeAdded.val(JSON.stringify(this.toBeAdded));
+ } else {
+ this.toBeDeleted.push(iObjKey);
this.inputToBeDeleted.val(JSON.stringify(this.toBeDeleted));
}
}
diff --git a/js/tabularfieldsselector.js b/js/tabularfieldsselector.js
index d4463df5b..4863e657c 100644
--- a/js/tabularfieldsselector.js
+++ b/js/tabularfieldsselector.js
@@ -51,8 +51,8 @@ $(function () {