35432-vm/admin.php
Flatlogic Bot d51486c0fb 2.1a
2025-11-03 03:42:58 +00:00

368 lines
22 KiB
PHP

<?php
session_start();
require_once 'db/config.php';
// If user is not logged in, redirect to login page
if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
header('Location: login.php');
exit;
}
$message = '';
$pdo = db();
// --- State Variables ---
$edit_mode_paket = false;
$paket_to_edit = null;
$edit_mode_kendaraan = false;
$kendaraan_to_edit = null;
// --- DATABASE SCHEMA SETUP ---
try {
// Paket Wisata Table
$pdo->exec("CREATE TABLE IF NOT EXISTS paket_wisata (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(255) NOT NULL,
deskripsi TEXT,
durasi VARCHAR(100),
harga INT NOT NULL,
gambar VARCHAR(255)
)");
// Kendaraan Table
$pdo->exec("CREATE TABLE IF NOT EXISTS kendaraan (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(255) NOT NULL,
jenis VARCHAR(100),
transmisi VARCHAR(50),
harga INT NOT NULL,
status VARCHAR(50) DEFAULT 'Tersedia',
gambar VARCHAR(255)
)");
} catch (PDOException $e) {
die("Error creating table: " . $e->getMessage());
}
// --- HANDLE ACTIONS (DELETE & EDIT) ---
if (isset($_GET['action'])) {
$action = $_GET['action'];
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
// Paket Wisata Actions
if ($action == 'delete_paket' && $id > 0) {
$stmt = $pdo->prepare("SELECT gambar FROM paket_wisata WHERE id = ?");
$stmt->execute([$id]);
$item = $stmt->fetch();
if ($item && !empty($item['gambar']) && file_exists($item['gambar'])) {
unlink($item['gambar']);
}
$stmt = $pdo->prepare("DELETE FROM paket_wisata WHERE id = ?");
if ($stmt->execute([$id])) {
$message .= '<div class="alert alert-success">Paket wisata berhasil dihapus.</div>';
}
} elseif ($action == 'edit_paket' && $id > 0) {
$stmt = $pdo->prepare("SELECT * FROM paket_wisata WHERE id = ?");
$stmt->execute([$id]);
$paket_to_edit = $stmt->fetch();
if ($paket_to_edit) $edit_mode_paket = true;
}
// Kendaraan Actions
if ($action == 'delete_kendaraan' && $id > 0) {
$stmt = $pdo->prepare("SELECT gambar FROM kendaraan WHERE id = ?");
$stmt->execute([$id]);
$item = $stmt->fetch();
if ($item && !empty($item['gambar']) && file_exists($item['gambar'])) {
unlink($item['gambar']);
}
$stmt = $pdo->prepare("DELETE FROM kendaraan WHERE id = ?");
if ($stmt->execute([$id])) {
$message .= '<div class="alert alert-success">Kendaraan berhasil dihapus.</div>';
}
} elseif ($action == 'edit_kendaraan' && $id > 0) {
$stmt = $pdo->prepare("SELECT * FROM kendaraan WHERE id = ?");
$stmt->execute([$id]);
$kendaraan_to_edit = $stmt->fetch();
if ($kendaraan_to_edit) $edit_mode_kendaraan = true;
}
}
// --- FORM PROCESSING (ADD, UPDATE, LOGO) ---
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$upload_dir = 'assets/images/';
$allowed_types = ['image/png', 'image/jpeg', 'image/gif', 'image/x-icon'];
$action = $_POST['action'] ?? '';
// Handle Logo Upload
if ($action == 'upload_logo') {
if (isset($_FILES['main_logo']) && $_FILES['main_logo']['error'] == 0) {
if (in_array($_FILES['main_logo']['type'], $allowed_types)) {
if (move_uploaded_file($_FILES['main_logo']['tmp_name'], $upload_dir . 'logo.png')) {
$message .= '<div class="alert alert-success">Logo utama berhasil diunggah.</div>';
}
}
}
if (isset($_FILES['logo_icon']) && $_FILES['logo_icon']['error'] == 0) {
if (in_array($_FILES['logo_icon']['type'], $allowed_types)) {
if (move_uploaded_file($_FILES['logo_icon']['tmp_name'], $upload_dir . 'favicon.png')) {
$message .= '<div class="alert alert-success">Ikon logo berhasil diunggah.</div>';
}
}
}
}
// Handle Add/Update Tour Package
if (in_array($action, ['add_paket', 'update_paket'])) {
$nama = $_POST['nama'] ?? '';
$harga = $_POST['harga'] ?? 0;
$id = isset($_POST['id']) ? (int)$_POST['id'] : 0;
if (!empty($nama) && $harga > 0) {
$deskripsi = $_POST['deskripsi'] ?? '';
$durasi = $_POST['durasi'] ?? '';
$gambar = $_POST['gambar_existing'] ?? '';
if (isset($_FILES['gambar']) && $_FILES['gambar']['error'] == 0) {
if ($id > 0 && !empty($gambar) && file_exists($gambar)) unlink($gambar);
$img_name = time() . '_' . basename($_FILES['gambar']['name']);
$img_path = $upload_dir . $img_name;
if (move_uploaded_file($_FILES['gambar']['tmp_name'], $img_path)) $gambar = $img_path;
}
if ($action == 'add_paket') {
$stmt = $pdo->prepare("INSERT INTO paket_wisata (nama, deskripsi, durasi, harga, gambar) VALUES (?, ?, ?, ?, ?)");
if ($stmt->execute([$nama, $deskripsi, $durasi, $harga, $gambar])) $message .= '<div class="alert alert-success">Paket wisata berhasil ditambahkan.</div>';
} elseif ($action == 'update_paket' && $id > 0) {
$stmt = $pdo->prepare("UPDATE paket_wisata SET nama = ?, deskripsi = ?, durasi = ?, harga = ?, gambar = ? WHERE id = ?");
if ($stmt->execute([$nama, $deskripsi, $durasi, $harga, $gambar, $id])) $message .= '<div class="alert alert-success">Paket wisata berhasil diperbarui.</div>';
}
} else {
$message .= '<div class="alert alert-warning">Nama dan Harga wajib diisi.</div>';
}
}
// Handle Add/Update Kendaraan
if (in_array($action, ['add_kendaraan', 'update_kendaraan'])) {
$nama = $_POST['nama_kendaraan'] ?? '';
$harga = $_POST['harga_kendaraan'] ?? 0;
$id = isset($_POST['id_kendaraan']) ? (int)$_POST['id_kendaraan'] : 0;
if (!empty($nama) && $harga > 0) {
$jenis = $_POST['jenis_kendaraan'] ?? '';
$transmisi = $_POST['transmisi_kendaraan'] ?? '';
$status = $_POST['status_kendaraan'] ?? 'Tersedia';
$gambar = $_POST['gambar_kendaraan_existing'] ?? '';
if (isset($_FILES['gambar_kendaraan']) && $_FILES['gambar_kendaraan']['error'] == 0) {
if ($id > 0 && !empty($gambar) && file_exists($gambar)) unlink($gambar);
$img_name = 'kendaraan_' . time() . '_' . basename($_FILES['gambar_kendaraan']['name']);
$img_path = $upload_dir . $img_name;
if (move_uploaded_file($_FILES['gambar_kendaraan']['tmp_name'], $img_path)) $gambar = $img_path;
}
if ($action == 'add_kendaraan') {
$stmt = $pdo->prepare("INSERT INTO kendaraan (nama, jenis, transmisi, harga, status, gambar) VALUES (?, ?, ?, ?, ?, ?)");
if ($stmt->execute([$nama, $jenis, $transmisi, $harga, $status, $gambar])) $message .= '<div class="alert alert-success">Kendaraan berhasil ditambahkan.</div>';
} elseif ($action == 'update_kendaraan' && $id > 0) {
$stmt = $pdo->prepare("UPDATE kendaraan SET nama = ?, jenis = ?, transmisi = ?, harga = ?, status = ?, gambar = ? WHERE id = ?");
if ($stmt->execute([$nama, $jenis, $transmisi, $harga, $status, $gambar, $id])) $message .= '<div class="alert alert-success">Kendaraan berhasil diperbarui.</div>';
}
} else {
$message .= '<div class="alert alert-warning">Nama dan Harga Kendaraan wajib diisi.</div>';
}
}
// To prevent re-submission on refresh, we redirect.
if ($_SERVER["REQUEST_METHOD"] == "POST") {
header("Location: admin.php");
exit;
}
}
// Fetch all data
$paket_wisata = $pdo->query("SELECT * FROM paket_wisata ORDER BY id DESC")->fetchAll();
$kendaraan = $pdo->query("SELECT * FROM kendaraan ORDER BY id DESC")->fetchAll();
?>
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Admin Dashboard - JatimTour</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="assets/css/custom.css">
<?php if (file_exists('assets/images/favicon.png')): ?>
<link rel="icon" href="assets/images/favicon.png?v=<?php echo time(); ?>">
<?php endif; ?>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark sticky-top">
<div class="container">
<a class="navbar-brand" href="admin.php">
<?php if (file_exists('assets/images/logo.png')): ?>
<img src="assets/images/logo.png?v=<?php echo time(); ?>" alt="Logo" style="height: 30px;">
<?php else: ?>
Admin Dashboard
<?php endif; ?>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item"><span class="navbar-text me-3">Selamat datang, <strong><?php echo htmlspecialchars($_SESSION['username']); ?></strong></span></li>
<li class="nav-item"><a class="btn btn-danger" href="logout.php">Logout</a></li>
</ul>
</div>
</div>
</nav>
<div class="container py-5">
<?php echo $message; ?>
<div class="row g-5">
<!-- Main Content -->
<div class="col-lg-8">
<!-- Manajemen Paket Wisata -->
<div class="mb-5" id="manajemen-paket">
<h2 class="mb-4">Manajemen Paket Wisata</h2>
<div class="card mb-4">
<div class="card-header"><h5 class="card-title mb-0"><?php echo $edit_mode_paket ? 'Edit Paket Wisata' : 'Tambah Paket Wisata Baru'; ?></h5></div>
<div class="card-body">
<form action="admin.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="action" value="<?php echo $edit_mode_paket ? 'update_paket' : 'add_paket'; ?>">
<?php if ($edit_mode_paket): ?>
<input type="hidden" name="id" value="<?php echo $paket_to_edit['id']; ?>">
<input type="hidden" name="gambar_existing" value="<?php echo htmlspecialchars($paket_to_edit['gambar']); ?>">
<?php endif; ?>
<div class="row g-3">
<div class="col-md-6"><label for="nama" class="form-label">Nama Paket</label><input type="text" class="form-control" id="nama" name="nama" value="<?php echo $edit_mode_paket ? htmlspecialchars($paket_to_edit['nama']) : ''; ?>" required></div>
<div class="col-md-6"><label for="harga" class="form-label">Harga (IDR)</label><input type="number" class="form-control" id="harga" name="harga" value="<?php echo $edit_mode_paket ? $paket_to_edit['harga'] : ''; ?>" required></div>
<div class="col-12"><label for="deskripsi" class="form-label">Deskripsi</label><textarea class="form-control" id="deskripsi" name="deskripsi" rows="3"><?php echo $edit_mode_paket ? htmlspecialchars($paket_to_edit['deskripsi']) : ''; ?></textarea></div>
<div class="col-md-6"><label for="durasi" class="form-label">Durasi</label><input type="text" class="form-control" id="durasi" name="durasi" value="<?php echo $edit_mode_paket ? htmlspecialchars($paket_to_edit['durasi']) : ''; ?>"></div>
<div class="col-md-6"><label for="gambar" class="form-label">Gambar <?php echo $edit_mode_paket ? '(Opsional)' : ''; ?></label><input class="form-control" type="file" id="gambar" name="gambar" accept="image/png, image/jpeg"></div>
<div class="col-12"><button type="submit" class="btn btn-primary"><?php echo $edit_mode_paket ? 'Update Paket' : 'Tambah Paket'; ?></button>
<?php if ($edit_mode_paket): ?><a href="admin.php" class="btn btn-secondary">Batal</a><?php endif; ?></div>
</div>
</form>
</div>
</div>
<div class="card">
<div class="card-header"><h5 class="card-title mb-0">Daftar Paket Wisata</h5></div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped align-middle">
<thead><tr><th>Gambar</th><th>Nama</th><th>Harga</th><th>Durasi</th><th>Aksi</th></tr></thead>
<tbody>
<?php if (empty($paket_wisata)): ?>
<tr><td colspan="5" class="text-center">Belum ada paket wisata.</td></tr>
<?php else: foreach ($paket_wisata as $paket): ?>
<tr>
<td><img src="<?php echo htmlspecialchars($paket['gambar']); ?>?v=<?php echo time(); ?>" style="width: 100px;"></td>
<td><?php echo htmlspecialchars($paket['nama']); ?></td>
<td>Rp <?php echo number_format($paket['harga'], 0, ',', '.'); ?></td>
<td><?php echo htmlspecialchars($paket['durasi']); ?></td>
<td>
<a href="admin.php?action=edit_paket&id=<?php echo $paket['id']; ?>#manajemen-paket" class="btn btn-sm btn-warning">Edit</a>
<a href="admin.php?action=delete_paket&id=<?php echo $paket['id']; ?>" class="btn btn-sm btn-danger" onclick="return confirm('Yakin hapus paket ini?');">Hapus</a>
</td>
</tr>
<?php endforeach; endif; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- Manajemen Kendaraan -->
<div id="manajemen-kendaraan">
<h2 class="mb-4">Manajemen Kendaraan</h2>
<div class="card mb-4">
<div class="card-header"><h5 class="card-title mb-0"><?php echo $edit_mode_kendaraan ? 'Edit Kendaraan' : 'Tambah Kendaraan Baru'; ?></h5></div>
<div class="card-body">
<form action="admin.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="action" value="<?php echo $edit_mode_kendaraan ? 'update_kendaraan' : 'add_kendaraan'; ?>">
<?php if ($edit_mode_kendaraan): ?>
<input type="hidden" name="id_kendaraan" value="<?php echo $kendaraan_to_edit['id']; ?>">
<input type="hidden" name="gambar_kendaraan_existing" value="<?php echo htmlspecialchars($kendaraan_to_edit['gambar']); ?>">
<?php endif; ?>
<div class="row g-3">
<div class="col-md-6"><label for="nama_kendaraan" class="form-label">Nama Kendaraan</label><input type="text" class="form-control" id="nama_kendaraan" name="nama_kendaraan" value="<?php echo $edit_mode_kendaraan ? htmlspecialchars($kendaraan_to_edit['nama']) : ''; ?>" required></div>
<div class="col-md-6"><label for="harga_kendaraan" class="form-label">Harga / Hari (IDR)</label><input type="number" class="form-control" id="harga_kendaraan" name="harga_kendaraan" value="<?php echo $edit_mode_kendaraan ? $kendaraan_to_edit['harga'] : ''; ?>" required></div>
<div class="col-md-6"><label for="jenis_kendaraan" class="form-label">Jenis (e.g., MPV, SUV)</label><input type="text" class="form-control" id="jenis_kendaraan" name="jenis_kendaraan" value="<?php echo $edit_mode_kendaraan ? htmlspecialchars($kendaraan_to_edit['jenis']) : ''; ?>"></div>
<div class="col-md-6"><label for="transmisi_kendaraan" class="form-label">Transmisi</label>
<select class="form-select" id="transmisi_kendaraan" name="transmisi_kendaraan">
<option <?php if($edit_mode_kendaraan && $kendaraan_to_edit['transmisi'] == 'Manual') echo 'selected'; ?>>Manual</option>
<option <?php if($edit_mode_kendaraan && $kendaraan_to_edit['transmisi'] == 'Matic') echo 'selected'; ?>>Matic</option>
</select>
</div>
<div class="col-md-6"><label for="status_kendaraan" class="form-label">Status</label>
<select class="form-select" id="status_kendaraan" name="status_kendaraan">
<option <?php if($edit_mode_kendaraan && $kendaraan_to_edit['status'] == 'Tersedia') echo 'selected'; ?>>Tersedia</option>
<option <?php if($edit_mode_kendaraan && $kendaraan_to_edit['status'] == 'Disewa') echo 'selected'; ?>>Disewa</option>
</select>
</div>
<div class="col-md-6"><label for="gambar_kendaraan" class="form-label">Gambar <?php echo $edit_mode_kendaraan ? '(Opsional)' : ''; ?></label><input class="form-control" type="file" id="gambar_kendaraan" name="gambar_kendaraan" accept="image/png, image/jpeg"></div>
<div class="col-12">
<button type="submit" class="btn btn-primary"><?php echo $edit_mode_kendaraan ? 'Update Kendaraan' : 'Tambah Kendaraan'; ?></button>
<?php if ($edit_mode_kendaraan): ?><a href="admin.php#manajemen-kendaraan" class="btn btn-secondary">Batal</a><?php endif; ?>
</div>
</div>
</form>
</div>
</div>
<div class="card">
<div class="card-header"><h5 class="card-title mb-0">Daftar Kendaraan</h5></div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped align-middle">
<thead><tr><th>Gambar</th><th>Nama</th><th>Jenis</th><th>Harga/Hari</th><th>Status</th><th>Aksi</th></tr></thead>
<tbody>
<?php if (empty($kendaraan)): ?>
<tr><td colspan="6" class="text-center">Belum ada kendaraan.</td></tr>
<?php else: foreach ($kendaraan as $mobil): ?>
<tr>
<td><img src="<?php echo htmlspecialchars($mobil['gambar']); ?>?v=<?php echo time(); ?>" style="width: 100px;"></td>
<td><?php echo htmlspecialchars($mobil['nama']); ?></td>
<td><?php echo htmlspecialchars($mobil['jenis']); ?></td>
<td>Rp <?php echo number_format($mobil['harga'], 0, ',', '.'); ?></td>
<td><span class="badge bg-<?php echo $mobil['status'] == 'Tersedia' ? 'success' : 'warning'; ?>"><?php echo htmlspecialchars($mobil['status']); ?></span></td>
<td>
<a href="admin.php?action=edit_kendaraan&id=<?php echo $mobil['id']; ?>#manajemen-kendaraan" class="btn btn-sm btn-warning">Edit</a>
<a href="admin.php?action=delete_kendaraan&id=<?php echo $mobil['id']; ?>" class="btn btn-sm btn-danger" onclick="return confirm('Anda yakin ingin menghapus kendaraan ini?');">Hapus</a>
</td>
</tr>
<?php endforeach; endif; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<!-- Sidebar -->
<div class="col-lg-4">
<div class="card">
<div class="card-header"><h5 class="card-title mb-0">Pengaturan Logo</h5></div>
<div class="card-body">
<form action="admin.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="action" value="upload_logo">
<div class="mb-3"><label for="main_logo" class="form-label">Logo Utama</label><input class="form-control" type="file" id="main_logo" name="main_logo" accept="image/png, image/jpeg"></div>
<div class="mb-3"><label for="logo_icon" class="form-label">Favicon</label><input class="form-control" type="file" id="logo_icon" name="logo_icon" accept="image/png, image/x-icon"></div>
<button type="submit" class="btn btn-primary w-100">Simpan Logo</button>
</form>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>