query('SELECT setting_key, setting_value FROM settings'); $settings = []; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $settings[$row['setting_key']] = $row['setting_value']; } $SYSTEM_SETTINGS = $settings; return $settings; } catch (Exception $e) { return []; } } function apply_timezone() { $s = get_system_settings(); if (!empty($s['timezone'])) { date_default_timezone_set($s['timezone']); } } apply_timezone(); function format_currency($amount) { $settings = get_system_settings(); $currency_symbol = $settings['currency_symbol'] ?? '$'; $decimal_digits = isset($settings['decimal_digits']) ? (int)$settings['decimal_digits'] : 2; return $currency_symbol . ' ' . number_format((float)$amount, $decimal_digits); } session_start(); require_once __DIR__ . '/lang.php'; if (!isset($_SESSION['lang'])) { $_SESSION['lang'] = 'en'; } if (isset($_GET['lang'])) { if ($_GET['lang'] === 'ar' || $_GET['lang'] === 'en') { $_SESSION['lang'] = $_GET['lang']; // Redirect to remove lang param header("Location: " . strtok($_SERVER["REQUEST_URI"], '?')); exit; } } function __($key) { global $translations; $lang = $_SESSION['lang']; return $translations[$lang][$key] ?? $key; } function is_rtl() { return $_SESSION['lang'] === 'ar'; } function get_dir() { return is_rtl() ? 'rtl' : 'ltr'; } function get_lang_name() { return $_SESSION['lang'] === 'ar' ? 'English' : 'العربية'; } function get_lang_code() { return $_SESSION['lang'] === 'ar' ? 'en' : 'ar'; } function calculate_age($dob) { if (empty($dob)) return '-'; try { $birthDate = new DateTime($dob); $today = new DateTime('today'); return $birthDate->diff($today)->y; } catch (Exception $e) { return '-'; } } if (!function_exists('mb_strimwidth')) { function mb_strimwidth($string, $start, $width, $trimmarker = '...', $encoding = null) { // Simple polyfill using substr // 1. Handle start offset $string = (string)$string; if ($start > 0) { $string = substr($string, $start); } // 2. Check length if (strlen($string) <= $width) { return $string; } // 3. Truncate $targetLen = $width - strlen($trimmarker); if ($targetLen < 0) $targetLen = 0; return substr($string, 0, $targetLen) . $trimmarker; } }