%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
<?php
/**
* Dasbor Panel Admin — ringkasan statistik & permohonan terbaru.
*/
require_once dirname(__DIR__) . '/config/config.php';
require_once dirname(__DIR__) . '/includes/auth.php';
require_once dirname(__DIR__) . '/includes/queries.php';
require_admin();
// ===================================================================
// DASBOR ADMIN UPD (PPID Pembantu) — ter-scope pada unit user.
// ===================================================================
if (is_upd_admin()) {
$upid = (int) current_upd_id();
$cs = db()->prepare(
"SELECT COUNT(*) total,
SUM(status='publish') terbit,
SUM(status='draft') draf,
COALESCE(SUM(downloads),0) unduhan,
COALESCE(SUM(views),0) dilihat
FROM dokumen_informasi WHERE upd_id = ?"
);
$cs->execute([$upid]);
$u = $cs->fetch();
$perKat = db()->prepare(
"SELECT k.nama, k.icon, k.warna, COUNT(d.id) jml
FROM kategori_informasi k
LEFT JOIN dokumen_informasi d ON d.kategori_id = k.id AND d.upd_id = ?
WHERE k.tipe = 'kip'
GROUP BY k.id, k.nama, k.icon, k.warna, k.urutan ORDER BY k.urutan"
);
$perKat->execute([$upid]);
$kategoriRows = $perKat->fetchAll();
$rec = db()->prepare(
"SELECT d.*, k.nama AS kategori_nama
FROM dokumen_informasi d JOIN kategori_informasi k ON k.id = d.kategori_id
WHERE d.upd_id = ? ORDER BY d.created_at DESC LIMIT 6"
);
$rec->execute([$upid]);
$recentDok = $rec->fetchAll();
$pageTitle = 'Dasbor — CMS PPID';
$activeMenu = 'dashboard';
require __DIR__ . '/partials/head.php';
?>
<div class="flex flex-col md:flex-row md:items-center justify-between mb-8 gap-4">
<div>
<h2 class="text-2xl font-bold text-slate-900">Dasbor <?= e(current_upd_nama()) ?></h2>
<p class="text-sm text-slate-500 mt-1">Ringkasan dokumen informasi publik unit Anda (PPID Pembantu).</p>
</div>
<a href="<?= e(url('admin/dokumen-form.php')) ?>" class="bg-mateng-blue hover:bg-sky-700 text-white px-5 py-2.5 rounded-lg text-sm font-semibold transition-all shadow-sm flex items-center gap-2 w-fit">
<i class="fas fa-upload"></i> Unggah Dokumen Baru
</a>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
<?php
$cards = [
['fa-folder-open', 'bg-blue-50 text-mateng-blue', 'Total Dokumen', (int) $u['total']],
['fa-circle-check', 'bg-green-50 text-mateng-green', 'Terbit', (int) $u['terbit']],
['fa-pen-ruler', 'bg-slate-100 text-slate-600', 'Draf', (int) $u['draf']],
['fa-download', 'bg-amber-50 text-mateng-gold', 'Total Unduhan', (int) $u['unduhan']],
];
foreach ($cards as $c): ?>
<div class="bg-white rounded-xl p-5 border border-slate-100 shadow-sm flex items-center gap-4">
<div class="w-12 h-12 rounded-lg <?= $c[1] ?> flex items-center justify-center text-xl"><i class="fas <?= $c[0] ?>"></i></div>
<div><p class="text-sm text-slate-500 font-medium"><?= e($c[2]) ?></p><p class="text-2xl font-bold text-slate-900"><?= number_format($c[3]) ?></p></div>
</div>
<?php endforeach; ?>
</div>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
<!-- Per kategori -->
<div class="bg-white border border-slate-100 rounded-xl shadow-sm p-6">
<h3 class="font-bold text-slate-800 mb-4">Dokumen per Kategori</h3>
<div class="space-y-3">
<?php foreach ($kategoriRows as $k):
$cc = kategori_warna($k['warna']); ?>
<div class="flex items-center gap-3">
<div class="w-9 h-9 rounded-lg <?= $cc['icon_bg'] ?> <?= $cc['icon_text'] ?> flex items-center justify-center"><i class="fas <?= e($k['icon']) ?>"></i></div>
<span class="text-sm text-slate-600 flex-grow"><?= e($k['nama']) ?></span>
<span class="text-sm font-bold text-slate-900"><?= (int) $k['jml'] ?></span>
</div>
<?php endforeach; ?>
</div>
</div>
<!-- Dokumen terbaru unit -->
<div class="lg:col-span-2 bg-white border border-slate-100 rounded-xl shadow-sm overflow-hidden">
<div class="px-6 py-5 border-b border-slate-100 flex items-center justify-between">
<h3 class="font-bold text-slate-800">Dokumen Terbaru Unit</h3>
<a href="<?= e(url('admin/dokumen.php')) ?>" class="text-sm text-mateng-blue hover:underline font-medium">Lihat Semua</a>
</div>
<?php if (empty($recentDok)): ?>
<p class="px-6 py-10 text-center text-slate-400 text-sm"><i class="fas fa-folder-open text-2xl block mb-2"></i>Belum ada dokumen. Mulai unggah dokumen unit Anda.</p>
<?php else: ?>
<div class="divide-y divide-slate-100">
<?php foreach ($recentDok as $d): ?>
<a href="<?= e(url('admin/dokumen-form.php?id=' . $d['id'])) ?>" class="flex items-center gap-3 px-6 py-3.5 hover:bg-slate-50 transition-colors">
<i class="fas <?= !empty($d['file_name']) ? e(file_icon($d['file_original'] ?? '')) : 'fa-file-circle-xmark text-slate-300' ?>"></i>
<div class="flex-grow min-w-0">
<p class="text-sm font-medium text-slate-800 truncate"><?= e($d['judul']) ?></p>
<p class="text-xs text-slate-400"><?= e($d['kategori_nama']) ?> · <?= e(tanggal_id($d['created_at'])) ?></p>
</div>
<?php if ($d['status'] === 'publish'): ?>
<span class="text-xs font-semibold text-mateng-green bg-green-50 px-2 py-1 rounded-full shrink-0">Terbit</span>
<?php else: ?>
<span class="text-xs font-semibold text-slate-500 bg-slate-100 px-2 py-1 rounded-full shrink-0">Draf</span>
<?php endif; ?>
</a>
<?php endforeach; ?>
</div>
<?php endif; ?>
</div>
</div>
<?php
require __DIR__ . '/partials/foot.php';
return;
}
$stats = dashboard_stats();
$ratingStats = testimoni_stats();
$terbaru = db()->query(
"SELECT p.*, k.nama AS kategori_nama
FROM permohonan p
LEFT JOIN kategori_informasi k ON k.id = p.kategori_id
ORDER BY p.created_at DESC LIMIT 5"
)->fetchAll();
$pageTitle = 'Dasbor — CMS PPID';
$activeMenu = 'dashboard';
require __DIR__ . '/partials/head.php';
?>
<div class="flex flex-col md:flex-row md:items-center justify-between mb-8 gap-4">
<div>
<h2 class="text-2xl font-bold text-slate-900">Dasbor Informasi</h2>
<p class="text-sm text-slate-500 mt-1">Ringkasan layanan permohonan informasi publik.</p>
</div>
<a href="<?= e(url('admin/dokumen-form.php')) ?>" class="bg-mateng-blue hover:bg-sky-700 text-white px-5 py-2.5 rounded-lg text-sm font-semibold transition-all shadow-sm flex items-center gap-2 w-fit">
<i class="fas fa-upload"></i> Unggah Dokumen Baru
</a>
</div>
<!-- Kartu statistik -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
<?php
$cards = [
['Total Permohonan', $stats['total'], 'fa-file-invoice', 'bg-blue-50 text-mateng-blue', url('admin/permohonan.php')],
['Menunggu Verifikasi', $stats['verifikasi'], 'fa-hourglass-half', 'bg-yellow-50 text-mateng-gold', url('admin/permohonan.php?status=verifikasi')],
['Sedang Diproses', $stats['diproses'], 'fa-spinner', 'bg-sky-50 text-sky-600', url('admin/permohonan.php?status=diproses')],
['Selesai', $stats['selesai'], 'fa-check-circle', 'bg-green-50 text-mateng-green', url('admin/permohonan.php?status=selesai')],
];
foreach ($cards as $c): ?>
<a href="<?= e($c[4]) ?>" class="bg-white rounded-xl p-5 border border-slate-100 shadow-sm flex items-center gap-4 hover:shadow-md hover:border-slate-200 transition-all">
<div class="w-12 h-12 rounded-lg <?= $c[3] ?> flex items-center justify-center text-xl"><i class="fas <?= $c[2] ?>"></i></div>
<div>
<p class="text-sm text-slate-500 font-medium"><?= e($c[0]) ?></p>
<p class="text-2xl font-bold text-slate-900"><?= number_format($c[1], 0, ',', '.') ?></p>
</div>
</a>
<?php endforeach; ?>
</div>
<!-- Statistik sekunder -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-5 gap-6 mb-8">
<a href="<?= e(url('admin/testimoni.php')) ?>" class="bg-white rounded-xl p-5 border border-slate-100 shadow-sm flex items-center gap-4 hover:shadow-md transition-all">
<div class="w-12 h-12 rounded-lg bg-amber-50 text-mateng-gold flex items-center justify-center text-xl"><i class="fas fa-star"></i></div>
<div><p class="text-sm text-slate-500 font-medium">Rating Rata-rata</p><p class="text-2xl font-bold text-slate-900"><?= number_format($ratingStats['avg'], 1) ?> <span class="text-sm font-normal text-slate-400">/5</span></p></div>
</a>
<div class="bg-white rounded-xl p-5 border border-slate-100 shadow-sm flex items-center gap-4">
<div class="w-12 h-12 rounded-lg bg-slate-100 text-slate-600 flex items-center justify-center text-xl"><i class="fas fa-folder-open"></i></div>
<div><p class="text-sm text-slate-500 font-medium">Dokumen Terbit</p><p class="text-2xl font-bold text-slate-900"><?= number_format($stats['dokumen'], 0, ',', '.') ?></p></div>
</div>
<a href="<?= e(url('admin/keberatan.php')) ?>" class="bg-white rounded-xl p-5 border border-slate-100 shadow-sm flex items-center gap-4 hover:shadow-md transition-all">
<div class="w-12 h-12 rounded-lg bg-red-50 text-red-600 flex items-center justify-center text-xl"><i class="fas fa-gavel"></i></div>
<div><p class="text-sm text-slate-500 font-medium">Keberatan Baru</p><p class="text-2xl font-bold text-slate-900"><?= number_format($stats['keberatan'], 0, ',', '.') ?></p></div>
</a>
<a href="<?= e(url('admin/saran.php')) ?>" class="bg-white rounded-xl p-5 border border-slate-100 shadow-sm flex items-center gap-4 hover:shadow-md transition-all">
<div class="w-12 h-12 rounded-lg bg-amber-50 text-mateng-gold flex items-center justify-center text-xl"><i class="fas fa-comment-dots"></i></div>
<div><p class="text-sm text-slate-500 font-medium">Saran Baru</p><p class="text-2xl font-bold text-slate-900"><?= number_format($stats['saran'], 0, ',', '.') ?></p></div>
</a>
<div class="bg-white rounded-xl p-5 border border-slate-100 shadow-sm flex items-center gap-4">
<div class="w-12 h-12 rounded-lg bg-green-50 text-mateng-green flex items-center justify-center text-xl"><i class="fas fa-chart-line"></i></div>
<div>
<p class="text-sm text-slate-500 font-medium">Tingkat Penyelesaian</p>
<p class="text-2xl font-bold text-slate-900"><?= $stats['total'] > 0 ? round($stats['selesai'] / $stats['total'] * 100) : 0 ?>%</p>
</div>
</div>
</div>
<!-- Tabel permohonan terbaru -->
<div class="bg-white border border-slate-100 rounded-xl shadow-sm overflow-hidden">
<div class="px-6 py-5 border-b border-slate-100 flex items-center justify-between">
<h3 class="font-bold text-lg text-slate-800">Permohonan Terbaru</h3>
<a href="<?= e(url('admin/permohonan.php')) ?>" class="text-sm text-mateng-blue hover:underline font-medium">Lihat Semua</a>
</div>
<div class="overflow-x-auto">
<table class="w-full text-left border-collapse">
<thead>
<tr class="bg-slate-50 text-slate-500 text-xs uppercase tracking-wider">
<th class="px-6 py-4 font-semibold">No. Resi</th>
<th class="px-6 py-4 font-semibold">Nama Pemohon</th>
<th class="px-6 py-4 font-semibold">Kategori Info</th>
<th class="px-6 py-4 font-semibold">Tanggal</th>
<th class="px-6 py-4 font-semibold">Status</th>
<th class="px-6 py-4 font-semibold text-center">Aksi</th>
</tr>
</thead>
<tbody class="text-sm divide-y divide-slate-100 text-slate-700">
<?php if (empty($terbaru)): ?>
<tr><td colspan="6" class="px-6 py-10 text-center text-slate-400">Belum ada permohonan masuk.</td></tr>
<?php else: foreach ($terbaru as $p): ?>
<tr class="hover:bg-slate-50/50 transition-colors">
<td class="px-6 py-4 font-medium text-slate-900"><?= e($p['no_resi']) ?></td>
<td class="px-6 py-4"><?= e($p['nama']) ?></td>
<td class="px-6 py-4"><?= e($p['kategori_nama'] ?? excerpt($p['rincian_informasi'], 30)) ?></td>
<td class="px-6 py-4 whitespace-nowrap"><?= e(tanggal_id($p['created_at'])) ?></td>
<td class="px-6 py-4"><?= badge_status($p['status']) ?></td>
<td class="px-6 py-4 text-center">
<a href="<?= e(url('admin/permohonan-detail.php?id=' . $p['id'])) ?>" class="inline-flex p-2 text-mateng-blue hover:bg-blue-50 rounded-lg transition-colors" title="Proses Permohonan">
<i class="fas fa-eye"></i>
</a>
</td>
</tr>
<?php endforeach; endif; ?>
</tbody>
</table>
</div>
</div>
<?php require __DIR__ . '/partials/foot.php'; ?>