register_tag($method, [__CLASS__, $method]); } } } /** * @param STECore $ste * @param array $params * @param callable $sub * @return string */ public static function escape(STECore $ste, array $params, callable $sub) { if ($ste->evalbool(@$params["lines"])) { return nl2br(htmlspecialchars(str_replace("\r\n", "\n", $sub($ste)))); } else { return htmlspecialchars($sub($ste)); } } /** * @param STECore $ste * @param array $params * @param callable $sub * @return string */ public static function strlen(STECore $ste, array $params, callable $sub) { return strlen($sub($ste)); } /** * @param STECore $ste * @param array $params * @param callable $sub * @return string * @throws RuntimeError */ public static function arraylen(STECore $ste, array $params, callable $sub) { if (empty($params["array"])) { throw new RuntimeError("Missing array parameter in ."); } $a = $ste->get_var_by_name($params["array"]); return (is_array($a)) ? count($a) : ""; } /** * @param STECore $ste * @param array $params * @param callable $sub * @throws RuntimeError */ public static function inc(STECore $ste, array $params, callable $sub) { if (empty($params["var"])) { throw new RuntimeError("Missing var parameter in ."); } $ref = &$ste->get_var_reference($params["var"], true); $ref++; } /** * @param STECore $ste * @param array $params * @param callable $sub * @throws RuntimeError */ public static function dec(STECore $ste, array $params, callable $sub) { if (empty($params["var"])) { throw new RuntimeError("Missing var parameter in ."); } $ref = &$ste->get_var_reference($params["var"], true); $ref--; } /** * @param STECore $ste * @param array $params * @param callable $sub * @return string */ public static function date(STECore $ste, array $params, callable $sub) { return @strftime($sub($ste), empty($params["timestamp"]) ? @time() : (int) $params["timestamp"]); } /** * @param STECore $ste * @param array $params * @param callable $sub * @return string * @throws RuntimeError */ public static function in_array(STECore $ste, array $params, callable $sub) { if (empty($params["array"])) { throw new RuntimeError("Missing array parameter in ."); } $ar = &$ste->get_var_reference($params["array"], false); if (!is_array($ar)) { return ""; } return in_array($sub($ste), $ar) ? "y" : ""; } /** * @param STECore $ste * @param array $params * @param callable $sub * @return string * @throws RuntimeError */ public static function join(STECore $ste, array $params, callable $sub) { if (empty($params["array"])) { throw new RuntimeError("Missing array parameter in ."); } return implode($sub($ste), $ste->get_var_by_name($params["array"])); } /** * @param STECore $ste * @param array $params * @param callable $sub * @throws RuntimeError */ public static function split(STECore $ste, array $params, callable $sub) { if (empty($params["array"])) { throw new RuntimeError("Missing array parameter in ."); } if (empty($params["delim"])) { throw new RuntimeError("Missing delim parameter in ."); } $ste->set_var_by_name($params["array"], explode($params["delim"], $sub($ste))); } /** * @param STECore $ste * @param array $params * @param callable $sub * @throws RuntimeError */ public static function array_add(STECore $ste, array $params, callable $sub) { if (empty($params["array"])) { throw new RuntimeError("Missing array parameter in ."); } $ar = &$ste->get_var_reference($params["array"], true); if (empty($params["key"])) { $ar[] = $sub($ste); } else { $ar[$params["key"]] = $sub($ste); } } /** * @param STECore $ste * @param array $params * @param callable $sub * @throws RuntimeError */ public static function array_filter(STECore $ste, array $params, callable $sub) { if (empty($params["array"])) { throw new RuntimeError("Missing array parameter in ."); } $ar = $ste->get_var_by_name($params["array"]); if (!is_array($ar)) { throw new RuntimeError("Variable at 'array' is not an array."); } $keys = array_keys($ar); if (!empty($params["keep_by_keys"])) { $keep_by_keys = &$ste->get_var_reference($params["keep_by_keys"], false); if (!is_array($keep_by_keys)) { throw new RuntimeError("Variable at 'keep_by_keys' is not an array."); } $delkeys = array_filter($keys, function ($k) use ($keep_by_keys) { return !in_array($k, $keep_by_keys); }); foreach ($delkeys as $dk) { unset($ar[$dk]); } $keys = array_keys($ar); } if (!empty($params["keep_by_values"])) { $keep_by_values = &$ste->get_var_reference($params["keep_by_values"], false); if (!is_array($keep_by_values)) { throw new RuntimeError("Variable at 'keep_by_values' is not an array."); } $ar = array_filter($ar, function ($v) use ($keep_by_values) { return in_array($v, $keep_by_values); }); $keys = array_keys($ar); } if (!empty($params["delete_by_keys"])) { $delete_by_keys = &$ste->get_var_reference($params["delete_by_keys"], false); if (!is_array($delete_by_keys)) { throw new RuntimeError("Variable at 'delete_by_keys' is not an array."); } $delkeys = array_filter($keys, function ($k) use ($delete_by_keys) { return in_array($k, $delete_by_keys); }); foreach ($delkeys as $dk) { unset($ar[$dk]); } $keys = array_keys($ar); } if (!empty($params["delete_by_values"])) { $delete_by_values = &$ste->get_var_reference($params["delete_by_values"], false); if (!is_array($delete_by_values)) { throw new RuntimeError("Variable at 'delete_by_values' is not an array."); } $ar = array_filter($ar, function ($v) use ($delete_by_values) { return !in_array($v, $delete_by_values); }); $keys = array_keys($ar); } $ste->set_var_by_name($params["array"], $ar); } }