| Server IP : 213.255.246.8 / Your IP : 216.73.217.138 Web Server : Apache System : Linux dublin.stapolin.com 5.14.0-362.18.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Jan 29 07:05:48 EST 2024 x86_64 User : stapolin ( 1019) PHP Version : 8.4.24 Disable Function : exec,passthru,shell_exec,system MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/stapolin/public_html/tracking.stapolin.com/includes/ |
Upload File : |
<?php
declare(strict_types=1);
function config_value(string $key, mixed $default = null): mixed
{
global $config;
$value = $config;
foreach (explode('.', $key) as $segment) {
if (!is_array($value) || !array_key_exists($segment, $value)) {
return $default;
}
$value = $value[$segment];
}
return $value;
}
function app_url(string $path = ''): string
{
$base = rtrim((string) config_value('app_url', ''), '/');
return $base . '/' . ltrim($path, '/');
}
function redirect(string $path): never
{
header('Location: ' . app_url($path));
exit;
}
function e(mixed $value): string
{
return htmlspecialchars((string) $value, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
function random_token(int $bytes = 32): string
{
return bin2hex(random_bytes($bytes));
}
function public_id(string $prefix): string
{
return $prefix . '_' . rtrim(strtr(base64_encode(random_bytes(18)), '+/', '-_'), '=');
}
function utc_now(): string
{
return gmdate('Y-m-d H:i:s');
}
function client_ip(): string
{
$ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
return filter_var($ip, FILTER_VALIDATE_IP) ? $ip : '0.0.0.0';
}
function flash(string $type, string $message): void
{
$_SESSION['flash'][] = ['type' => $type, 'message' => $message];
}
function flashes(): array
{
$messages = $_SESSION['flash'] ?? [];
unset($_SESSION['flash']);
return $messages;
}
function require_installed(): void
{
if (!is_file(APP_ROOT . '/storage/installed.lock')) {
redirect('install/');
}
}
function require_not_installed(): void
{
if (is_file(APP_ROOT . '/storage/installed.lock')) {
http_response_code(403);
exit('Installer is locked. Remove storage/installed.lock manually to reinstall.');
}
}
function audit_log(?int $userId, string $action, ?int $websiteId = null, array $details = []): void
{
try {
db_execute(
'INSERT INTO audit_logs (user_id, website_id, action, ip_address, details_json, created_at) VALUES (?, ?, ?, ?, ?, ?)',
'iissss',
[$userId, $websiteId, $action, client_ip(), json_encode($details, JSON_THROW_ON_ERROR), utc_now()]
);
} catch (Throwable $exception) {
error_log('Audit log failed: ' . $exception->getMessage());
}
}
function get_system_setting(string $key): ?string
{
$row = db_fetch_one('SELECT setting_value FROM system_settings WHERE setting_key = ?', 's', [$key]);
if ($row === null || $row['setting_value'] === '') {
return null;
}
return (string) $row['setting_value'];
}
function set_system_setting(string $key, string $value): void
{
db_execute(
'INSERT INTO system_settings (setting_key, setting_value, updated_at) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE setting_value = VALUES(setting_value), updated_at = VALUES(updated_at)',
'sss',
[$key, $value, utc_now()]
);
}