diff --git a/CRM/Utils/Check/Component/Env.php b/CRM/Utils/Check/Component/Env.php
index 18b7bd0d8dc5..f07641564937 100644
--- a/CRM/Utils/Check/Component/Env.php
+++ b/CRM/Utils/Check/Component/Env.php
@@ -608,6 +608,21 @@ public function checkExtensions() {
sort($keys);
$updates = $errors = $okextensions = [];
+ $extPrettyLabel = function($key) use ($mapper) {
+ // We definitely know a $key, but we may not have a $label.
+ // Which is too bad - because it would be nicer if $label could be the reliable start of the string.
+ $keyFmt = '' . htmlentities($key) . '
';
+ try {
+ $info = $mapper->keyToInfo($key);
+ if ($info->label) {
+ return sprintf('"%s" (%s)', htmlentities($info->label), $keyFmt);
+ }
+ }
+ catch (CRM_Extension_Exception $ex) {
+ return "($keyFmt)";
+ }
+ };
+
foreach ($keys as $key) {
try {
$obj = $mapper->keyToInfo($key);
@@ -619,12 +634,18 @@ public function checkExtensions() {
$row = CRM_Admin_Page_Extensions::createExtendedInfo($obj);
switch ($row['status']) {
case CRM_Extension_Manager::STATUS_INSTALLED_MISSING:
- $errors[] = ts('%1 extension (%2) is installed but missing files.', [1 => $row['label'] ?? NULL, 2 => $key]);
+ $errors[] = ts('%1 is installed but missing files.', [1 => $extPrettyLabel($key)]);
break;
case CRM_Extension_Manager::STATUS_INSTALLED:
- if (!empty($row['requires']) && array_diff($row['requires'], $enabled)) {
- $errors[] = ts('%1 extension depends on %2, which is not enabled.', [1 => $row['label'] ?? $key, 2 => implode(', ', array_diff($row['requires'], $enabled))]);
+ $missingRequirements = array_diff($row['requires'], $enabled);
+ if (!empty($row['requires']) && $missingRequirements) {
+ $errors[] = ts('%1 has a missing dependency on %2', [
+ 1 => $extPrettyLabel($key),
+ 2 => implode(', ', array_map($extPrettyLabel, $missingRequirements)),
+ 'plural' => '%1 has missing dependencies: %2',
+ 'count' => count($missingRequirements),
+ ]);
}
elseif (!empty($remotes[$key]) && version_compare($row['version'], $remotes[$key]->version, '<')) {
$updates[] = $row['label'] . ': ' . $mapper->getUpgradeLink($remotes[$key], $row);
@@ -659,8 +680,15 @@ public function checkExtensions() {
if ($errors) {
$messages[] = new CRM_Utils_Check_Message(
__FUNCTION__ . 'Error',
- '