From a9af4fc060251df59bf449686c1ad646ff094f28 Mon Sep 17 00:00:00 2001 From: Timmy38 <101416770+Timmy38@users.noreply.github.com> Date: Thu, 18 Jun 2026 11:05:09 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B09701=20Add=20id=20to=20badges?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cs.dictionary.itop.extensions-details.php | 6 ++ .../da.dictionary.itop.extensions-details.php | 6 ++ .../de.dictionary.itop.extensions-details.php | 6 ++ .../en.dictionary.itop.extensions-details.php | 6 ++ ..._cr.dictionary.itop.extensions-details.php | 6 ++ .../fr.dictionary.itop.extensions-details.php | 6 ++ .../hu.dictionary.itop.extensions-details.php | 6 ++ .../it.dictionary.itop.extensions-details.php | 6 ++ .../ja.dictionary.itop.extensions-details.php | 6 ++ .../nl.dictionary.itop.extensions-details.php | 6 ++ .../pl.dictionary.itop.extensions-details.php | 6 ++ ..._br.dictionary.itop.extensions-details.php | 6 ++ .../ru.dictionary.itop.extensions-details.php | 6 ++ .../sk.dictionary.itop.extensions-details.php | 6 ++ .../tr.dictionary.itop.extensions-details.php | 6 ++ ..._cn.dictionary.itop.extensions-details.php | 6 ++ setup/wizardsteps/WizStepModulesChoice.php | 12 ++-- .../ExtensionDetailsUIBlockFactory.php | 63 ++++++++++++++++--- .../setup/WizStepModulesChoiceTest.php | 20 +++--- 19 files changed, 166 insertions(+), 25 deletions(-) diff --git a/dictionaries/ui/layouts/extensions-details/cs.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/cs.dictionary.itop.extensions-details.php index 04e71d6511..f7fe7ceff0 100644 --- a/dictionaries/ui/layouts/extensions-details/cs.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/cs.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('CS CZ', 'Czech', 'Čeština', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/dictionaries/ui/layouts/extensions-details/da.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/da.dictionary.itop.extensions-details.php index 73e4f4efe4..2eb24fb0d2 100644 --- a/dictionaries/ui/layouts/extensions-details/da.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/da.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('DA DA', 'Danish', 'Dansk', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/dictionaries/ui/layouts/extensions-details/de.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/de.dictionary.itop.extensions-details.php index 816dd69e78..6b4aa2ba99 100644 --- a/dictionaries/ui/layouts/extensions-details/de.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/de.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('DE DE', 'German', 'Deutsch', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/dictionaries/ui/layouts/extensions-details/en.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/en.dictionary.itop.extensions-details.php index 4e01932f53..0cf540d414 100644 --- a/dictionaries/ui/layouts/extensions-details/en.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/en.dictionary.itop.extensions-details.php @@ -10,11 +10,17 @@ Dict::Add('EN US', 'English', 'English', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall', diff --git a/dictionaries/ui/layouts/extensions-details/es_cr.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/es_cr.dictionary.itop.extensions-details.php index 0a128e19e8..270144f306 100644 --- a/dictionaries/ui/layouts/extensions-details/es_cr.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/es_cr.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/dictionaries/ui/layouts/extensions-details/fr.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/fr.dictionary.itop.extensions-details.php index 4fb6090335..6b85232cf4 100644 --- a/dictionaries/ui/layouts/extensions-details/fr.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/fr.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('FR FR', 'French', 'Français', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installé', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'Cette extension fait partie de l\'installation actuelle.', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'va être installé', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'Cette extension sera installée lors de l\'installation.', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'pas installé', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'Cette extension ne fait pas partie de l\'installation actuelle.', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'va être désinstallé', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'Cette extension sera désinstallée lors de l\'installation.', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'non désinstallable', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Une fois cette extension installée, elle ne devrait pas être désinstallée.', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'supprimé du disque', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'Le dossier local de l\'extension a été supprimé du disque. Cela forcera la désinstallation de cette extension.', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'À propos de %1$s', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'Plus d\'informations', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Forcer la désinstallation', diff --git a/dictionaries/ui/layouts/extensions-details/hu.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/hu.dictionary.itop.extensions-details.php index 5f81e69874..e17a4d3ef2 100644 --- a/dictionaries/ui/layouts/extensions-details/hu.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/hu.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('HU HU', 'Hungarian', 'Magyar', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/dictionaries/ui/layouts/extensions-details/it.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/it.dictionary.itop.extensions-details.php index 7c44bc63ef..fd9a53dce7 100644 --- a/dictionaries/ui/layouts/extensions-details/it.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/it.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('IT IT', 'Italian', 'Italiano', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/dictionaries/ui/layouts/extensions-details/ja.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/ja.dictionary.itop.extensions-details.php index a3b527c0bb..b2d0ba8c02 100644 --- a/dictionaries/ui/layouts/extensions-details/ja.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/ja.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('JA JP', 'Japanese', '日本語', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/dictionaries/ui/layouts/extensions-details/nl.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/nl.dictionary.itop.extensions-details.php index 53fcb5b4a8..20d6e58733 100644 --- a/dictionaries/ui/layouts/extensions-details/nl.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/nl.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('NL NL', 'Dutch', 'Nederlands', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/dictionaries/ui/layouts/extensions-details/pl.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/pl.dictionary.itop.extensions-details.php index 8234013376..caaad67c6e 100644 --- a/dictionaries/ui/layouts/extensions-details/pl.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/pl.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('PL PL', 'Polish', 'Polski', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/dictionaries/ui/layouts/extensions-details/pt_br.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/pt_br.dictionary.itop.extensions-details.php index 4683a2b433..dd98f2ec28 100644 --- a/dictionaries/ui/layouts/extensions-details/pt_br.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/pt_br.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/dictionaries/ui/layouts/extensions-details/ru.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/ru.dictionary.itop.extensions-details.php index ef233f68b0..146cafdad3 100644 --- a/dictionaries/ui/layouts/extensions-details/ru.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/ru.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('RU RU', 'Russian', 'Русский', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/dictionaries/ui/layouts/extensions-details/sk.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/sk.dictionary.itop.extensions-details.php index f4db3fabc9..53cd4851af 100644 --- a/dictionaries/ui/layouts/extensions-details/sk.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/sk.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/dictionaries/ui/layouts/extensions-details/tr.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/tr.dictionary.itop.extensions-details.php index 0e66dc741e..7e98c6e52c 100644 --- a/dictionaries/ui/layouts/extensions-details/tr.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/tr.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('TR TR', 'Turkish', 'Türkçe', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/dictionaries/ui/layouts/extensions-details/zh_cn.dictionary.itop.extensions-details.php b/dictionaries/ui/layouts/extensions-details/zh_cn.dictionary.itop.extensions-details.php index 802d156699..8344417981 100644 --- a/dictionaries/ui/layouts/extensions-details/zh_cn.dictionary.itop.extensions-details.php +++ b/dictionaries/ui/layouts/extensions-details/zh_cn.dictionary.itop.extensions-details.php @@ -12,11 +12,17 @@ */ Dict::Add('ZH CN', 'Chinese', '简体中文', [ 'UI:Layout:ExtensionsDetails:BadgeInstalled' => 'installed~~', + 'UI:Layout:ExtensionsDetails:BadgeInstalled+' => 'This extension is part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled' => 'to be installed~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeInstalled+' => 'This extension will be installed during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotInstalled' => 'not installed~~', + 'UI:Layout:ExtensionsDetails:BadgeNotInstalled+' => 'This extension is not part of the current installation.~~', 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled' => 'to be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+' => 'This extension will be uninstalled during the setup.~~', 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable' => 'cannot be uninstalled~~', + 'UI:Layout:ExtensionsDetails:BadgeNotUninstallable+' => 'Once this extension has been installed, it should not be uninstalled.~~', 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk' => 'missing from disk~~', + 'UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+' => 'The local extension folder has been removed from the disk. This will force the uninstallation of this extension.~~', 'UI:Layout:ExtensionsDetails:MenuAboutTitle' => 'About %1$s~~', 'UI:Layout:ExtensionsDetails:MenuAbout' => 'More informations~~', 'UI:Layout:ExtensionsDetails:MenuForce' => 'Force uninstall~~', diff --git a/setup/wizardsteps/WizStepModulesChoice.php b/setup/wizardsteps/WizStepModulesChoice.php index c4ff129507..0c1e4bbfee 100644 --- a/setup/wizardsteps/WizStepModulesChoice.php +++ b/setup/wizardsteps/WizStepModulesChoice.php @@ -869,18 +869,18 @@ EOF $sTooltip = ''; if ($aFlags['missing']) { - $sTooltip .= '
source removed
'; + $sTooltip .= '
source removed
'; } if ($aFlags['installed']) { - $sTooltip .= '
installed
'; + $sTooltip .= '
installed
'; - $sTooltip .= '
to be uninstalled
'; + $sTooltip .= '
to be uninstalled
'; } else { - $sTooltip .= '
to be installed
'; - $sTooltip .= '
not installed
'; + $sTooltip .= '
to be installed
'; + $sTooltip .= '
not installed
'; } if (!$aFlags['uninstallable']) { - $sTooltip .= '
cannot be uninstalled
'; + $sTooltip .= '
cannot be uninstalled
'; } $sMetadata = ''; diff --git a/sources/Application/UI/Base/Layout/Extension/ExtensionDetailsUIBlockFactory.php b/sources/Application/UI/Base/Layout/Extension/ExtensionDetailsUIBlockFactory.php index 7a1934f019..9fff89696c 100644 --- a/sources/Application/UI/Base/Layout/Extension/ExtensionDetailsUIBlockFactory.php +++ b/sources/Application/UI/Base/Layout/Extension/ExtensionDetailsUIBlockFactory.php @@ -13,6 +13,13 @@ class ExtensionDetailsUIBlockFactory extends AbstractUIBlockFactory /** @inheritDoc */ public const UI_BLOCK_CLASS_NAME = ExtensionDetails::class; + private const BADGE_ID_INSTALLED = 'installed'; + private const BADGE_ID_NOT_INSTALLED = 'not-installed'; + private const BADGE_ID_TO_BE_INSTALLED = 'to-be-installed'; + private const BADGE_ID_TO_BE_UNINSTALLED = 'to-be-uninstalled'; + private const BADGE_ID_NOT_UNINSTALLABLE = 'not-uninstallable'; + private const BADGE_ID_MISSING_FROM_DISK = 'missing-from-disk'; + public static function MakeInstalled(string $sCode, string $sLabel, string $sDescription = '', array $aMetaData = [], array $aExtraFlags = [], string $sAbout = '') { $aBadges = []; @@ -21,11 +28,19 @@ class ExtensionDetailsUIBlockFactory extends AbstractUIBlockFactory $bSelected = $aExtraFlags['selected'] ?? true; $bDisabled = $aExtraFlags['disabled'] ?? false; $bRemote = $aExtraFlags['remote'] ?? false; - self::AddExtraBadges($aBadges, $bUninstallable, $bMissingFromDisk); - $oBadgeInstalled = BadgeUIBlockFactory::MakeGreen(Dict::S('UI:Layout:ExtensionsDetails:BadgeInstalled')); + self::AddExtraBadges($aBadges, $bUninstallable, $bMissingFromDisk, $sCode); + $oBadgeInstalled = BadgeUIBlockFactory::MakeGreen( + Dict::S('UI:Layout:ExtensionsDetails:BadgeInstalled'), + Dict::S('UI:Layout:ExtensionsDetails:BadgeInstalled+'), + self::GetBadgeId($sCode, self::BADGE_ID_INSTALLED) + ); $oBadgeInstalled->AddCSSClass('checked'); $aBadges[] = $oBadgeInstalled; - $oBadgeToBeUninstalled = BadgeUIBlockFactory::MakeRed(Dict::S('UI:Layout:ExtensionsDetails:BadgeToBeUninstalled')); + $oBadgeToBeUninstalled = BadgeUIBlockFactory::MakeRed( + Dict::S('UI:Layout:ExtensionsDetails:BadgeToBeUninstalled'), + Dict::S('UI:Layout:ExtensionsDetails:BadgeToBeUninstalled+'), + self::GetBadgeId($sCode, self::BADGE_ID_TO_BE_UNINSTALLED) + ); $oBadgeToBeUninstalled->AddCSSClass('unchecked'); $aBadges[] = $oBadgeToBeUninstalled; @@ -56,11 +71,19 @@ class ExtensionDetailsUIBlockFactory extends AbstractUIBlockFactory $bUninstallable = $aExtraFlags['uninstallable'] ?? true; $bSelected = $aExtraFlags['selected'] ?? false; $bDisabled = $aExtraFlags['disabled'] ?? false; - self::AddExtraBadges($aBadges, $bUninstallable, false); - $oBadgeInstalled = BadgeUIBlockFactory::MakeGrey(Dict::S('UI:Layout:ExtensionsDetails:BadgeNotInstalled')); + self::AddExtraBadges($aBadges, $bUninstallable, false, $sCode); + $oBadgeInstalled = BadgeUIBlockFactory::MakeGrey( + Dict::S('UI:Layout:ExtensionsDetails:BadgeNotInstalled'), + Dict::S('UI:Layout:ExtensionsDetails:BadgeNotInstalled+'), + self::GetBadgeId($sCode, self::BADGE_ID_NOT_INSTALLED) + ); $oBadgeInstalled->AddCSSClass('unchecked'); $aBadges[] = $oBadgeInstalled; - $oBadgeToBeUninstalled = BadgeUIBlockFactory::MakeCyan(Dict::S('UI:Layout:ExtensionsDetails:BadgeToBeInstalled')); + $oBadgeToBeUninstalled = BadgeUIBlockFactory::MakeCyan( + Dict::S('UI:Layout:ExtensionsDetails:BadgeToBeInstalled'), + Dict::S('UI:Layout:ExtensionsDetails:BadgeToBeInstalled+'), + self::GetBadgeId($sCode, self::BADGE_ID_TO_BE_INSTALLED) + ); $oBadgeToBeUninstalled->AddCSSClass('checked'); $aBadges[] = $oBadgeToBeUninstalled; $oExtensionDetails = new ExtensionDetails($sCode, $sLabel, $sDescription, $aMetaData, $aBadges, $sAbout); @@ -76,13 +99,35 @@ class ExtensionDetailsUIBlockFactory extends AbstractUIBlockFactory return $oExtensionDetails; } - private static function AddExtraBadges(array &$aBadges, bool $bUninstallable, bool $bMissingFromDisk) + private static function AddExtraBadges(array &$aBadges, bool $bUninstallable, bool $bMissingFromDisk, string $sCode) { if (!$bUninstallable) { - $aBadges[] = BadgeUIBlockFactory::MakeOrange(Dict::S('UI:Layout:ExtensionsDetails:BadgeNotUninstallable')); + $aBadges[] = BadgeUIBlockFactory::MakeOrange( + Dict::S('UI:Layout:ExtensionsDetails:BadgeNotUninstallable'), + Dict::S('UI:Layout:ExtensionsDetails:BadgeNotUninstallable+'), + self::GetBadgeId($sCode, self::BADGE_ID_NOT_UNINSTALLABLE) + ); } if ($bMissingFromDisk) { - $aBadges[] = BadgeUIBlockFactory::MakeRed(Dict::S('UI:Layout:ExtensionsDetails:BadgeMissingFromDisk')); + $aBadges[] = BadgeUIBlockFactory::MakeRed( + Dict::S('UI:Layout:ExtensionsDetails:BadgeMissingFromDisk'), + Dict::S('UI:Layout:ExtensionsDetails:BadgeMissingFromDisk+'), + self::GetBadgeId($sCode, self::BADGE_ID_MISSING_FROM_DISK) + ); } } + + /** + * Generate a badge ID for an extension + * + * @param string $sExtensionCode The extension code + * @param string $sBadgeType The badge type (one of the BADGE_ID_* constants) + * + * @return string The badge ID in the format: badge--{extensionCode}--{badgeType} + */ + public static function GetBadgeId(string $sExtensionCode, string $sBadgeType): string + { + return 'badge--'.$sExtensionCode.'--'.$sBadgeType; + } + } diff --git a/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php b/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php index 45ef05f7a6..9d91d50aa2 100644 --- a/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php +++ b/tests/php-unit-tests/unitary-tests/setup/WizStepModulesChoiceTest.php @@ -1004,7 +1004,7 @@ class WizStepModulesChoiceTest extends ItopTestCase
-
to be installed
not installed
+
to be installed
not installed
v1.2.3Local extensions folder @@ -1048,7 +1048,7 @@ HTML,
-
installed
to be uninstalled
+
installed
to be uninstalled
v1.2.3Local extensions folder @@ -1093,7 +1093,7 @@ HTML,
-
installed
to be uninstalled
cannot be uninstalled
+
installed
to be uninstalled
cannot be uninstalled