load(sprintf(ROOT.'core/language/%s.php', Application::get('CORE.LANGUAGE'))); $Language->load(sprintf(ROOT.'theme/%s/lang/%s.php', $template_name, $template_lang)); self::$Language = $Language; } return self::$Language; } #=============================================================================== # Return unique CSRF token for the current session #=============================================================================== public static function getSecurityToken(): string { if(!isset($_SESSION['token'])) { $_SESSION['token'] = bin2hex(random_bytes(16)); } return $_SESSION['token']; } #=============================================================================== # Return boolean if successfully authenticated #=============================================================================== public static function isAuthenticated(): bool { return isset($_SESSION['auth']); } #=============================================================================== # Return absolute base URL #=============================================================================== public static function getURL($more = ''): string { $prot = self::get('PATHINFO.PROT'); $host = self::get('PATHINFO.HOST'); $base = self::get('PATHINFO.BASE'); return "{$prot}://{$host}/{$base}{$more}"; } #=============================================================================== # Return absolute post URL #=============================================================================== public static function getPostURL($more = ''): string { return self::getURL(self::get('POST.DIRECTORY')."/{$more}"); } #=============================================================================== # Return absolute page URL #=============================================================================== public static function getPageURL($more = ''): string { return self::getURL(self::get('PAGE.DIRECTORY')."/{$more}"); } #=============================================================================== # Return absolute user URL #=============================================================================== public static function getUserURL($more = ''): string { return self::getURL(self::get('USER.DIRECTORY')."/{$more}"); } #=============================================================================== # Return absolute file URL #=============================================================================== public static function getFileURL($more = ''): string { return self::getURL("rsrc/{$more}"); } #=============================================================================== # Return absolute admin URL #=============================================================================== public static function getAdminURL($more = ''): string { return self::getURL("admin/{$more}"); } #=============================================================================== # Return absolute template URL #=============================================================================== public static function getTemplateURL($more = ''): string { $template = self::get('TEMPLATE.NAME'); return self::getURL("theme/{$template}/{$more}"); } #=============================================================================== # Return absolute URL of a specifc entity #=============================================================================== public function getEntityURL(Item $Entity) { switch($class = get_class($Entity)) { case 'Page\Item': $attr = self::get('PAGE.SLUG_URLS') ? 'slug' : 'id'; return self::getPageURL($Entity->attr($attr).'/'); case 'Post\Item': $attr = self::get('POST.SLUG_URLS') ? 'slug' : 'id'; return self::getPostURL($Entity->attr($attr).'/'); case 'User\Item': $attr = self::get('USER.SLUG_URLS') ? 'slug' : 'id'; return self::getUserURL($Entity->attr($attr).'/'); default: $error = 'Unknown URL handler for %s entities.'; throw new Exception(sprintf($error, $class)); } } #=============================================================================== # Exit application with a custom message and status code #=============================================================================== public static function exit($message = '', $code = 503): void { http_response_code($code); exit($message); } #=============================================================================== # Exit application with the 403 error page #=============================================================================== public static function error403(): void { require ROOT.'403.php'; exit(); } #=============================================================================== # Exit application with the 404 error page #=============================================================================== public static function error404(): void { require ROOT.'404.php'; exit(); } }