From 39d2970191f88b0e9575e170e904a5c2214cb709 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Mon, 6 Nov 2023 16:21:15 +0100 Subject: [PATCH 1/2] Add $name property in SetupResult and improve API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Keys for check results are not locale dependent anymore, the name of the setup check is instead stored in the setup result object. Signed-off-by: Côme Chilliet --- core/Command/SetupChecks.php | 6 ++-- lib/private/SetupCheck/SetupCheckManager.php | 3 +- lib/public/SetupCheck/ISetupCheck.php | 2 ++ lib/public/SetupCheck/SetupResult.php | 32 ++++++++++++++++++++ 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/core/Command/SetupChecks.php b/core/Command/SetupChecks.php index ed0d22bdfc0..bd76a9d1e65 100644 --- a/core/Command/SetupChecks.php +++ b/core/Command/SetupChecks.php @@ -55,7 +55,7 @@ class SetupChecks extends Base { default: foreach ($results as $category => $checks) { $output->writeln("\t{$category}:"); - foreach ($checks as $title => $check) { + foreach ($checks as $check) { $styleTag = match ($check->getSeverity()) { 'success' => 'info', 'error' => 'error', @@ -74,7 +74,7 @@ class SetupChecks extends Base { "\t\t". ($styleTag !== null ? "<{$styleTag}>" : ''). "{$emoji} ". - $title. + ($check->getName() ?? $check::class). ($description !== null ? ': '.$description : ''). ($styleTag !== null ? "" : ''), $verbosity @@ -83,7 +83,7 @@ class SetupChecks extends Base { } } foreach ($results as $category => $checks) { - foreach ($checks as $title => $check) { + foreach ($checks as $check) { if ($check->getSeverity() !== 'success') { return self::FAILURE; } diff --git a/lib/private/SetupCheck/SetupCheckManager.php b/lib/private/SetupCheck/SetupCheckManager.php index f9e67772019..b8b6cfa11e7 100644 --- a/lib/private/SetupCheck/SetupCheckManager.php +++ b/lib/private/SetupCheck/SetupCheckManager.php @@ -47,9 +47,10 @@ class SetupCheckManager implements ISetupCheckManager { $setupCheckObject = Server::get($setupCheck->getService()); $this->logger->debug('Running check '.get_class($setupCheckObject)); $setupResult = $setupCheckObject->run(); + $setupResult->setName($setupCheckObject->getName()); $category = $setupCheckObject->getCategory(); $results[$category] ??= []; - $results[$category][$setupCheckObject->getName()] = $setupResult; + $results[$category][$setupCheckObject::class] = $setupResult; } return $results; } diff --git a/lib/public/SetupCheck/ISetupCheck.php b/lib/public/SetupCheck/ISetupCheck.php index 77eeaea4df1..96eb6ddd7da 100644 --- a/lib/public/SetupCheck/ISetupCheck.php +++ b/lib/public/SetupCheck/ISetupCheck.php @@ -36,11 +36,13 @@ namespace OCP\SetupCheck; interface ISetupCheck { /** * @since 28.0.0 + * @return string Category id, one of security/system/accounts, or a custom one which will be merged in system */ public function getCategory(): string; /** * @since 28.0.0 + * @return string Translated name to display to the user */ public function getName(): string; diff --git a/lib/public/SetupCheck/SetupResult.php b/lib/public/SetupCheck/SetupResult.php index 27026f82815..e4a7744178a 100644 --- a/lib/public/SetupCheck/SetupResult.php +++ b/lib/public/SetupCheck/SetupResult.php @@ -37,6 +37,11 @@ class SetupResult implements \JsonSerializable { public const WARNING = 'warning'; public const ERROR = 'error'; + /** + * @param string $name Translated name to display to the user + */ + private ?string $name = null; + /** * @brief Private constructor, use success()/info()/warning()/error() instead * @param self::SUCCESS|self::INFO|self::WARNING|self::ERROR $severity @@ -51,6 +56,8 @@ class SetupResult implements \JsonSerializable { /** * @brief Create a success result object + * @param ?string $description Translated detailed description to display to the user + * @param ?string $linkToDoc URI of related relevent documentation, be it from Nextcloud or another project * @since 28.0.0 */ public static function success(?string $description = null, ?string $linkToDoc = null): self { @@ -59,6 +66,8 @@ class SetupResult implements \JsonSerializable { /** * @brief Create an info result object + * @param ?string $description Translated detailed description to display to the user + * @param ?string $linkToDoc URI of related relevent documentation, be it from Nextcloud or another project * @since 28.0.0 */ public static function info(?string $description = null, ?string $linkToDoc = null): self { @@ -67,6 +76,8 @@ class SetupResult implements \JsonSerializable { /** * @brief Create a warning result object + * @param ?string $description Translated detailed description to display to the user + * @param ?string $linkToDoc URI of related relevent documentation, be it from Nextcloud or another project * @since 28.0.0 */ public static function warning(?string $description = null, ?string $linkToDoc = null): self { @@ -75,6 +86,8 @@ class SetupResult implements \JsonSerializable { /** * @brief Create an error result object + * @param ?string $description Translated detailed description to display to the user + * @param ?string $linkToDoc URI of related relevent documentation, be it from Nextcloud or another project * @since 28.0.0 */ public static function error(?string $description = null, ?string $linkToDoc = null): self { @@ -100,6 +113,24 @@ class SetupResult implements \JsonSerializable { return $this->description; } + /** + * @brief Get the name for the setup check + * + * @since 28.0.0 + */ + public function getName(): ?string { + return $this->name; + } + + /** + * @brief Set the name from the setup check + * + * @since 28.0.0 + */ + public function setName(string $name): void { + $this->name = $name; + } + /** * @brief Get a link to the doc for the explanation. * @@ -116,6 +147,7 @@ class SetupResult implements \JsonSerializable { */ public function jsonSerialize(): array { return [ + 'name' => $this->name, 'severity' => $this->severity, 'description' => $this->description, 'linkToDoc' => $this->linkToDoc, From 86290dd8887eb2d87b6d6745eac78809238ff794 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Tue, 7 Nov 2023 14:14:36 +0100 Subject: [PATCH 2/2] Add missing dots in PhpModules setup check descriptions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- apps/settings/lib/SetupChecks/PhpModules.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/settings/lib/SetupChecks/PhpModules.php b/apps/settings/lib/SetupChecks/PhpModules.php index 870c2b7ada1..feb5e587999 100644 --- a/apps/settings/lib/SetupChecks/PhpModules.php +++ b/apps/settings/lib/SetupChecks/PhpModules.php @@ -75,12 +75,12 @@ class PhpModules implements ISetupCheck { $missingRequiredModules = $this->getMissingModules(self::REQUIRED_MODULES); if (!empty($missingRequiredModules)) { return SetupResult::error( - $this->l10n->t('This instance is missing some required PHP modules. It is required to install them: %s', implode(', ', $missingRequiredModules)), + $this->l10n->t('This instance is missing some required PHP modules. It is required to install them: %s.', implode(', ', $missingRequiredModules)), $this->urlGenerator->linkToDocs('admin-php-modules') ); } elseif (!empty($missingRecommendedModules)) { return SetupResult::info( - $this->l10n->t('This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them: %s', implode(', ', $missingRecommendedModules)), + $this->l10n->t('This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them: %s.', implode(', ', $missingRecommendedModules)), $this->urlGenerator->linkToDocs('admin-php-modules') ); } else {