From da00f96e9b7f3eeb8bb3ba7f6dd4428c86314e34 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Mon, 10 Jan 2022 17:48:03 -0500 Subject: [PATCH] Extensions - Add dependency status check Adds a system status check to ensure extension dependencies are met --- CRM/Utils/Check/Component/Env.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/CRM/Utils/Check/Component/Env.php b/CRM/Utils/Check/Component/Env.php index 9c73eb7e84..cdac188f0b 100644 --- a/CRM/Utils/Check/Component/Env.php +++ b/CRM/Utils/Check/Component/Env.php @@ -600,7 +600,11 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { return $messages; } - $keys = array_keys($manager->getStatuses()); + $stauses = $manager->getStatuses(); + $keys = array_keys($stauses); + $enabled = array_keys(array_filter($stauses, function($status) { + return $status === CRM_Extension_Manager::STATUS_INSTALLED; + })); sort($keys); $updates = $errors = $okextensions = []; @@ -619,7 +623,10 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { break; case CRM_Extension_Manager::STATUS_INSTALLED: - if (!empty($remotes[$key]) && version_compare($row['version'], $remotes[$key]->version, '<')) { + 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))]); + } + elseif (!empty($remotes[$key]) && version_compare($row['version'], $remotes[$key]->version, '<')) { $updates[] = $row['label'] . ': ' . $mapper->getUpgradeLink($remotes[$key], $row); } else { -- 2.25.1