ServerManager project files

This commit is contained in:
2026-06-06 17:58:34 -04:00
parent ce1863d955
commit 9c0bc7f189
502 changed files with 87837 additions and 0 deletions

203
src/Helpers/functions.php Executable file
View File

@@ -0,0 +1,203 @@
<?php
declare(strict_types=1);
if (!function_exists('env')) {
function env(string $key, mixed $default = null): mixed
{
$value = $_ENV[$key] ?? getenv($key);
if ($value === false || $value === null) {
return $default;
}
switch (strtolower($value)) {
case 'true':
case '(true)':
return true;
case 'false':
case '(false)':
return false;
case 'null':
case '(null)':
return null;
}
return $value;
}
}
if (!function_exists('e')) {
function e(?string $value): string
{
return htmlspecialchars($value ?? '', ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
}
if (!function_exists('old')) {
function old(string $key, string $default = ''): string
{
return isset($_POST[$key]) ? e($_POST[$key]) : $default;
}
}
if (!function_exists('asset')) {
function asset(string $path): string
{
return '/assets/' . ltrim($path, '/');
}
}
if (!function_exists('url')) {
function url(string $path = ''): string
{
$baseUrl = $_ENV['APP_URL'] ?? 'http://localhost';
return rtrim($baseUrl, '/') . '/' . ltrim($path, '/');
}
}
if (!function_exists('redirect')) {
function redirect(string $url, int $statusCode = 302): never
{
http_response_code($statusCode);
header("Location: {$url}");
exit;
}
}
if (!function_exists('csrf_token')) {
function csrf_token(): string
{
return \ServerManager\Core\Session::get('csrf_token', '');
}
}
if (!function_exists('csrf_field')) {
function csrf_field(): string
{
$token = csrf_token();
if (empty($token)) {
$security = new \ServerManager\Core\Security();
$token = $security->generateCSRFToken();
}
return '<input type="hidden" name="_csrf_token" value="' . e($token) . '">';
}
}
if (!function_exists('auth')) {
function auth(): ?array
{
if (!\ServerManager\Core\Session::has('user_id')) {
return null;
}
return [
'id' => \ServerManager\Core\Session::get('user_id'),
'username' => \ServerManager\Core\Session::get('username'),
'role' => \ServerManager\Core\Session::get('user_role'),
'email' => \ServerManager\Core\Session::get('user_email'),
];
}
}
if (!function_exists('is_super_admin')) {
function is_super_admin(): bool
{
return \ServerManager\Core\Session::get('user_role') === 'super_admin';
}
}
if (!function_exists('is_admin')) {
function is_admin(): bool
{
$role = \ServerManager\Core\Session::get('user_role');
return $role === 'super_admin' || $role === 'admin';
}
}
if (!function_exists('is_operator')) {
function is_operator(): bool
{
$role = \ServerManager\Core\Session::get('user_role');
return in_array($role, ['super_admin', 'admin', 'operator'], true);
}
}
if (!function_exists('format_bytes')) {
function format_bytes(int $bytes, int $precision = 2): string
{
$units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
$bytes = max($bytes, 0);
$pow = floor(($bytes ? log($bytes) : 0) / log(1024));
$pow = min($pow, count($units) - 1);
$bytes /= (1 << (10 * $pow));
return round($bytes, $precision) . ' ' . $units[$pow];
}
}
if (!function_exists('format_uptime')) {
function format_uptime(string $uptime): string
{
return trim(str_replace('up ', '', $uptime));
}
}
if (!function_exists('str_contains')) {
function str_contains(string $haystack, string $needle): bool
{
return $needle === '' || strpos($haystack, $needle) !== false;
}
}
if (!function_exists('str_starts_with')) {
function str_starts_with(string $haystack, string $needle): bool
{
return strncmp($haystack, $needle, strlen($needle)) === 0;
}
}
if (!function_exists('str_ends_with')) {
function str_ends_with(string $haystack, string $needle): bool
{
return $needle === '' || substr($haystack, -strlen($needle)) === $needle;
}
}
if (!function_exists('time_ago')) {
function time_ago(string $datetime): string
{
$timestamp = strtotime($datetime);
$diff = time() - $timestamp;
if ($diff < 60) {
return 'just now';
}
$intervals = [
31536000 => 'year',
2592000 => 'month',
604800 => 'week',
86400 => 'day',
3600 => 'hour',
60 => 'minute',
];
foreach ($intervals as $seconds => $label) {
$count = floor($diff / $seconds);
if ($count >= 1) {
return $count . ' ' . $label . ($count > 1 ? 's' : '') . ' ago';
}
}
return 'just now';
}
}
if (!function_exists('json_response')) {
function json_response(mixed $data, int $statusCode = 200): never
{
http_response_code($statusCode);
header('Content-Type: application/json; charset=utf-8');
echo json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
exit;
}
}