diff --git a/admin.php b/admin.php new file mode 100644 index 0000000..c32af56 --- /dev/null +++ b/admin.php @@ -0,0 +1,368 @@ +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 .= '
Paket wisata berhasil dihapus.
'; + } + } 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 .= '
Kendaraan berhasil dihapus.
'; + } + } 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 .= '
Logo utama berhasil diunggah.
'; + } + } + } + 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 .= '
Ikon logo berhasil diunggah.
'; + } + } + } + } + + // 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 .= '
Paket wisata berhasil ditambahkan.
'; + } 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 .= '
Paket wisata berhasil diperbarui.
'; + } + } else { + $message .= '
Nama dan Harga wajib diisi.
'; + } + } + + // 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 .= '
Kendaraan berhasil ditambahkan.
'; + } 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 .= '
Kendaraan berhasil diperbarui.
'; + } + } else { + $message .= '
Nama dan Harga Kendaraan wajib diisi.
'; + } + } + // 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(); + +?> + + + + + + Admin Dashboard - JatimTour + + + + + + + + + +
+ + +
+ +
+ + +
+

Manajemen Paket Wisata

+
+
+
+
+ + + + + +
+
+
+
+
+
+ +
+
+
+
+
+
Daftar Paket Wisata
+
+
+ + + + + + + + + + + + + + + +
GambarNamaHargaDurasiAksi
Belum ada paket wisata.
Rp + Edit + Hapus +
+
+
+
+
+ + +
+

Manajemen Kendaraan

+
+
+
+
+ + + + + +
+
+
+
+
+ +
+
+ +
+
+
+ + Batal +
+
+
+
+
+
+
Daftar Kendaraan
+
+
+ + + + + + + + + + + + + + + + +
GambarNamaJenisHarga/HariStatusAksi
Belum ada kendaraan.
Rp + Edit + Hapus +
+
+
+
+
+ +
+ + +
+
+
Pengaturan Logo
+
+
+ +
+
+ +
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/index.php b/index.php index b04cf3c..fa8157e 100644 --- a/index.php +++ b/index.php @@ -1,16 +1,40 @@ +query("SELECT * FROM paket_wisata ORDER BY id DESC")->fetchAll(); + +// Fetch Vehicles from DB +$rental_vehicles = $pdo->query("SELECT * FROM kendaraan WHERE status = 'Tersedia' ORDER BY id DESC")->fetchAll(); + +// Ganti nomor WhatsApp di bawah ini dengan nomor Admin/Operator Anda. +$admin_whatsapp_number = '6281234567890'; // Format internasional tanpa '+' atau '0' di depan + +// --- Helper Function --- +function generate_whatsapp_link($number, $product_name) { + $text = "Halo, saya tertarik untuk memesan " . $product_name . ". Mohon informasinya."; + return "https://api.whatsapp.com/send?phone=" . $number . "&text=" . urlencode($text); +} +?> - Transport Rental Tour Travel - - - - + JatimTour - Rental Transport & Paket Wisata Jawa Timur + + + + + + + @@ -26,64 +50,16 @@ - 'Bromo Sunrise Adventure', - 'description' => 'Nikmati keindahan matahari terbit di Gunung Bromo, lautan pasir, dan kawah yang menakjubkan.', - 'price' => 'IDR 450.000 / orang', - 'image' => 'assets/images/bromo.jpg' - ], - [ - 'name' => 'Kawah Ijen Blue Fire', - 'description' => 'Saksikan fenomena api biru yang langka di Kawah Ijen dan pemandangan danau kawah yang memesona.', - 'price' => 'IDR 550.000 / orang', - 'image' => 'assets/images/ijen.jpg' - ], - [ - 'name' => 'Malang City Tour', - 'description' => 'Jelajahi spot-spot ikonik di Kota Malang, mulai dari Jodipan, Alun-Alun, hingga kuliner legendaris.', - 'price' => 'IDR 300.000 / orang', - 'image' => 'assets/images/malang.jpg' - ], - ]; - - $rental_vehicles = [ - [ - 'name' => 'Toyota Avanza', - 'description' => 'Kapasitas 6 penumpang, AC, cocok untuk perjalanan keluarga di dalam kota.', - 'price' => 'IDR 400.000 / hari', - 'image' => 'assets/images/avanza.jpg' - ], - [ - 'name' => 'Hiace Commuter', - 'description' => 'Kapasitas 14 penumpang, ideal untuk rombongan wisata dengan kenyamanan ekstra.', - 'price' => 'IDR 1.200.000 / hari', - 'image' => 'assets/images/hiace.jpg' - ], - [ - 'name' => 'Bus Pariwisata', - 'description' => 'Kapasitas 50 penumpang, fasilitas lengkap untuk perjalanan jarak jauh antar kota.', - 'price' => 'IDR 3.000.000 / hari', - 'image' => 'assets/images/bus.jpg' - ], - ]; - - // --- Helper Function --- - function generate_whatsapp_link($number, $product_name) { - $text = "Halo, saya tertarik untuk memesan " . $product_name . ". Mohon informasinya."; - return "https://api.whatsapp.com/send?phone=" . $number . "&text=" . urlencode($text); - } - ?> -