38929-vm/db/config.php
2026-03-09 09:46:11 +00:00

121 lines
3.9 KiB
PHP

<?php
// Generated by setup_mariadb_project.sh — edit as needed.
require_once __DIR__ . '/../includes/dotenv.php';
define('DB_HOST', getenv('DB_HOST') ?: '127.0.0.1');
define('DB_NAME', getenv('DB_NAME') ?: 'app_38384');
define('DB_USER', getenv('DB_USER') ?: 'app_38384');
define('DB_PASS', getenv('DB_PASS') ?: '5561099f-23a3-43d8-b1a2-54739c50721b');
function db() {
static $pdo;
if (!$pdo) {
try {
$pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASS, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
} catch (PDOException $e) {
die("Database Connection Error: " . $e->getMessage());
}
}
return $pdo;
}
function check_permission($page = null, $user_id = null) {
// Safely access session
if (!$user_id) {
if (isset($_SESSION) && isset($_SESSION['user_id'])) {
$user_id = $_SESSION['user_id'];
} else {
$user_id = null;
}
}
if (!$page) $page = basename($_SERVER['PHP_SELF']);
if (!$user_id) return ['view' => 0, 'add' => 0, 'edit' => 0, 'delete' => 0];
static $permissions_cache = [];
$cache_key = $user_id . '_' . $page;
if (isset($permissions_cache[$cache_key])) return $permissions_cache[$cache_key];
try {
// First check if user is super_admin
$role = null;
if (isset($_SESSION) && isset($_SESSION['user_id']) && $_SESSION['user_id'] == $user_id && isset($_SESSION['role'])) {
$role = $_SESSION['role'];
} else {
$stmt = db()->prepare("SELECT role FROM users WHERE id = ?");
$stmt->execute([$user_id]);
$role = $stmt->fetchColumn();
}
if ($role === 'super_admin') {
$result = ['view' => 1, 'add' => 1, 'edit' => 1, 'delete' => 1];
$permissions_cache[$cache_key] = $result;
return $result;
}
$stmt = db()->prepare("SELECT can_view as view, can_add as `add`, can_edit as edit, can_delete as `delete` FROM user_permissions WHERE user_id = ? AND page = ?");
$stmt->execute([$user_id, $page]);
$perms = $stmt->fetch();
if (!$perms) {
return ['view' => 0, 'add' => 0, 'edit' => 0, 'delete' => 0];
}
$result = [
'view' => (int)$perms['view'],
'add' => (int)$perms['add'],
'edit' => (int)$perms['edit'],
'delete' => (int)$perms['delete']
];
$permissions_cache[$cache_key] = $result;
return $result;
} catch (Exception $e) {
return ['view' => 0, 'add' => 0, 'edit' => 0, 'delete' => 0];
}
}
function get_setting($key, $default = null) {
try {
$stmt = db()->prepare('SELECT setting_value FROM settings WHERE setting_key = ?');
$stmt->execute([$key]);
$val = $stmt->fetchColumn();
return ($val !== false) ? $val : $default;
} catch (Exception $e) {
return $default;
}
}
function set_setting($key, $value) {
$stmt = db()->prepare('INSERT INTO settings (setting_key, setting_value) VALUES (?, ?) ON DUPLICATE KEY UPDATE setting_value = ?, updated_at = CURRENT_TIMESTAMP');
$stmt->execute([$key, $value, $value]);
}
function has_permission($action, $page = null, $user_id = null) {
$perms = check_permission($page, $user_id);
return !empty($perms[$action]);
}
if (!function_exists('getStatusColor')) {
function getStatusColor($status) {
return [
'received' => 'secondary',
'processing' => 'primary',
'ready' => 'success',
'delivered' => 'dark',
'cancelled' => 'danger',
][$status] ?? 'info';
}
}
if (!function_exists('getPaymentStatusColor')) {
function getPaymentStatusColor($status) {
return [
'unpaid' => 'danger',
'partially_paid' => 'warning',
'paid' => 'success',
][$status] ?? 'info';
}
}