addListener('hook_civicrm_caseTypes', function ($e) use ($mixInfo) { // When deactivating on a polyfill/pre-mixin system, listeners may not cleanup automatically. if (!$mixInfo->isActive() || !is_dir($mixInfo->getPath('xml/case'))) { return; } foreach ((array) glob($mixInfo->getPath('xml/case/*.xml')) as $file) { $name = preg_replace('/\.xml$/', '', basename($file)); if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); throw new CRM_Core_Exception($errorMessage); } $e->caseTypes[$name] = [ 'module' => $mixInfo->longName, 'name' => $name, 'file' => $file, ]; } }); };