ServerManager project files
This commit is contained in:
203
src/Helpers/functions.php
Executable file
203
src/Helpers/functions.php
Executable 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user