getRootFile()) . '/' . $module); $mapped = false; foreach(\taskman\bhl_proj()->src_dirs as $dir) { $rel_module = str_replace(\taskman\normalize_path($dir), '', $abs_module); if($rel_module != $abs_module) { $mapped = true; $rel_module = str_replace('\\', '/', $rel_module); $module = "/" . $rel_module; break; } } if(!$mapped) throw new Exception("Could not map relative module: $module"); } $module_file = \taskman\bhl_map_module_to_file($module); if(!$module_file) throw new Exception("Module not found '{$module}'"); //validate signature only if it's explicitely passed if($signature_json) { $signature = json_decode($signature_json, false); if(!is_array($signature)) throw new Exception("Signature is invalid '$module'"); \taskman\bhl_validate_func_ref($module_file, $func, $signature); } return array('module' => ltrim($module, '/'), 'fn' => $func); }