Extensions - Add dependency status check
authorColeman Watts <coleman@civicrm.org>
Mon, 10 Jan 2022 22:48:03 +0000 (17:48 -0500)
committerColeman Watts <coleman@civicrm.org>
Mon, 10 Jan 2022 22:48:03 +0000 (17:48 -0500)
Adds a system status check to ensure extension dependencies are met

CRM/Utils/Check/Component/Env.php

index 9c73eb7e8415e52caabcd8252c5faad4e4f27d08..cdac188f0b9d42a7f0575a01b8df1bd45ea25d0b 100644 (file)
@@ -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 {