aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCôme Chilliet <come.chilliet@nextcloud.com>2024-01-04 16:27:18 +0100
committerCôme Chilliet <91878298+come-nc@users.noreply.github.com>2024-01-11 14:03:55 +0100
commitf34865eb4eb2cebc6379ebb0479c2b2e997a2301 (patch)
tree95adc4c5c670f29a489e97af2040d3339b57c048
parent67fba0a574a3740976c84bb6498011e8d2cef0f1 (diff)
downloadnextcloud-server-f34865eb4eb2cebc6379ebb0479c2b2e997a2301.tar.gz
nextcloud-server-f34865eb4eb2cebc6379ebb0479c2b2e997a2301.zip
Add RichObject support for SetupChecks descriptions
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
-rw-r--r--core/Command/SetupChecks.php28
-rw-r--r--lib/public/SetupCheck/SetupResult.php34
2 files changed, 54 insertions, 8 deletions
diff --git a/core/Command/SetupChecks.php b/core/Command/SetupChecks.php
index bd76a9d1e65..0940a139617 100644
--- a/core/Command/SetupChecks.php
+++ b/core/Command/SetupChecks.php
@@ -45,6 +45,30 @@ class SetupChecks extends Base {
;
}
+ /**
+ * @throws \InvalidArgumentException if a parameter has no name or no type
+ */
+ private function richToParsed(string $message, array $parameters): string {
+ $placeholders = [];
+ $replacements = [];
+ foreach ($parameters as $placeholder => $parameter) {
+ $placeholders[] = '{' . $placeholder . '}';
+ foreach (['name','type'] as $requiredField) {
+ if (!isset($parameter[$requiredField]) || !is_string($parameter[$requiredField])) {
+ throw new \InvalidArgumentException("Invalid rich object, {$requiredField} field is missing");
+ }
+ }
+ if ($parameter['type'] === 'user') {
+ $replacements[] = '@' . $parameter['name'];
+ } elseif ($parameter['type'] === 'file') {
+ $replacements[] = $parameter['path'] ?? $parameter['name'];
+ } else {
+ $replacements[] = $parameter['name'];
+ }
+ }
+ return str_replace($placeholders, $replacements, $message);
+ }
+
protected function execute(InputInterface $input, OutputInterface $output): int {
$results = $this->setupCheckManager->runAll();
switch ($input->getOption('output')) {
@@ -70,6 +94,10 @@ class SetupChecks extends Base {
};
$verbosity = ($check->getSeverity() === 'error' ? OutputInterface::VERBOSITY_QUIET : OutputInterface::VERBOSITY_NORMAL);
$description = $check->getDescription();
+ $descriptionParameters = $check->getDescriptionParameters();
+ if ($descriptionParameters !== null) {
+ $description = $this->richToParsed($description, $descriptionParameters);
+ }
$output->writeln(
"\t\t".
($styleTag !== null ? "<{$styleTag}>" : '').
diff --git a/lib/public/SetupCheck/SetupResult.php b/lib/public/SetupCheck/SetupResult.php
index e4a7744178a..51428a001e0 100644
--- a/lib/public/SetupCheck/SetupResult.php
+++ b/lib/public/SetupCheck/SetupResult.php
@@ -46,10 +46,12 @@ class SetupResult implements \JsonSerializable {
* @brief Private constructor, use success()/info()/warning()/error() instead
* @param self::SUCCESS|self::INFO|self::WARNING|self::ERROR $severity
* @since 28.0.0
+ * @since 28.0.2 Optional parameter ?array $descriptionParameters
*/
private function __construct(
private string $severity,
private ?string $description = null,
+ private ?array $descriptionParameters = null,
private ?string $linkToDoc = null,
) {
}
@@ -59,9 +61,10 @@ class SetupResult implements \JsonSerializable {
* @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
+ * @since 28.0.2 Optional parameter ?array $descriptionParameters
*/
- public static function success(?string $description = null, ?string $linkToDoc = null): self {
- return new self(self::SUCCESS, $description, $linkToDoc);
+ public static function success(?string $description = null, ?string $linkToDoc = null, ?array $descriptionParameters = null): self {
+ return new self(self::SUCCESS, $description, $descriptionParameters, $linkToDoc);
}
/**
@@ -69,9 +72,10 @@ class SetupResult implements \JsonSerializable {
* @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
+ * @since 28.0.2 Optional parameter ?array $descriptionParameters
*/
- public static function info(?string $description = null, ?string $linkToDoc = null): self {
- return new self(self::INFO, $description, $linkToDoc);
+ public static function info(?string $description = null, ?string $linkToDoc = null, ?array $descriptionParameters = null): self {
+ return new self(self::INFO, $description, $descriptionParameters, $linkToDoc);
}
/**
@@ -79,9 +83,10 @@ class SetupResult implements \JsonSerializable {
* @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
+ * @since 28.0.2 Optional parameter ?array $descriptionParameters
*/
- public static function warning(?string $description = null, ?string $linkToDoc = null): self {
- return new self(self::WARNING, $description, $linkToDoc);
+ public static function warning(?string $description = null, ?string $linkToDoc = null, ?array $descriptionParameters = null): self {
+ return new self(self::WARNING, $description, $descriptionParameters, $linkToDoc);
}
/**
@@ -89,9 +94,10 @@ class SetupResult implements \JsonSerializable {
* @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
+ * @since 28.0.2 Optional parameter ?array $descriptionParameters
*/
- public static function error(?string $description = null, ?string $linkToDoc = null): self {
- return new self(self::ERROR, $description, $linkToDoc);
+ public static function error(?string $description = null, ?string $linkToDoc = null, ?array $descriptionParameters = null): self {
+ return new self(self::ERROR, $description, $descriptionParameters, $linkToDoc);
}
/**
@@ -114,6 +120,17 @@ class SetupResult implements \JsonSerializable {
}
/**
+ * @brief Get the description parameters for the setup check result
+ *
+ * If this returns null, description must not be treated as rich text
+ *
+ * @since 28.0.2
+ */
+ public function getDescriptionParameters(): ?array {
+ return $this->descriptionParameters;
+ }
+
+ /**
* @brief Get the name for the setup check
*
* @since 28.0.0
@@ -150,6 +167,7 @@ class SetupResult implements \JsonSerializable {
'name' => $this->name,
'severity' => $this->severity,
'description' => $this->description,
+ 'descriptionParameters' => $this->descriptionParameters,
'linkToDoc' => $this->linkToDoc,
];
}