=")) $problems[] = "Incompatible PHP version: " . PHP_VERSION . " (7.3+ required, 7.4+ recommended)"; if(!is_dir(__DIR__ . "/vendor")) $problems[] = "Composer dependencies missing"; $requiredExtensions = [ "imagick", "fileinfo", "PDO", "pdo_mysql", "pcre", "hash", "curl", "Core", "iconv", "mbstring", "sodium", "openssl", "json", "tokenizer", "libxml", "date", "session", "SPL", ]; if(sizeof($missingExtensions = array_diff($requiredExtensions, get_loaded_extensions())) > 0) foreach($missingExtensions as $extension) $problems[] = "Missing extension $extension"; if(sizeof($problems) > 0) { require __DIR__ . "/misc/install_err.phtml"; exit; } } function ovk_proc_strtr(string $string, int $length = 0): string { $newString = iconv_substr($string, 0, $length); return $newString . ($string !== $newString ? "…" : ""); #if cut hasn't happened, don't append "..." } function bmask(int $input, array $options = []): Bitmask { return new Bitmask($input, $options["length"] ?? 1, $options["mappings"] ?? []); } function tr(string $stringId, ...$variables): string { $localizer = Localizator::i(); $lang = Session::i()->get("lang", "ru"); $output = $localizer->_($stringId, $lang); if(sizeof($variables) > 0) { if(gettype($variables[0]) === "integer") { $numberedStringId = NULL; $cardinal = $variables[0]; switch($cardinal) { case 0: $numberedStringId = $stringId . "_zero"; break; case 1: $numberedStringId = $stringId . "_one"; break; default: $numberedStringId = $stringId . ($cardinal < 5 ? "_few" : "_other"); } $newOutput = $localizer->_($numberedStringId, $lang); $output = $newOutput === "@$numberedStringId" ? $output : $newOutput; } for($i = 0; $i < sizeof($variables); $i++) $output = preg_replace("%(? $db->dsn, "user" => $db->user, "password" => $db->password, "caching" => [ "folder" => __DIR__ . "/tmp", ], ]); } #NOTICE: invalid name, kept for compatability function ovk_proc_strtrim(string $string, int $length = 0): string { trigger_error("ovk_proc_strtrim is deprecated, please use fully compatible ovk_proc_strtr.", E_USER_DEPRECATED); return ovk_proc_strtr($string, $length); } return (function() { _ovk_check_environment(); require __DIR__ . "/vendor/autoload.php"; setlocale(LC_TIME, "POSIX"); $showCommitHash = false; # plz remove when release if(is_dir($gitDir = OPENVK_ROOT . "/.git") && $showCommitHash) $ver = trim(`git --git-dir="$gitDir" log --pretty="%h" -n1 HEAD`) . "-nightly"; else $ver = "Technical Preview 1"; define("OPENVK_VERSION", "Altair ($ver)", false); define("OPENVK_DEFAULT_PER_PAGE", 10, false); define("__OPENVK_ERROR_CLOCK_IN_FUTURE", "Server clock error: FK1200-DTF", false); });