Parser::instance($parser)->parseText($text)), new Twig_Filter('asset_url', [static::class, 'assetUrl']), new Twig_Filter('perms_check', 'perms_check'), new Twig_Filter('bg_settings', 'user_background_settings_strings'), new Twig_Filter('clamp', 'clamp'), new Twig_Filter('log_format', fn(string $text, string $json) => vsprintf($text, json_decode($json))), ]; } public function getFunctions() { return [ new Twig_Function('get_browser', 'get_browser'), new Twig_Function('url_construct', 'url_construct'), new Twig_Function('warning_has_duration', 'user_warning_has_duration'), new Twig_Function('url', 'url'), new Twig_Function('url_list', 'url_list'), new Twig_Function('html_tag', 'html_tag'), new Twig_Function('html_avatar', 'html_avatar'), new Twig_Function('changelog_action_name', 'changelog_action_name'), new Twig_Function('forum_may_have_children', 'forum_may_have_children'), new Twig_Function('forum_may_have_topics', 'forum_may_have_topics'), new Twig_Function('forum_has_priority_voting', 'forum_has_priority_voting'), new Twig_Function('csrf_token', fn() => CSRF::token()), new Twig_Function('git_commit_hash', fn(bool $long = false) => GitInfo::hash($long)), new Twig_Function('git_tag', fn() => GitInfo::tag()), new Twig_Function('git_branch', fn() => GitInfo::branch()), new Twig_Function('startup_time', fn(float $time = MSZ_STARTUP) => microtime(true) - $time), new Twig_Function('sql_query_count', fn() => DB::queries()), ]; } public static function assetUrl(string $path): string { $realPath = realpath(MSZ_ROOT . '/public/' . $path); if($realPath === false || !file_exists($realPath)) { return $path; } return $path . '?' . filemtime($realPath); } }