This commit is contained in:
Flatlogic Bot 2025-11-03 03:42:58 +00:00
parent c8641b65f7
commit d51486c0fb
4 changed files with 561 additions and 83 deletions

368
admin.php Normal file
View File

@ -0,0 +1,368 @@
<?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>

145
index.php
View File

@ -1,16 +1,40 @@
<?php
require_once 'db/config.php';
// --- Data Fetching ---
$pdo = db();
// Fetch Tour Packages from DB
$tour_packages = $pdo->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);
}
?>
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Transport Rental Tour Travel</title>
<meta name="description" content="Sistem Manajemen Transportasi, Rental Kendaraan, dan Paket Wisata di Jawa Timur.">
<meta name="keywords" content="rental mobil jawa timur, sewa mobil surabaya, paket wisata bromo, tour travel malang, sewa bus pariwisata, travel jawa timur, wisata kawah ijen, flatlogic generator">
<meta property="og:title" content="Transport Rental Tour Travel">
<meta property="og:description" content="Sistem Manajemen Transportasi, Rental Kendaraan, dan Paket Wisata di Jawa Timur.">
<title>JatimTour - Rental Transport & Paket Wisata Jawa Timur</title>
<meta name="description" content="JatimTour menyediakan layanan rental mobil, sewa bus pariwisata, dan paket wisata terbaik di Jawa Timur. Jelajahi Bromo, Ijen, Malang, dan lainnya bersama kami.">
<meta name="keywords" content="rental mobil jawa timur, sewa mobil surabaya, paket wisata bromo, tour travel malang, sewa bus pariwisata, travel jawa timur, wisata kawah ijen, flatlogic">
<meta property="og:title" content="JatimTour - Rental Transport & Paket Wisata Jawa Timur">
<meta property="og:description" content="Layanan profesional untuk rental kendaraan dan paket wisata di seluruh Jawa Timur.">
<meta property="og:image" content="<?php echo htmlspecialchars($_SERVER['PROJECT_IMAGE_URL'] ?? ''); ?>">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="<?php echo htmlspecialchars($_SERVER['PROJECT_IMAGE_URL'] ?? ''); ?>">
<?php if (file_exists('assets/images/favicon.png')): ?>
<link rel="icon" href="assets/images/favicon.png?v=<?php echo time(); ?>">
<?php endif; ?>
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
@ -26,64 +50,16 @@
</head>
<body>
<?php
// --- Data Placeholder ---
// Ganti nomor WhatsApp di bawah ini dengan nomor Admin/Operator Anda.
$admin_whatsapp_number = '6281234567890'; // Format internasional tanpa '+' atau '0' di depan
$tour_packages = [
[
'name' => '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);
}
?>
<!-- Header -->
<nav class="navbar navbar-expand-lg navbar-light bg-white fixed-top shadow-sm">
<div class="container">
<a class="navbar-brand fw-bold text-primary" href="#">JatimTour</a>
<a class="navbar-brand fw-bold text-primary" href="#">
<?php if (file_exists('assets/images/logo.png')): ?>
<img src="assets/images/logo.png?v=<?php echo time(); ?>" alt="JatimTour Logo" style="height: 40px;">
<?php else: ?>
JatimTour
<?php endif; ?>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
@ -92,6 +68,7 @@
<li class="nav-item"><a class="nav-link active" href="#hero">Beranda</a></li>
<li class="nav-item"><a class="nav-link" href="#tours">Paket Wisata</a></li>
<li class="nav-item"><a class="nav-link" href="#rentals">Rental Kendaraan</a></li>
<li class="nav-item"><a class="nav-link" href="login.php">Admin Login</a></li>
<li class="nav-item"><a class="nav-link btn btn-primary text-white ms-lg-2" href="<?php echo generate_whatsapp_link($admin_whatsapp_number, 'layanan JatimTour'); ?>">Hubungi Kami</a></li>
</ul>
</div>
@ -112,39 +89,65 @@
<section id="tours" class="py-5">
<h2 class="text-center fw-bold mb-4">Paket Wisata Populer</h2>
<div class="row g-4">
<?php if (empty($tour_packages)): ?>
<div class="col-12 text-center">
<p>Saat ini belum ada paket wisata yang tersedia. Silakan cek kembali nanti.</p>
</div>
<?php else: ?>
<?php foreach ($tour_packages as $package): ?>
<div class="col-lg-4 col-md-6">
<div class="card h-100 shadow-sm border-0 tour-card">
<img src="<?php echo htmlspecialchars($package['image']); ?>" class="card-img-top" alt="<?php echo htmlspecialchars($package['name']); ?>">
<?php
$image_path = !empty($package['gambar']) && file_exists($package['gambar'])
? htmlspecialchars($package['gambar'])
: 'https://via.placeholder.com/400x300.png?text=JatimTour'; // Fallback image
?>
<img src="<?php echo $image_path; ?>" class="card-img-top" alt="<?php echo htmlspecialchars($package['nama']); ?>">
<div class="card-body d-flex flex-column">
<h5 class="card-title fw-bold"><?php echo htmlspecialchars($package['name']); ?></h5>
<p class="card-text flex-grow-1"><?php echo htmlspecialchars($package['description']); ?></p>
<p class="card-text fw-bold text-primary"><?php echo htmlspecialchars($package['price']); ?></p>
<a href="<?php echo generate_whatsapp_link($admin_whatsapp_number, $package['name']); ?>" class="btn btn-success mt-auto w-100"><i class="bi bi-whatsapp me-2"></i>Pesan via WhatsApp</a>
<h5 class="card-title fw-bold"><?php echo htmlspecialchars($package['nama']); ?></h5>
<p class="card-text flex-grow-1"><?php echo nl2br(htmlspecialchars($package['deskripsi'])); ?></p>
<p class="card-text fw-bold text-primary">Rp <?php echo number_format($package['harga'], 0, ',', '.'); ?> / orang</p>
<p class="card-text"><small class="text-muted"><?php echo htmlspecialchars($package['durasi']); ?></small></p>
<a href="<?php echo generate_whatsapp_link($admin_whatsapp_number, $package['nama']); ?>" class="btn btn-success mt-auto w-100"><i class="bi bi-whatsapp me-2"></i>Pesan via WhatsApp</a>
</div>
</div>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</section>
<!-- Rental Kendaraan Section -->
<section id="rentals" class="py-5">
<section id="rentals" class="py-5 bg-light rounded-3">
<h2 class="text-center fw-bold mb-4">Pilihan Kendaraan</h2>
<div class="row g-4">
<?php if (empty($rental_vehicles)): ?>
<div class="col-12 text-center">
<p>Saat ini belum ada kendaraan yang tersedia untuk disewa.</p>
</div>
<?php else: ?>
<?php foreach ($rental_vehicles as $vehicle): ?>
<div class="col-lg-4 col-md-6">
<div class="card h-100 shadow-sm border-0 tour-card">
<img src="<?php echo htmlspecialchars($vehicle['image']); ?>" class="card-img-top" alt="<?php echo htmlspecialchars($vehicle['name']); ?>">
<?php
$image_path = !empty($vehicle['gambar']) && file_exists($vehicle['gambar'])
? htmlspecialchars($vehicle['gambar'])
: 'https://via.placeholder.com/400x300.png?text=JatimTour'; // Fallback image
?>
<img src="<?php echo $image_path; ?>" class="card-img-top" alt="<?php echo htmlspecialchars($vehicle['nama']); ?>">
<div class="card-body d-flex flex-column">
<h5 class="card-title fw-bold"><?php echo htmlspecialchars($vehicle['name']); ?></h5>
<p class="card-text flex-grow-1"><?php echo htmlspecialchars($vehicle['description']); ?></p>
<p class="card-text fw-bold text-primary"><?php echo htmlspecialchars($vehicle['price']); ?></p>
<a href="<?php echo generate_whatsapp_link($admin_whatsapp_number, 'Rental ' . $vehicle['name']); ?>" class="btn btn-success mt-auto w-100"><i class="bi bi-whatsapp me-2"></i>Pesan via WhatsApp</a>
<h5 class="card-title fw-bold"><?php echo htmlspecialchars($vehicle['nama']); ?></h5>
<div class="d-flex justify-content-between text-muted small mb-2">
<span><i class="bi bi-car-front-fill me-1"></i> <?php echo htmlspecialchars($vehicle['jenis']); ?></span>
<span><i class="bi bi-gear-fill me-1"></i> <?php echo htmlspecialchars($vehicle['transmisi']); ?></span>
</div>
<p class="card-text fw-bold text-primary fs-5">Rp <?php echo number_format($vehicle['harga'], 0, ',', '.'); ?> / hari</p>
<a href="<?php echo generate_whatsapp_link($admin_whatsapp_number, 'Rental ' . $vehicle['nama']); ?>" class="btn btn-success mt-auto w-100"><i class="bi bi-whatsapp me-2"></i>Pesan via WhatsApp</a>
</div>
</div>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</section>
</main>

87
login.php Normal file
View File

@ -0,0 +1,87 @@
<?php
session_start();
// Hardcoded credentials for simplicity
define('ADMIN_USERNAME', 'admin');
define('ADMIN_PASSWORD', 'password');
$error_message = '';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
if ($username === ADMIN_USERNAME && $password === ADMIN_PASSWORD) {
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $username;
header('Location: admin.php');
exit;
} else {
$error_message = 'Username atau password salah.';
}
}
// If user is already logged in, redirect to admin page
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] === true) {
header('Location: admin.php');
exit;
}
?>
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login Admin - Juanda Rent & Tour</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">
<style>
body {
background-color: #f8f9fa;
}
.login-container {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.login-card {
max-width: 400px;
width: 100%;
padding: 2rem;
border: none;
border-radius: 0.75rem;
box-shadow: 0 0.5rem 1.5rem rgba(0,0,0,0.1);
}
</style>
</head>
<body>
<div class="login-container">
<div class="card login-card">
<div class="card-body">
<h3 class="card-title text-center mb-4">Admin Login</h3>
<?php if ($error_message): ?>
<div class="alert alert-danger"><?php echo htmlspecialchars($error_message); ?></div>
<?php endif; ?>
<form action="login.php" method="POST">
<div class="mb-3">
<label for="username" class="form-label">Username</label>
<input type="text" class="form-control" id="username" name="username" required>
</div>
<div class="mb-3">
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<div class="d-grid">
<button type="submit" class="btn btn-primary">Login</button>
</div>
</form>
<div class="text-center mt-3">
<a href="index.php">Kembali ke Halaman Utama</a>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

20
logout.php Normal file
View File

@ -0,0 +1,20 @@
<?php
session_start();
// Unset all of the session variables
$_SESSION = [];
// Destroy the session.
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
session_destroy();
// Redirect to login page
header('Location: login.php');
exit;
?>