Files
webgis-poverty-mapping/dashboard.php
T
2026-06-09 12:25:15 +00:00

156 lines
8.5 KiB
PHP

<?php
// 1. Pastikan session_start dipanggil hanya SEKALI di paling atas
session_start();
// Debug: Jika sesi kosong, kita perlu tahu kenapa
if (!isset($_SESSION['user_id'])) {
// Jika tidak ada user_id, coba cek apakah ada data lain di session
if (empty($_SESSION)) {
// Jika benar-benar kosong, arahkan ke login
header("Location: login.php");
exit;
}
}
include 'auth.php';
include 'koneksi.php';
$role = getUserRole();
$nama = getUserNama();
$isAdmin = isAdminPemerintah();
// Ambil statistik
$totalIbadah = 0; $totalPenduduk = 0; $totalTercakup = 0; $totalBelum = 0;
$q1 = mysqli_query($conn, "SELECT COUNT(*) as c FROM tabel_ibadah");
if($q1) $totalIbadah = mysqli_fetch_assoc($q1)['c'];
$q2 = mysqli_query($conn, "SELECT COUNT(*) as c FROM tabel_penduduk");
if($q2) $totalPenduduk = mysqli_fetch_assoc($q2)['c'];
$q3 = mysqli_query($conn, "SELECT COUNT(*) as c FROM tabel_penduduk WHERE status_warna='Hijau'");
if($q3) $totalTercakup = mysqli_fetch_assoc($q3)['c'];
$totalBelum = $totalPenduduk - $totalTercakup;
// Untuk admin ibadah, ambil nama rumah ibadah miliknya
$namaIbadah = '-';
if (isAdminIbadah() && getUserIbadahId() > 0) {
$idIb = getUserIbadahId();
$qIb = mysqli_query($conn, "SELECT nama_ibadah FROM tabel_ibadah WHERE id=$idIb");
if ($qIb && mysqli_num_rows($qIb) > 0) {
$namaIbadah = mysqli_fetch_assoc($qIb)['nama_ibadah'];
}
}
$roleLabel = $isAdmin ? 'Admin Pemerintah' : 'Admin Rumah Ibadah';
?>
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dashboard — WebGIS Poverty Mapping</title>
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;600;700;800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.1/font/bootstrap-icons.css">
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
body{font-family:'Plus Jakarta Sans',sans-serif;background:#0b132b;color:#fff;min-height:100vh}
.topbar{background:rgba(14,23,44,0.9);backdrop-filter:blur(16px);border-bottom:1px solid rgba(255,255,255,0.06);padding:16px 32px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100}
.topbar-brand{display:flex;align-items:center;gap:12px}
.topbar-logo{width:40px;height:40px;border-radius:12px;background:linear-gradient(135deg,#5bc0be,#3a506b);display:flex;align-items:center;justify-content:center;font-size:1.1rem}
.topbar-brand h2{font-size:1rem;font-weight:800;letter-spacing:-0.3px}
.topbar-right{display:flex;align-items:center;gap:16px}
.user-info{text-align:right}
.user-info .uname{font-size:0.85rem;font-weight:700}
.user-info .urole{font-size:0.68rem;color:#5bc0be;text-transform:uppercase;letter-spacing:1px}
.btn-logout{background:rgba(231,76,60,0.12);border:1px solid rgba(231,76,60,0.3);color:#e74c3c;padding:10px 18px;border-radius:10px;font-size:0.8rem;font-weight:700;font-family:inherit;cursor:pointer;transition:all .3s;text-decoration:none;display:flex;align-items:center;gap:8px}
.btn-logout:hover{background:#e74c3c;color:#fff}
.container{max-width:1100px;margin:0 auto;padding:32px 24px}
.welcome{margin-bottom:32px}
.welcome h1{font-size:1.6rem;font-weight:800;margin-bottom:6px}
.welcome p{color:#78909c;font-size:0.88rem}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:36px}
.stat{background:rgba(14,23,44,0.7);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,0.06);border-radius:16px;padding:22px 24px;transition:transform .3s}
.stat:hover{transform:translateY(-3px)}
.stat-icon{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:1.2rem;margin-bottom:14px}
.stat-icon.ib{background:rgba(91,192,190,0.15);color:#5bc0be}
.stat-icon.pd{background:rgba(243,156,18,0.15);color:#f39c12}
.stat-icon.ok{background:rgba(46,204,113,0.15);color:#2ecc71}
.stat-icon.no{background:rgba(231,76,60,0.15);color:#e74c3c}
.stat .val{font-size:2rem;font-weight:800;line-height:1}
.stat .lbl{font-size:0.7rem;color:#78909c;text-transform:uppercase;letter-spacing:1px;margin-top:4px}
.nav-title{font-size:0.72rem;font-weight:800;color:#5bc0be;text-transform:uppercase;letter-spacing:2px;margin-bottom:16px}
.nav-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}
.nav-card{background:rgba(14,23,44,0.7);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,0.06);border-radius:16px;padding:24px;text-decoration:none;color:#fff;transition:all .3s;display:flex;align-items:flex-start;gap:16px}
.nav-card:hover{border-color:rgba(91,192,190,0.3);transform:translateY(-3px);box-shadow:0 8px 30px rgba(0,0,0,0.3)}
.nav-card-icon{width:48px;height:48px;border-radius:14px;background:linear-gradient(135deg,#1c2541,#3a506b);display:flex;align-items:center;justify-content:center;font-size:1.3rem;flex-shrink:0;color:#6fffe9}
.nav-card-body h3{font-size:0.95rem;font-weight:700;margin-bottom:4px}
.nav-card-body p{font-size:0.78rem;color:#78909c;line-height:1.5}
.ib-info{background:rgba(91,192,190,0.08);border:1px solid rgba(91,192,190,0.15);border-radius:14px;padding:18px 22px;margin-bottom:32px;display:flex;align-items:center;gap:14px}
.ib-info i{font-size:1.4rem;color:#5bc0be}
.ib-info .ib-det h4{font-size:0.9rem;font-weight:700;margin-bottom:2px}
.ib-info .ib-det p{font-size:0.76rem;color:#78909c}
</style>
</head>
<body>
<div class="topbar">
<div class="topbar-brand">
<div class="topbar-logo"><i class="bi bi-globe-asia-australia"></i></div>
<h2>WebGIS Poverty Mapping</h2>
</div>
<div class="topbar-right">
<div class="user-info">
<div class="uname"><?= htmlspecialchars($nama) ?></div>
<div class="urole"><?= $roleLabel ?></div>
</div>
<a href="logout.php" class="btn-logout"><i class="bi bi-box-arrow-right"></i> Logout</a>
</div>
</div>
<div class="container">
<div class="welcome">
<h1>Selamat Datang, <?= htmlspecialchars($nama) ?>!</h1>
<p>Anda login sebagai <strong><?= $roleLabel ?></strong>. Pilih menu di bawah untuk mulai mengelola data.</p>
</div>
<?php if(isAdminIbadah() && getUserIbadahId() > 0): ?>
<div class="ib-info">
<i class="bi bi-building-fill"></i>
<div class="ib-det">
<h4><?= htmlspecialchars($namaIbadah) ?></h4>
<p>Rumah ibadah yang Anda kelola</p>
</div>
</div>
<?php endif; ?>
<?php if($isAdmin): ?>
<div class="stats">
<div class="stat"><div class="stat-icon ib"><i class="bi bi-building"></i></div><div class="val"><?= $totalIbadah ?></div><div class="lbl">Rumah Ibadah</div></div>
<div class="stat"><div class="stat-icon pd"><i class="bi bi-people-fill"></i></div><div class="val"><?= $totalPenduduk ?></div><div class="lbl">Penduduk Miskin</div></div>
<div class="stat"><div class="stat-icon ok"><i class="bi bi-check-circle-fill"></i></div><div class="val"><?= $totalTercakup ?></div><div class="lbl">Tercakup</div></div>
<div class="stat"><div class="stat-icon no"><i class="bi bi-x-circle-fill"></i></div><div class="val"><?= $totalBelum ?></div><div class="lbl">Belum Tercakup</div></div>
</div>
<?php endif; ?>
<p class="nav-title">Menu Navigasi</p>
<div class="nav-grid">
<?php if($isAdmin): ?>
<a href="index.php" class="nav-card">
<div class="nav-card-icon"><i class="bi bi-map-fill"></i></div>
<div class="nav-card-body"><h3>Peta Utama</h3><p>Kelola data SPBU, jalan, dan parsil tanah pada peta.</p></div>
</a>
<a href="radius.php" class="nav-card">
<div class="nav-card-icon"><i class="bi bi-broadcast-pin"></i></div>
<div class="nav-card-body"><h3>Analisis Radius Bantuan</h3><p>Kelola rumah ibadah, penduduk, dan analisis radius jangkauan.</p></div>
</a>
<?php else: ?>
<a href="radius.php" class="nav-card">
<div class="nav-card-icon"><i class="bi bi-broadcast-pin"></i></div>
<div class="nav-card-body"><h3>Rumah Ibadah Saya</h3><p>Lihat peta, atur radius, dan konfirmasi penyaluran bantuan.</p></div>
</a>
<?php endif; ?>
</div>
</div>
</body>
</html>