+ /**
+ * @param array $statusNames
+ * Optionally specify the names of specific checks to run, or leave empty to run all
+ * @param bool $includeDisabled
+ * Run checks that have been explicitly disabled (default false)
+ *
+ * @return CRM_Utils_Check_Message[]
+ */
+ public static function checkStatus($statusNames = [], $includeDisabled = FALSE) {
+ $messages = [];
+ $checksNeeded = $statusNames;
+ foreach (glob(__DIR__ . '/Check/Component/*.php') as $filePath) {
+ $className = 'CRM_Utils_Check_Component_' . basename($filePath, '.php');
+ /* @var CRM_Utils_Check_Component $component */
+ $component = new $className();
+ if ($includeDisabled || $component->isEnabled()) {
+ $messages = array_merge($messages, $component->checkAll($statusNames, $includeDisabled));
+ }
+ if ($statusNames) {
+ // Early return if we have already run (or skipped) all the requested checks.
+ $checksNeeded = array_diff($checksNeeded, $component->getAllChecks());
+ if (!$checksNeeded) {
+ return $messages;
+ }
+ }
+ }
+
+ CRM_Utils_Hook::check($messages, $statusNames, $includeDisabled);
+
+ return $messages;
+ }
+