meta_filters/filters.inc.php

117 lines
2.9 KiB
PHP
Raw Normal View History

2023-05-26 17:50:05 +03:00
<?php
namespace metagen_php;
use Exception;
function flt_str2num($val, $name, $struct, $args)
{
if(is_string($val))
{
if(strlen($val) === 0)
throw new Exception("Bad value, string empty, crc28 can't be generated");
//special case
if(strpos($val, '@') !== 0)
throw new Exception("@ expected");
$name = substr($val, 1) . '.conf.js';
$path = \taskman\config_real_path($name);
if(\taskman\config_get_header($path, $proto_id, $alias))
{
if($alias !== $val)
throw new Exception("Config file header alias doesn't match: $alias vs $val");
$val = $proto_id;
}
else
throw new Exception("Config file header is not valid: $path");
}
if(!is_numeric($val))
throw new Exception("Bad value, not a number(" . serialize($val) . ")");
return 1*$val;
}
function flt_range($val, $name, $struct, $args)
{
if(count($args) != 2)
throw new Exception("Wrong usage of \"flt_range\". Use \"@flt_range:[0,1]\" where 0 - min, 1 - max");
if(!is_numeric($args[0]) || !is_numeric($args[1]))
throw new Exception("Wrong usage of \"flt_range\". Use \"@flt_range:[0,1]\" where 0 - min, 1 - max");
if(is_numeric($val))
{
if($val < $args[0] || $val > $args[1])
throw new Exception("Value ".$val.", not in range(" . $args[0] . "," . $args[1] . ")");
}
return $val;
}
function flt_time($val, $name, $struct, $args)
{
$str = "";
if(is_string($val))
{
if(strlen($val) === 0)
throw new Exception("Bad value, string empty, crc28 can't be generated");
$reg = "/^([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})$/";
if(!preg_match($reg, $val, $matches))
throw new Exception("Bad value, pattern 00:00:00");
2023-08-16 14:14:10 +03:00
$h = intval($matches[1]);
$m = intval($matches[2]);
$s = intval($matches[3]);
2023-05-26 17:50:05 +03:00
return $h * 3600 + $m * 60 + $s;
}
return 0;
}
function flt_class($val, $name, $struct, $args)
{
global $GAME_ROOT;
if(is_string($val))
{
2023-06-30 13:15:29 +03:00
$conf_path = $val;
if(strpos($conf_path, '@') === 0)
$conf_path = substr($conf_path, 1) . '.conf.js';
2023-05-26 17:50:05 +03:00
2023-06-30 13:15:29 +03:00
$conf_path = \taskman\config_real_path($conf_path);
2023-09-25 16:55:12 +03:00
$cce = \taskman\config_fetch_by_path($conf_path);
2024-09-26 18:38:23 +03:00
check_config_class($cce, $args);
}
2023-09-25 16:55:12 +03:00
2024-09-26 18:38:23 +03:00
if(is_numeric($val))
{
if($val == 0)
return $val;
static $configs_cache;
if(!isset($configs_cache))
$configs_cache = \taskman\config_fetch_all();
$cce = \taskman\config_find_by_id($configs_cache, $val);
check_config_class($cce, $args);
2023-05-26 17:50:05 +03:00
}
return $val;
}
2024-09-26 18:38:23 +03:00
function check_config_class($cce, $target_class)
{
if(is_array($target_class))
$target_class = $target_class[0];
if(!class_exists($target_class))
throw new Exception($val.". Target class \"".$target_class."\" is not valid");
if($cce->class != $target_class && !is_subclass_of($cce->class, $target_class))
throw new Exception($val.". Config class is \"".$cce->class."\". Must be \"".$target_class."\" or it's child");
}