Browse Source

Merge pull request #41311 from nextcloud/fix/improve-setup-checks-api

Improve setup checks API
pull/40767/head
Côme Chilliet 2 years ago
committed by GitHub
parent
commit
3e6642ab0b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      apps/settings/lib/SetupChecks/PhpModules.php
  2. 6
      core/Command/SetupChecks.php
  3. 3
      lib/private/SetupCheck/SetupCheckManager.php
  4. 2
      lib/public/SetupCheck/ISetupCheck.php
  5. 32
      lib/public/SetupCheck/SetupResult.php

4
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 {

6
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 ? "</{$styleTag}>" : ''),
$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;
}

3
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;
}

2
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;

32
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,

Loading…
Cancel
Save