Initial commit

This commit is contained in:
Local Administrator
2025-04-18 10:32:42 +02:00
commit b83134aca3
29643 changed files with 3045897 additions and 0 deletions

583
trip-details.php Normal file
View File

@@ -0,0 +1,583 @@
<?php include_once('header02.php');
checkUserSession();
if (!isset($_GET['token']) || empty($_GET['token'])) {
die("Invalid request.");
}
$token = $_GET['token'];
// echo $token;
// Sanitize the trip_id to prevent SQL injection
$trip_id = intval(decryptData($token, $salt)); // Ensures $trip_id is treated as an integer
// Prepare the SQL query
$sql = "SELECT trip_id, trip_name, location, short_description, long_description, start_date, end_date,
vehicle_capacity, cost_members, cost_nonmembers, places_booked, booking_fee
FROM trips
WHERE trip_id = ?";
// Use prepared statements for added security
$stmt = $conn->prepare($sql);
if ($stmt) {
// Bind the parameter
$stmt->bind_param("i", $trip_id);
// Execute the query
$stmt->execute();
// Get the result
$result = $stmt->get_result();
// Check if the trip exists
if ($result->num_rows > 0) {
// Fetch the data
$row = $result->fetch_assoc();
// Populate the variables
$trip_id = $row['trip_id'];
$trip_name = $row['trip_name'];
$location = $row['location'];
$short_description = $row['short_description'];
$long_description = $row['long_description'];
$start_date = $row['start_date'];
$end_date = $row['end_date'];
$capacity = $row['vehicle_capacity'];
$cost_members = $row['cost_members'];
$cost_nonmembers = $row['cost_nonmembers'];
$member_discount = $cost_nonmembers - $cost_members;
$places_booked = $row['places_booked'];
$booking_fee = $row['booking_fee'];
$remaining_places = getAvailableSpaces($trip_id);
// Determine the badge text based on the status
$badge_text = ($remaining_places > 0) ? $remaining_places . ' PLACES LEFT!!' : 'FULLY BOOKED';
// Convert newlines into <br> tags to preserve line breaks
$formatted_description = nl2br($long_description);
// Wrap the text in <p> tags at the beginning and end
$formatted_description = '<p>' . $formatted_description . '</p>';
} else {
echo "No trip found with ID: $trip_id";
}
// Close the statement
$stmt->close();
} else {
echo "Error preparing the statement: " . $conn->error;
}
// Always close the database connection when done
$conn->close();
?>
<style>
.gallery-item {
position: relative;
overflow: hidden;
width: 100%;
padding-top: 66.66%;
border-radius: 10px;
/* This is equivalent to a 3:2 aspect ratio (height/width * 100) */
}
.gallery-item img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
}
.gallery-item-portrait {
position: relative;
overflow: hidden;
width: 100%;
padding-top: 136%;
/* This is equivalent to a 3:2 aspect ratio (height/width * 100) */
}
.allery-item-portrait img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
}
.price-display {
display: block;
/* Ensures each price display is on a new line */
margin-bottom: 8px;
/* Adds space between the two price blocks */
}
.price-wrapper {
display: inline-flex;
align-items: baseline;
/* Align the price and '/per person' on the same baseline */
}
.price {
font-size: 3rem;
font-weight: bold;
margin: 0;
vertical-align: baseline;
}
.per-person {
font-size: 1rem;
margin-left: 8px;
color: #777;
/* Optional: makes '/per person' text softer */
vertical-align: baseline;
}
.non-member .price {
font-size: 1.5rem;
/* Smaller price for non-members */
color: rgb(86, 86, 86);
/* Optional: makes non-member price stand out */
}
</style>
<!-- Page Banner Start -->
<section class="page-banner-two rel z-1">
<div class="container-fluid">
<hr class="mt-0">
<div class="container">
<div class="banner-inner pt-15 pb-25">
<h2 class="page-title mb-10" data-aos="fade-left" data-aos-duration="1500" data-aos-offset="50"><?php echo $trip_name; ?></h2>
<div class="banner-overlay"></div>
<nav aria-label="breadcrumb">
<ol class="breadcrumb justify-content-center mb-20" data-aos="fade-right" data-aos-delay="200" data-aos-duration="1500" data-aos-offset="50">
<li class="breadcrumb-item"><a href="index.html">Home</a></li>
<li class="breadcrumb-item active">Tour Details</li>
</ol>
</nav>
</div>
</div>
</div>
</section>
<!-- Page Banner End -->
<!-- Tour Gallery start -->
<div class="tour-gallery">
<div class="container-fluid">
<div class="row gap-10 justify-content-center rel">
<div class="col-lg-4 col-md-6">
<div class="gallery-item image-landscape">
<img src="assets/images/trips/<?php echo $trip_id; ?>_01.jpg" alt="">
</div>
<div class="gallery-item image-landscape">
<img src="assets/images/trips/<?php echo $trip_id; ?>_02.jpg" alt="">
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="gallery-item gallery-item-portrait image-portrait">
<img src="assets/images/trips/<?php echo $trip_id; ?>_03.jpg" alt="">
</div>
</div>
<div class="col-lg-4 col-md-6">
<div class="gallery-item image-landscape">
<img src="assets/images/trips/<?php echo $trip_id; ?>_04.jpg" alt="">
</div>
<div class="gallery-item image-landscape">
<img src="assets/images/trips/<?php echo $trip_id; ?>_05.jpg" alt="">
</div>
</div>
<!-- <div class="col-lg-12">
<div class="gallery-more-btn">
<a href="contact.html" class="theme-btn style-two bgc-secondary">
<span data-hover="See All Photos">See All Photos</span>
<i class="fal fa-arrow-right"></i>
</a>
</div>
</div> -->
</div>
</div>
</div>
<!-- Tour Gallery End -->
<!-- Tour Header Area start -->
<section class="tour-header-area pt-70 rel z-1">
<div class="container">
<div class="row justify-content-between">
<div class="col-xl-6 col-lg-7">
<div class="tour-header-content mb-15" data-aos="fade-left" data-aos-duration="1500" data-aos-offset="50">
<span class="location d-inline-block mb-10"><i class="fal fa-map-marker-alt"></i> <?php echo $location; ?></span>
<div class="section-title pb-5">
<h2><?php echo $trip_name; ?></h2>
</div>
<div class="ratting">
<i class="fas fa-star"></i>
<i class="fas fa-star"></i>
<i class="fas fa-star"></i>
<i class="fas fa-star"></i>
<i class="fas fa-star-half-alt"></i>
</div>
</div>
<span class="subtitle mb-15"><?php echo $badge_text; ?></span>
</div>
<div class="col-xl-4 col-lg-5 text-lg-end" data-aos="fade-right" data-aos-duration="1500" data-aos-offset="50">
<div class="tour-header-social mb-10">
<a href="#"><i class="far fa-share-alt"></i>Share tours</a>
<a href="#"><i class="fas fa-heart bgc-secondary"></i>Wish list</a>
</div>
</div>
</div>
<hr class="mt-50 mb-70">
</div>
</section>
<!-- Tour Header Area end -->
<!-- Tour Details Area start -->
<section class="tour-details-page pb-100">
<div class="container">
<div class="row">
<div class="col-lg-8">
<div class="tour-details-content">
<h3>Trip Info</h3>
<p><?php echo $formatted_description; ?></p>
<div class="price-display">
<div class="price-wrapper">
<h2 class="price">R <?php echo $cost_members; ?></h2><span class="per-person">/per member</span>
</div>
</div>
<div class="price-display non-member">
<div class="price-wrapper">
<h2 class="price">R <?php echo $cost_nonmembers; ?></h2><span class="per-person">/per non-member</span>
</div>
</div>
<br>
<div class="price-display non-member">
<div class="price-wrapper">
<h2 class="price">R <?php echo $booking_fee; ?></h2><span class="per-person">/club fee per vehicle</span>
</div>
</div>
<div class="row pb-55">
<div class="col-md-6">
<div class="tour-include-exclude mt-30">
<h5>Included and Excluded</h5>
<ul class="list-style-one check mt-25">
<li><i class="far fa-check"></i> Pick and Drop Services</li>
<li><i class="far fa-check"></i> 1 Meal Per Day</li>
<li><i class="far fa-check"></i> Cruise Dinner & Music Event</li>
<li><i class="far fa-check"></i> Visit 7 Best Places in the City</li>
<li><i class="far fa-check"></i> Bottled Water on Buses</li>
<li><i class="far fa-check"></i> Transportation Luxury Tour Bus</li>
</ul>
</div>
</div>
<div class="col-md-6">
<div class="tour-include-exclude mt-30">
<h5>Excluded</h5>
<ul class="list-style-one mt-25">
<li><i class="far fa-times"></i> Gratuities</li>
<li><i class="far fa-times"></i> Hotel pickup and drop-off</li>
<li><i class="far fa-times"></i> Lunch, Food & Drinks</li>
<li><i class="far fa-times"></i> Optional upgrade to a glass</li>
<li><i class="far fa-times"></i> Additional Services</li>
<li><i class="far fa-times"></i> Insurance</li>
</ul>
</div>
</div>
</div>
</div>
<h3>Activities</h3>
<div class="tour-activities mt-30 mb-45">
<div class="tour-activity-item">
<i class="flaticon-hiking"></i>
<b>Hiking</b>
</div>
<div class="tour-activity-item">
<i class="flaticon-fishing"></i>
<b>Fishing</b>
</div>
<div class="tour-activity-item">
<i class="flaticon-man"></i>
<b>Kayak shooting</b>
</div>
<div class="tour-activity-item">
<i class="flaticon-kayak-1"></i>
<b>Kayak</b>
</div>
<div class="tour-activity-item">
<i class="flaticon-bonfire"></i>
<b>Campfire</b>
</div>
<div class="tour-activity-item">
<i class="flaticon-flashlight"></i>
<b>Night Exploring</b>
</div>
<div class="tour-activity-item">
<i class="flaticon-cycling"></i>
<b>Biking</b>
</div>
<div class="tour-activity-item">
<i class="flaticon-meditation"></i>
<b>Yoga</b>
</div>
</div>
<h3>Itinerary</h3>
<div class="accordion-two mt-25 mb-60" id="faq-accordion-two">
<div class="accordion-item">
<h5 class="accordion-header">
<button class="accordion-button collapsed" data-bs-toggle="collapse" data-bs-target="#collapseTwoOne">
Day 1 - Arrive at campground
</button>
</h5>
<div id="collapseTwoOne" class="accordion-collapse collapse" data-bs-parent="#faq-accordion-two">
<div class="accordion-body">
<p>To take a trivial example which undertakes laborious physical exercise except to obtain some advantage pleasure annoying consequences</p>
</div>
</div>
</div>
<div class="accordion-item">
<h5 class="accordion-header">
<button class="accordion-button collapsed" data-bs-toggle="collapse" data-bs-target="#collapseTwoTwo">
Day 2 - Wake up early and embark on a day hike
</button>
</h5>
<div id="collapseTwoTwo" class="accordion-collapse collapse" data-bs-parent="#faq-accordion-two">
<div class="accordion-body">
<p>The early start ensures you can fully immerse yourself in the tranquility of nature before the world fully awakens. As the morning light filters through the trees, you'll experience the crisp, fresh air and the peaceful sounds of the forest. The trail ahead offers both a physical challenge promise of breathtaking.</p>
</div>
</div>
</div>
<div class="accordion-item">
<h5 class="accordion-header">
<button class="accordion-button collapsed" data-bs-toggle="collapse" data-bs-target="#collapseTwoThree">
Day 3 - Join a guided ranger-led nature walk
</button>
</h5>
<div id="collapseTwoThree" class="accordion-collapse collapse" data-bs-parent="#faq-accordion-two">
<div class="accordion-body">
<p>To take a trivial example which undertakes laborious physical exercise except to obtain some advantage pleasure annoying consequences</p>
</div>
</div>
</div>
<div class="accordion-item">
<h5 class="accordion-header">
<button class="accordion-button collapsed" data-bs-toggle="collapse" data-bs-target="#collapseTwoFour">
Day 4 - Take a break from hiking
</button>
</h5>
<div id="collapseTwoFour" class="accordion-collapse collapse" data-bs-parent="#faq-accordion-two">
<div class="accordion-body">
<p>To take a trivial example which undertakes laborious physical exercise except to obtain some advantage pleasure annoying consequences</p>
</div>
</div>
</div>
<div class="accordion-item">
<h5 class="accordion-header">
<button class="accordion-button collapsed" data-bs-toggle="collapse" data-bs-target="#collapseTwoFive">
Day 5 - Pack a lunch and embark on a longer hike
</button>
</h5>
<div id="collapseTwoFive" class="accordion-collapse collapse" data-bs-parent="#faq-accordion-two">
<div class="accordion-body">
<p>To take a trivial example which undertakes laborious physical exercise except to obtain some advantage pleasure annoying consequences</p>
</div>
</div>
</div>
</div>
<h3>Maps</h3>
<div class="tour-map mt-30 mb-50">
<iframe src="https://www.google.com/maps/embed?pb=!1m10!1m8!1m3!1d96777.16150026117!2d-74.00840582560909!3d40.71171357405996!3m2!1i1024!2i768!4f13.1!5e0!3m2!1sen!2sbd!4v1706508986625!5m2!1sen!2sbd" style="border:0; width: 100%;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>
</div>
</div>
<div class="col-lg-4 col-md-8 col-sm-10 rmt-75">
<div class="blog-sidebar tour-sidebar">
<div class="widget widget-booking" data-aos="fade-up" data-aos-duration="1500" data-aos-offset="50">
<h5 class="widget-title">Book your Trip</h5>
<form action="process_trip_booking.php" method="POST">
<input type="hidden" name="trip_id" id="trip_id" value="<?php echo $trip_id; ?>">
<ul class="radio-filter pt-5">
<li>
<label for="add-extra1">Start Date <span><?php echo $start_date; ?></span></label>
</li>
</ul>
<ul class="radio-filter pt-5">
<li>
<label for="add-extra1">End Date <span><?php echo $end_date; ?></span></label>
</li>
</ul>
<hr class="mb-25">
<ul class="tickets clearfix">
<li>
Vehicles <span class="price"></span>
<select name="vehicles" id="vehicles">
<option value="1" selected>01</option>
<option value="2">02</option>
<option value="3">03</option>
<option value="4">04</option>
</select>
</li>
<li>
Adults <span class="price"></span>
<select name="adults" id="adults">
<option value="1" selected>01</option>
<option value="2">02</option>
<option value="3">03</option>
<option value="4">04</option>
</select>
</li>
<li>
Children <span class="price"></span>
<select name="children" id="children">
<option value="0" selected>00</option>
<option value="1">01</option>
<option value="2">02</option>
<option value="3">03</option>
</select>
</li>
</ul>
<hr class="mb-25">
<h6>Extras:</h6>
<ul class="radio-filter pt-5">
<li>
<input class="form-check-input" type="checkbox" name="AddExtra" id="add-extra1" value="50" style="background:#fff;">
<label for="add-extra1">4WDCSA Handheld Radio Rental <span>R 50,00</span></label>
</li>
</ul>
<hr>
<?php if ($is_member) : ?>
<div id="discount_section">
<h6>Discount:</h6>
<ul class="radio-filter pt-5">
<li>
<label for="add-extra1">4WDCSA Member Discount <span id="discount_amount">R 0,00</span></label>
</li>
</ul>
<hr>
</div>
<?php endif ?>
<ul class="radio-filter pt-5">
<li>
<label for="add-extra1">4WDCSA Booking Fee <span id="booking_fee">R <?php echo $booking_fee; ?></span></label>
</li>
</ul>
<h6>Total: <span id="booking_total" class="price">-</span></h6>
<?php if ($remaining_places < 1): ?>
<button type="button" class="theme-btn style-two w-100 mt-15 mb-5" disabled>
<span>FULLY BOOKED</span>
<i class="fal fa-times-circle"></i>
</button>
<?php else: ?>
<button type="submit" class="theme-btn style-two w-100 mt-15 mb-5">
<span data-hover="Book Now">Book Now</span>
<i class="fal fa-arrow-right"></i>
</button>
<?php endif; ?>
<div class="text-center">
<a href="contact.html">Need some help?</a> | Payments will be redirected to Payfast.
</div>
</form>
</div>
<div class="widget widget-contact" data-aos="fade-up" data-aos-duration="1500" data-aos-offset="50">
<h5 class="widget-title">Need Help?</h5>
<ul class="list-style-one">
<li><i class="far fa-envelope"></i> <a href="mailto:4wdcsa@gmail.com">4wdcsa@gmail.com</a></li>
<li><i class="far fa-phone-volume"></i> <a href="#">+27 </a></li>
</ul>
</div>
<div class="widget widget-cta" data-aos="fade-up" data-aos-duration="1500" data-aos-offset="50">
<div class="content text-white">
<span class="h6">Explore The World</span>
<h3>Best Tourist Place</h3>
<a href="tour-grid.html" class="theme-btn style-two bgc-secondary">
<span data-hover="Explore Now">Explore Now</span>
<i class="fal fa-arrow-right"></i>
</a>
</div>
<div class="image">
<img src="assets/images/widgets/cta-widget.png" alt="CTA">
</div>
<div class="cta-shape"><img src="assets/images/widgets/cta-shape3.png" alt="Shape"></div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Tour Details Area end -->
<!-- About Us Area end -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
$(document).ready(function() {
// Function to calculate booking total
function calculateTotal() {
// Get selected values from the form
var vehicles = parseInt($('#vehicles').val()) || 1; // Default to 1 vehicle if not selected
var adults = parseInt($('#adults').val()) || 1; // Default to 1 adult if not selected
var children = parseInt($('#children').val()) || 0; // Default to 0 children if not selected
var radio = $('#add-extra1').is(':checked') ? 50 : 0; // Extra cost for radio rental
// Fetch PHP variables
var isMember = <?php echo $is_member ? 'true' : 'false'; ?>;
var cost_members = <?php echo $cost_members; ?>;
var cost_nonmembers = <?php echo $cost_nonmembers; ?>;
var member_discount = <?php echo $member_discount; ?>;
var booking_fee = <?php echo $booking_fee; ?>;
// Calculate the total cost based on membership
var total = 0;
var discountAmount = 0;
// Calculate cost for members
if (isMember) {
total = ((adults + children) * cost_members) + radio + (vehicles * booking_fee);
discountAmount = ((adults + children) * member_discount); // Member discount
} else {
// Calculate cost for non-members
total = ((adults + children) * cost_nonmembers) + radio + (vehicles * booking_fee);
}
// Update total price in the DOM
$('#booking_total').text('R ' + total.toFixed(2));
// If the user is a member, show the discount section
if (isMember) {
$('#discount_amount').text('R ' + discountAmount.toFixed(2));
$('#discount_section').show();
} else {
$('#discount_section').hide();
}
}
// Event listeners to trigger recalculation when any form field changes
$('#vehicles, #adults, #children, #add-extra1').on('change', function() {
calculateTotal();
});
// Initial calculation on page load
calculateTotal();
});
</script>
<?php include_once('insta_footer.php') ?>