Adding support to <%BHL_REF(..)%> macro for .local/_Local overrides
This commit is contained in:
parent
852b90dc7a
commit
4c32ed0d08
12
bhl.inc.php
12
bhl.inc.php
|
@ -214,18 +214,16 @@ function bhl_map_module_to_file($module)
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function bhl_validate_func_ref($module, $func, array $signature)
|
function bhl_validate_func_ref($module_file, $func, array $signature)
|
||||||
{
|
{
|
||||||
if(sizeof($signature) == 0)
|
if(sizeof($signature) == 0)
|
||||||
throw new Exception("Signature is invalid");
|
throw new Exception("Signature is invalid");
|
||||||
|
|
||||||
$module_file = bhl_map_module_to_file($module);
|
|
||||||
|
|
||||||
if(!$module_file)
|
|
||||||
throw new Exception("Module not found '{$module}'");
|
|
||||||
|
|
||||||
$module_src = file_get_contents($module_file);
|
$module_src = file_get_contents($module_file);
|
||||||
|
|
||||||
|
if(!$module_src)
|
||||||
|
throw new Exception("Bad module file '{$module_file}'");
|
||||||
|
|
||||||
$signature_pattern = '';
|
$signature_pattern = '';
|
||||||
$signature_pattern .= '~func\s+';
|
$signature_pattern .= '~func\s+';
|
||||||
if($signature[0] !== 'void')
|
if($signature[0] !== 'void')
|
||||||
|
@ -248,7 +246,7 @@ function bhl_validate_func_ref($module, $func, array $signature)
|
||||||
$signature_pattern .= '~';
|
$signature_pattern .= '~';
|
||||||
|
|
||||||
if(!preg_match($signature_pattern, $module_src))
|
if(!preg_match($signature_pattern, $module_src))
|
||||||
throw new Exception("Func '$func' signature '".implode(',', $signature)."' not found in module '$module'");
|
throw new Exception("Func '$func' signature '".implode(',', $signature)."' not found in module '$module_file'");
|
||||||
}
|
}
|
||||||
|
|
||||||
function bhl_upm_path()
|
function bhl_upm_path()
|
||||||
|
|
|
@ -10,6 +10,10 @@ function flt_bhl_ref($val, $name, $struct, $args)
|
||||||
if(!isset($val['module']))
|
if(!isset($val['module']))
|
||||||
throw new Exception("Missing 'module'");
|
throw new Exception("Missing 'module'");
|
||||||
|
|
||||||
|
$module_file = \taskman\bhl_map_module_to_file($val['module']);
|
||||||
|
if(!$module_file)
|
||||||
|
throw new Exception("Module not found '{$val['module']}");
|
||||||
|
|
||||||
if(!isset($val['fn']))
|
if(!isset($val['fn']))
|
||||||
throw new Exception("Missing 'fn'");
|
throw new Exception("Missing 'fn'");
|
||||||
|
|
||||||
|
@ -17,7 +21,7 @@ function flt_bhl_ref($val, $name, $struct, $args)
|
||||||
if(!$signature)
|
if(!$signature)
|
||||||
throw new Exception("Invalid signature: $args");
|
throw new Exception("Invalid signature: $args");
|
||||||
|
|
||||||
\taskman\bhl_validate_func_ref($val['module'], $val['fn'], $signature);
|
\taskman\bhl_validate_func_ref($module_file, $val['fn'], $signature);
|
||||||
|
|
||||||
return $val;
|
return $val;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,17 +3,31 @@
|
||||||
/**
|
/**
|
||||||
* @global
|
* @global
|
||||||
*/
|
*/
|
||||||
function macro_BHL_REF($proc, $mod_name, $func, $signature_json = '')
|
function macro_BHL_REF($proc, $module, $func, $signature_json = '')
|
||||||
{
|
{
|
||||||
|
//let's try the .local override first
|
||||||
|
$module_file = \taskman\bhl_map_module_to_file($module.".local");
|
||||||
|
if($module_file)
|
||||||
|
{
|
||||||
|
$module .= '.local';
|
||||||
|
$func .= '_Local';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$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
|
//validate signature only if it's explicitely passed
|
||||||
if($signature_json)
|
if($signature_json)
|
||||||
{
|
{
|
||||||
$signature = json_decode($signature_json, false);
|
$signature = json_decode($signature_json, false);
|
||||||
if(!is_array($signature))
|
if(!is_array($signature))
|
||||||
throw new Exception("Signature is invalid '$mod_name'");
|
throw new Exception("Signature is invalid '$module'");
|
||||||
\taskman\bhl_validate_func_ref($mod_name, $func, $signature);
|
\taskman\bhl_validate_func_ref($module_file, $func, $signature);
|
||||||
}
|
}
|
||||||
|
|
||||||
return array('module' => ltrim($mod_name, '/'), 'fn' => $func);
|
return array('module' => ltrim($module, '/'), 'fn' => $func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue