namespace Civi\WorkflowMessage;
use Civi\Api4\Utils\ReflectionUtils;
+use Civi\Core\ClassScanner;
use Civi\WorkflowMessage\Exception\WorkflowMessageException;
/**
$map = $cache->get($cacheKey);
if ($map === NULL) {
$map = [];
- $map['generic'] = GenericWorkflowMessage::class;
- $baseDirs = explode(PATH_SEPARATOR, get_include_path());
- foreach ($baseDirs as $baseDir) {
- $baseDir = \CRM_Utils_File::addTrailingSlash($baseDir);
- $glob = (array) glob($baseDir . 'CRM/*/WorkflowMessage/*.php');
- $glob = preg_grep('/\.ex\.php$/', $glob, PREG_GREP_INVERT);
- foreach ($glob as $file) {
- $class = strtr(preg_replace('/\.php$/', '', \CRM_Utils_File::relativize($file, $baseDir)), ['/' => '_', '\\' => '_']);
- if (class_exists($class) && (new \ReflectionClass($class))->implementsInterface(WorkflowMessageInterface::class)) {
- $map[$class::WORKFLOW] = $class;
- }
- }
+ foreach (ClassScanner::get(['interface' => WorkflowMessageInterface::class]) as $wfClass) {
+ $wfName = ($wfClass === GenericWorkflowMessage::class) ? 'generic' : $wfClass::WORKFLOW;
+ $map[$wfName] = $wfClass;
}
$cache->set($cacheKey, $map);
}