%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
/**
* Halaman Direktori Informasi — informasi publik dikelompokkan per Direktori.
*
* Query string:
* ?dir=slug Filter berdasarkan direktori (kosong = Semua Direktori).
* ?q=kata Kata kunci pencarian.
* ?page=n Paginasi.
*/
require_once __DIR__ . '/config/config.php';
require_once __DIR__ . '/includes/queries.php';
$dirSlug = get_param('dir');
$keyword = get_param('q');
$page = max(1, (int) get_param('page', '1'));
$perPage = 9;
$offset = ($page - 1) * $perPage;
$direktoriList = get_direktori_list();
$jumlahDir = count_dokumen_per_direktori();
$activeDir = $dirSlug ? get_direktori_by_slug($dirSlug) : null;
// Hanya dokumen publish yang terikat ke sebuah direktori.
$where = ["d.status = 'publish'", 'd.direktori_id IS NOT NULL'];
$params = [];
if ($activeDir) {
$where[] = 'd.direktori_id = :dir';
$params[':dir'] = $activeDir['id'];
}
if ($keyword !== '') {
$where[] = '(d.judul LIKE :kw1 OR d.deskripsi LIKE :kw2 OR d.unit_kerja LIKE :kw3)';
$like = '%' . $keyword . '%';
$params[':kw1'] = $like; $params[':kw2'] = $like; $params[':kw3'] = $like;
}
$whereSql = implode(' AND ', $where);
$countStmt = db()->prepare("SELECT COUNT(*) FROM dokumen_informasi d WHERE $whereSql");
$countStmt->execute($params);
$total = (int) $countStmt->fetchColumn();
$totalPages = max(1, (int) ceil($total / $perPage));
$sql = "SELECT d.*, k.nama AS kategori_nama, k.warna, k.icon,
dir.nama AS direktori_nama, dir.slug AS direktori_slug,
u.singkatan AS upd_singkatan, u.nama AS upd_nama
FROM dokumen_informasi d
JOIN kategori_informasi k ON k.id = d.kategori_id
JOIN direktori dir ON dir.id = d.direktori_id
LEFT JOIN upd u ON u.id = d.upd_id
WHERE $whereSql
ORDER BY d.created_at DESC
LIMIT :limit OFFSET :offset";
$stmt = db()->prepare($sql);
foreach ($params as $k => $v) { $stmt->bindValue($k, $v); }
$stmt->bindValue(':limit', $perPage, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$dokumen = $stmt->fetchAll();
$buildUrl = static function (array $o = []) use ($dirSlug, $keyword): string {
$p = array_filter([
'dir' => $o['dir'] ?? $dirSlug,
'q' => $o['q'] ?? $keyword,
'page' => $o['page'] ?? null,
], static fn ($v) => $v !== null && $v !== '');
return url('direktori-informasi.php' . ($p ? '?' . http_build_query($p) : ''));
};
$pageTitle = 'Direktori Informasi' . ($activeDir ? ' — ' . $activeDir['nama'] : '') . ' — ' . APP_NAME_SHORT;
$activeNav = 'layanan';
require __DIR__ . '/partials/head.php';
require __DIR__ . '/partials/navbar.php';
?>
<section class="relative overflow-hidden bg-gradient-to-br from-mateng-green to-mateng-blue text-white py-14">
<?php require __DIR__ . '/partials/sekda-header.php'; ?>
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<nav class="text-sm text-green-100 mb-3">
<a href="<?= e(url('index.php')) ?>" class="hover:underline">Beranda</a><span class="mx-2">/</span>
<span>Layanan Informasi</span>
<?php if ($activeDir): ?><span class="mx-2">/</span><span><?= e($activeDir['nama']) ?></span><?php endif; ?>
</nav>
<h1 class="text-3xl md:text-4xl font-extrabold mb-2"><?= $activeDir ? e($activeDir['nama']) : 'Direktori Informasi' ?></h1>
<p class="text-green-50 max-w-2xl"><?= $activeDir ? e($activeDir['deskripsi'] ?: 'Kumpulan informasi publik pada direktori ' . $activeDir['nama'] . '.') : 'Telusuri informasi publik yang dikelompokkan berdasarkan direktori di lingkungan Pemerintah Kabupaten Mamuju Tengah.' ?></p>
</div>
</section>
<main class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-10 w-full">
<?php if ($activeDir): ?>
<!-- Panel direktori terpilih -->
<div class="bg-white border border-slate-100 rounded-2xl shadow-sm p-6 mb-8 flex flex-col lg:flex-row lg:items-center gap-5">
<div class="w-14 h-14 rounded-2xl bg-gradient-to-br from-mateng-green to-mateng-blue text-white flex items-center justify-center text-xl shadow-md shrink-0"><i class="fas fa-folder-tree"></i></div>
<div class="flex-grow">
<h2 class="font-bold text-slate-900"><?= e($activeDir['nama']) ?></h2>
<?php if (!empty($activeDir['deskripsi'])): ?><p class="text-sm text-slate-500 mt-1"><?= e($activeDir['deskripsi']) ?></p><?php endif; ?>
</div>
<a href="<?= e(url('direktori-informasi.php')) ?>" class="shrink-0 inline-flex items-center gap-2 text-sm font-semibold text-mateng-green hover:underline"><i class="fas fa-arrow-left"></i> Semua Direktori</a>
</div>
<?php endif; ?>
<!-- Filter direktori (dropdown) + pencarian -->
<div class="mb-2">
<div class="flex items-center gap-2 mb-3 text-sm font-semibold text-slate-600"><i class="fas fa-filter text-mateng-green"></i> Saring Direktori</div>
<form method="get" class="flex flex-col md:flex-row md:items-center gap-3">
<div class="relative w-full md:w-96">
<i class="fas fa-folder-tree absolute left-3.5 top-1/2 -translate-y-1/2 text-slate-400"></i>
<select name="dir" onchange="this.form.submit()" class="w-full appearance-none bg-white border border-slate-200 rounded-lg pl-10 pr-10 py-2.5 text-sm font-medium text-slate-700 outline-none focus:border-mateng-green focus:ring-4 focus:ring-mateng-green/10 cursor-pointer">
<option value="">Semua Direktori</option>
<?php foreach ($direktoriList as $dir):
$cnt = $jumlahDir[(int) $dir['id']] ?? 0; ?>
<option value="<?= e($dir['slug']) ?>" <?= $dirSlug === $dir['slug'] ? 'selected' : '' ?>><?= e($dir['nama']) ?> — <?= $cnt ?> dok</option>
<?php endforeach; ?>
</select>
<i class="fas fa-chevron-down absolute right-3.5 top-1/2 -translate-y-1/2 text-slate-400 text-xs pointer-events-none"></i>
</div>
<div class="flex items-center bg-white border border-slate-200 rounded-lg px-3 py-2 focus-within:border-mateng-green transition-colors w-full md:w-72">
<i class="fas fa-search text-slate-400 mr-2"></i>
<input type="text" name="q" value="<?= e($keyword) ?>" placeholder="Cari dokumen..." class="bg-transparent outline-none text-sm w-full text-slate-700">
</div>
<?php if ($dirSlug || $keyword !== ''): ?>
<a href="<?= e(url('direktori-informasi.php')) ?>" class="text-sm text-slate-500 hover:text-mateng-green inline-flex items-center gap-1.5 shrink-0"><i class="fas fa-rotate-left"></i> Reset</a>
<?php endif; ?>
</form>
</div>
<?php if (empty($dokumen)): ?>
<div class="text-center py-20 bg-white rounded-2xl border border-slate-100">
<i class="fas fa-folder-open text-5xl text-slate-300 mb-4"></i>
<p class="text-slate-500 font-medium">Belum ada dokumen pada direktori ini.</p>
</div>
<?php else:
$resultText = '<strong>' . (int) $total . '</strong> dokumen'
. ($activeDir ? ' pada direktori ' . e($activeDir['nama']) : ' dari seluruh direktori')
. ($keyword !== '' ? ' untuk "<strong>' . e($keyword) . '</strong>"' : '');
$accent = 'green';
require __DIR__ . '/partials/dokumen-koleksi.php';
?>
<?php if ($totalPages > 1): ?>
<div class="flex justify-center items-center gap-2 mt-10">
<?php for ($i = 1; $i <= $totalPages; $i++): ?>
<a href="<?= e($buildUrl(['page' => $i])) ?>" class="px-4 py-2 rounded-lg border text-sm font-medium <?= $i === $page ? 'bg-mateng-green text-white border-mateng-green' : 'bg-white text-slate-600 border-slate-200 hover:border-mateng-green' ?>"><?= $i ?></a>
<?php endfor; ?>
</div>
<?php endif; ?>
<?php endif; ?>
</main>
<?php require __DIR__ . '/partials/footer.php'; ?>