[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: new1.php
<?php include("admin/includes/functions/functions.php");?> <?php include("db.php");?> <?php $shopname = isset($_GET['shopname']) ? htmlspecialchars($_GET['shopname']) : null; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title><?php echo $shopname;?></title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } :root { /* Salon color palette */ --salon-pink: #c53682; --salon-pink-light: #db4d9c; --salon-pink-lighter: #f0d7e5; --salon-gold: #f59e0b; --salon-cream: #fefce8; --salon-gray: #6b7280; /* Base colors */ --white: #ffffff; --black: #000000; --gray-50: #f9fafb; --gray-100: #f3f4f6; --gray-200: #e5e7eb; --gray-300: #d1d5db; --gray-400: #9ca3af; --gray-500: #6b7280; --gray-600: #4b5563; --gray-700: #374151; --gray-800: #1f2937; --gray-900: #111827; /* Shadows */ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); --shadow-salon: 0 10px 30px -10px rgba(197, 54, 130, 0.2); --shadow-card: 0 4px 12px rgba(197, 54, 130, 0.1); /* Border radius */ --radius-sm: 0.125rem; --radius: 0.25rem; --radius-md: 0.375rem; --radius-lg: 0.5rem; --radius-xl: 0.75rem; --radius-2xl: 1rem; --radius-3xl: 1.5rem; /* Transitions */ --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; line-height: 1.6; color: var(--gray-800); background: linear-gradient(180deg, var(--white), var(--salon-cream)); min-height: 100vh; } /* Header */ .header { background: linear-gradient(135deg, var(--salon-pink), var(--salon-pink-light)); color: white; padding: 1.5rem 0; box-shadow: var(--shadow-salon); } .header-container { max-width: 1200px; margin: 0 auto; padding: 0 1rem; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 1rem; } .logo { display: flex; align-items: center; gap: 0.75rem; } .logo-icon { width: 3rem; height: 3rem; background: rgba(255, 255, 255, 0.2); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; } .logo-text h1 { font-size: 1.5rem; font-weight: 700; margin-bottom: 0.25rem; } .logo-details { display: flex; gap: 1rem; font-size: 0.875rem; opacity: 0.9; } .logo-detail { display: flex; align-items: center; gap: 0.25rem; } .btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; padding: 0.75rem 1.5rem; border-radius: var(--radius-lg); font-size: 0.875rem; font-weight: 500; text-decoration: none; border: none; cursor: pointer; transition: var(--transition); white-space: nowrap; } .btn-outline { background: rgba(255, 255, 255, 0.1); border: 2px solid rgba(255, 255, 255, 0.3); color: white; } .btn-outline:hover { background: rgba(255, 255, 255, 0.2); transform: translateY(-1px); } .btn-salon { background: linear-gradient(135deg, var(--salon-pink), var(--salon-pink-light)); color: white; } .btn-salon:hover { box-shadow: var(--shadow-salon); transform: translateY(-1px) scale(1.02); } .btn-salon-outline { border: 2px solid var(--salon-pink); background: transparent; color: var(--salon-pink); } .btn-salon-outline:hover { background: var(--salon-pink); color: white; } .btn-sm { padding: 0.5rem 0.75rem; font-size: 0.75rem; } .btn:disabled { opacity: 0.4; cursor: not-allowed; transform: none !important; } /* Main Container */ .main-container { max-width: 1200px; margin: 0 auto; padding: 2rem 1rem; } .main-grid { display: grid; grid-template-columns: 1fr; gap: 1.5rem; } @media (min-width: 1024px) { .main-grid { grid-template-columns: 1fr 2fr 1fr; } } /* Cards */ .card { background: white; border-radius: var(--radius-xl); box-shadow: var(--shadow-card); overflow: hidden; } .card-header { padding: 1.5rem 1.5rem 0; } .card-title { font-size: 1.25rem; font-weight: 600; color: var(--salon-pink); margin-bottom: 1rem; } .card-content { padding: 0 1.5rem 1.5rem; } /* Categories */ .category-btn { display: flex; justify-content: space-between; align-items: center; width: 100%; padding: 0.75rem; margin-bottom: 0.5rem; border: none; border-radius: var(--radius-lg); background: transparent; color: var(--salon-pink); cursor: pointer; transition: var(--transition); text-align: left; } .category-btn:hover, .category-btn.active { background: var(--salon-pink-lighter); } .category-btn.active { background: linear-gradient(135deg, var(--salon-pink), var(--salon-pink-light)); color: white; } .badge { background: var(--gray-100); color: var(--gray-600); padding: 0.25rem 0.5rem; border-radius: var(--radius); font-size: 0.75rem; font-weight: 500; } .category-btn.active .badge { background: rgba(255, 255, 255, 0.2); color: white; } /* Services */ .search-container { position: relative; margin-bottom: 1rem; } .search-input { width: 100%; padding: 0.75rem 0.75rem 0.75rem 2.5rem; border: 1px solid var(--gray-300); border-radius: var(--radius-lg); font-size: 1rem; transition: var(--transition); } .search-input:focus { outline: none; border-color: var(--salon-pink); box-shadow: 0 0 0 3px rgba(197, 54, 130, 0.1); } .search-icon { position: absolute; left: 0.75rem; top: 50%; transform: translateY(-50%); color: var(--gray-400); width: 1rem; height: 1rem; } .service-item { display: flex; justify-content: space-between; align-items: center; padding: 1rem; border: 1px solid var(--gray-200); border-radius: var(--radius-lg); margin-bottom: 1rem; transition: var(--transition); } .service-item:hover { background: rgba(254, 252, 232, 0.5); border-color: var(--salon-pink-lighter); } .service-info { flex: 1; } .service-name { font-weight: 600; margin-bottom: 0.25rem; display: flex; align-items: center; gap: 0.5rem; } .service-rating { display: flex; align-items: center; gap: 0.25rem; font-size: 0.75rem; color: var(--gray-500); } .star-icon { width: 0.75rem; height: 0.75rem; fill: var(--salon-gold); color: var(--salon-gold); } .service-details { display: flex; align-items: center; gap: 0.75rem; font-size: 0.875rem; color: var(--gray-500); } .service-detail { display: flex; align-items: center; gap: 0.25rem; } .service-price { font-weight: 600; color: var(--salon-pink); } /* Cart */ .cart-empty { text-align: center; padding: 2rem 0; color: var(--gray-500); } .cart-empty-icon { font-size: 3rem; margin-bottom: 0.75rem; opacity: 0.5; } .cart-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; padding-bottom: 0.75rem; border-bottom: 1px solid var(--gray-200); } .cart-item { display: flex; justify-content: space-between; align-items: flex-start; padding: 0.75rem; background: rgba(254, 252, 232, 0.3); border-radius: var(--radius-lg); margin-bottom: 1rem; } .cart-item-info { flex: 1; } .cart-item-name { font-weight: 500; font-size: 0.875rem; margin-bottom: 0.25rem; } .cart-item-details { display: flex; gap: 0.5rem; font-size: 0.75rem; color: var(--gray-500); } .cart-remove { background: none; border: none; color: #ef4444; cursor: pointer; padding: 0.25rem; border-radius: var(--radius); margin-left: 0.5rem; } .cart-remove:hover { background: rgba(239, 68, 68, 0.1); } .cart-total { border-top: 1px solid var(--gray-200); padding-top: 1rem; margin-top: 1rem; } .cart-total-row { display: flex; justify-content: space-between; margin-bottom: 0.5rem; font-size: 0.875rem; } .cart-total-final { display: flex; justify-content: space-between; font-weight: 600; color: var(--salon-pink); } /* Modal */ .modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); display: none; align-items: center; justify-content: center; z-index: 1000; padding: 1rem; } .modal.active { display: flex; } .modal-content { background: white; border-radius: var(--radius-xl); width: 100%; max-width: 42rem; max-height: 90vh; overflow-y: auto; padding: 1.5rem; } .modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding-bottom: 1rem; border-bottom: 1px solid var(--gray-200); } .modal-title { font-size: 1.25rem; font-weight: 600; color: var(--salon-pink); } .modal-close { background: none; border: none; font-size: 1.5rem; color: var(--gray-400); cursor: pointer; padding: 0.25rem; border-radius: var(--radius); } .modal-close:hover { color: var(--gray-600); background: var(--gray-100); } .modal-section { margin-bottom: 1.5rem; } .modal-section-title { font-weight: 600; color: var(--salon-pink); margin-bottom: 0.75rem; } /* Form Elements */ .form-grid { display: grid; grid-template-columns: 1fr; gap: 1rem; } @media (min-width: 768px) { .form-grid { grid-template-columns: 1fr 1fr; } } .form-group { display: flex; flex-direction: column; } .form-label { font-weight: 500; margin-bottom: 0.5rem; color: var(--gray-700); } .form-input { padding: 0.75rem; border: 1px solid var(--gray-300); border-radius: var(--radius-lg); font-size: 1rem; transition: var(--transition); } .form-input:focus { outline: none; border-color: var(--salon-pink); box-shadow: 0 0 0 3px rgba(197, 54, 130, 0.1); } /* Radio Groups */ .radio-group { display: flex; flex-wrap: wrap; gap: 0.5rem; } .radio-item { display: flex; align-items: center; gap: 0.5rem; } .radio-input { width: 1rem; height: 1rem; accent-color: var(--salon-pink); } .radio-label { font-size: 0.875rem; cursor: pointer; } .radio-label-staff { display: flex; flex-direction: column; } .staff-specialty { font-size: 0.75rem; color: var(--gray-500); } /* Selection Grids */ .selection-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr)); gap: 0.5rem; } .selection-grid-time { display: grid; grid-template-columns: repeat(auto-fit, minmax(6rem, 1fr)); gap: 0.5rem; } .selection-btn { padding: 0.75rem 0.5rem; border: 1px solid var(--gray-300); border-radius: var(--radius-lg); background: white; color: var(--gray-700); cursor: pointer; transition: var(--transition); text-align: center; font-size: 0.875rem; } .selection-btn:hover { border-color: var(--salon-pink); background: var(--salon-pink-lighter); } .selection-btn.selected { background: linear-gradient(135deg, var(--salon-pink), var(--salon-pink-light)); color: white; border-color: var(--salon-pink); } /* Summary */ .booking-summary { background: rgba(254, 252, 232, 0.3); padding: 1rem; border-radius: var(--radius-lg); margin: 1rem 0; } .summary-item { display: flex; justify-content: space-between; font-size: 0.875rem; margin-bottom: 0.5rem; } .summary-total { display: flex; justify-content: space-between; font-weight: 600; color: var(--salon-pink); border-top: 1px solid var(--gray-300); padding-top: 0.5rem; margin-top: 0.5rem; } .summary-datetime { font-size: 0.875rem; color: var(--gray-500); display: flex; align-items: center; gap: 0.25rem; margin-top: 0.5rem; } /* Responsive */ @media (max-width: 768px) { .header-container { flex-direction: column; text-align: center; } .logo-details { justify-content: center; } .main-container { padding: 1rem; } .main-grid { gap: 1rem; } .selection-grid { grid-template-columns: repeat(2, 1fr); } .selection-grid-time { grid-template-columns: repeat(3, 1fr); } } /* Icons */ .icon { width: 1rem; height: 1rem; display: inline-block; } .icon-sm { width: 0.75rem; height: 0.75rem; } /* Animations */ @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .service-item { animation: fadeIn 0.3s ease-out; } /* Hidden */ .hidden { display: none !important; } /* Sticky */ .sticky { position: sticky; top: 1rem; } </style> </head> <body> <!-- Header --> <header class="header"> <div class="header-container"> <div class="logo"> <div class="logo-icon">⭐</div> <div class="logo-text"> <h1><?php echo $shopname;?></h1> <div class="logo-details"> <div class="logo-detail"> 🕘 9:00 AM to 9:00 PM </div> <div class="logo-detail"> 📍 Downtown Plaza </div> </div> </div> </div> <button class="btn btn-outline">Guest Booking</button> </div> </header> <!-- Main Content --> <div class="main-container"> <div class="main-grid"> <!-- Categories --> <div class="card sticky"> <div class="card-header"> <h2 class="card-title">Categories</h2> </div> <?php try { // Query to fetch categories $stmt = $con->query("SELECT category_id, category_name FROM service_categories WHERE cat_status = '1' AND business_name = '$shopname'"); echo '<div class="card-content">'; // All Services button echo '<button class="category-btn active" data-category="">All Services</button>'; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $category_id = htmlspecialchars($row['category_id']); $category_name = htmlspecialchars($row['category_name']); echo '<button class="category-btn" data-category="' . $category_id . '">' . $category_name . '</button>'; } echo '</div>'; } catch (PDOException $e) { echo '<div class="card-content"><button class="category-btn disabled">Error: ' . htmlspecialchars($e->getMessage()) . '</button></div>'; } ?> </div> <!-- Services --> <div class="card"> <div class="card-header"> <h2 class="card-title">Services</h2> <div class="search-container"> <input type="text" class="search-input" placeholder="Search services..." id="searchInput"> <span class="search-icon">🔍</span> </div> </div> <div class="card-content"> <div id="servicesList"> </div> </div> </div> <!-- Cart --> <div class="card sticky"> <div class="card-header"> <h2 class="card-title">🛒 Cart</h2> </div> <div class="card-content"> <div id="cartEmpty" class="cart-empty"> <div class="cart-empty-icon">📦</div> <h3>Your Cart is Empty</h3> <p>Add services to get started</p> </div> <div id="cartContent" class="hidden"> <div class="cart-header"> <span id="cartCount">0 services</span> <span class="badge" id="cartBadge">0</span> </div> <div id="cartItems"></div> <div class="cart-total"> <div class="cart-total-row"> <span>Total Duration:</span> <span id="totalDuration">0m</span> </div> <div class="cart-total-final"> <span>Total:</span> <span id="cartTotal">$0.00</span> </div> </div> <button class="btn btn-salon" style="width: 100%; margin-top: 1rem;" onclick="showBookingModal()"> Book Appointment </button> </div> </div> </div> </div> </div> <!-- Booking Modal --> <div id="bookingModal" class="modal"> <div class="modal-content"> <div class="modal-header"> <h2 class="modal-title">Complete Your Booking</h2> <button class="modal-close" onclick="closeBookingModal()">×</button> </div> <!-- Customer Details --> <div class="modal-section"> <h3 class="modal-section-title">Customer Details</h3> <div class="form-grid"> <div class="form-group"> <label class="form-label">First Name *</label> <input type="text" class="form-input" id="firstName" placeholder="Enter first name"> </div> <div class="form-group"> <label class="form-label">Last Name *</label> <input type="text" class="form-input" id="lastName" placeholder="Enter last name"> </div> <div class="form-group"> <label class="form-label">Email *</label> <input type="email" class="form-input" id="email" placeholder="Enter email"> </div> <div class="form-group"> <label class="form-label">Phone *</label> <input type="tel" class="form-input" id="phone" placeholder="Enter phone number"> </div> </div> </div> <!-- Staff Selection --> <div class="modal-section"> <h3 class="modal-section-title">Select Staff</h3> <div class="radio-group"> <div class="radio-item"> <input type="radio" class="radio-input" name="staff" value="no-preference" id="staff-none" checked> <label class="radio-label" for="staff-none">No Preference</label> </div> <?php try { $stmt = $con->query("SELECT employee_id, first_name, last_name FROM employees WHERE status = 'active' AND business_name = '$shopname'"); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $employee_id = htmlspecialchars($row['employee_id']); $employee_name = htmlspecialchars($row['first_name'] . ' ' . $row['last_name']); echo '<div class="radio-item">'; echo '<input type="radio" class="radio-input" name="staff" value="' . $employee_id . '" id="staff-' . $employee_id . '">'; echo '<label class="radio-label radio-label-staff" for="staff-' . $employee_id . '">'; echo '<span>' . $employee_name . '</span>'; echo '</label>'; echo '</div>'; } } catch (PDOException $e) { echo '<div class="radio-item"><p>Error fetching employees: ' . htmlspecialchars($e->getMessage()) . '</p></div>'; } ?> </div> </div> <!-- Date Selection --> <div class="modal-section"> <h3 class="modal-section-title">Select Date</h3> <div class="selection-grid" id="dateSelection"> </div> </div> <!-- Time Selection --> <div class="modal-section"> <h3 class="modal-section-title">Select Time</h3> <div class="selection-grid-time" id="timeSelection"> </div> </div> <!-- Booking Summary --> <div class="modal-section"> <h3 class="modal-section-title">Booking Summary</h3> <div class="booking-summary"> <div id="summaryItems"></div> <div class="summary-total"> <span>Total:</span> <span id="summaryTotal">$0.00</span> </div> <div id="summaryDateTime" class="summary-datetime"></div> </div> </div> <button class="btn btn-salon" style="width: 100%;" onclick="confirmBooking()"> Confirm Booking </button> </div> </div> <script> let cart = []; let selectedCategory = ''; let selectedDate = ''; let selectedTime = ''; let services = []; // Load services from the backend function loadServices(categoryId = '') { const urlParams = new URLSearchParams(window.location.search); const shopname = urlParams.get('shopname') || ''; fetch(`get_services.php?category_id=${encodeURIComponent(categoryId)}&shopname=${encodeURIComponent(shopname)}`) .then(res => res.json()) .then(data => { services = data.map(s => ({ id: s.service_id, name: s.service_name, price: parseFloat(s.service_price), duration: parseInt(s.service_duration), category: s.category_id, rating: parseFloat(s.service_rating || 0) })); displayServices(); }) .catch(err => { console.error('Error loading services:', err); }); } function formatDuration(minutes) { if (minutes >= 60) { const hours = Math.floor(minutes / 60); const remainingMinutes = minutes % 60; return remainingMinutes > 0 ? `${hours}h ${remainingMinutes}m` : `${hours}h`; } return `${minutes}m`; } function formatPrice(price) { return `GHC ${price.toFixed(2)}`; } function displayServices() { const searchTerm = document.getElementById('searchInput').value.toLowerCase(); const servicesList = document.getElementById('servicesList'); const filteredServices = services.filter(service => { const matchesCategory = !selectedCategory || service.category === selectedCategory; const matchesSearch = service.name.toLowerCase().includes(searchTerm); return matchesCategory && matchesSearch; }); servicesList.innerHTML = ''; if (filteredServices.length === 0) { servicesList.innerHTML = '<p>No services found.</p>'; return; } filteredServices.forEach(service => { const isInCart = cart.find(item => item.id === service.id); const serviceItem = document.createElement('div'); serviceItem.className = 'service-item'; serviceItem.innerHTML = ` <div class="service-info"> <div class="service-name"> ${service.name} <div class="service-rating"> <span class="star-icon">⭐</span> <span>${service.rating}</span> </div> </div> <div class="service-details"> <div class="service-detail"> 🕘 ${formatDuration(service.duration)} </div> <div class="service-price"> ${formatPrice(service.price)} </div> </div> </div> <button class="btn btn-salon btn-sm ${isInCart ? 'btn:disabled' : ''}" onclick="addToCart('${service.id}')" ${isInCart ? 'disabled' : ''}> ${isInCart ? 'Added' : 'Add'} </button> `; servicesList.appendChild(serviceItem); }); } function addToCart(serviceId) { const service = services.find(s => s.id === serviceId); if (service && !cart.find(item => item.id === serviceId)) { cart.push({ id: service.id, name: service.name, price: service.price, duration: service.duration }); updateCartDisplay(); displayServices(); // refresh buttons showToast(`${service.name} added to cart!`); } } function removeFromCart(serviceId) { cart = cart.filter(item => item.id !== serviceId); updateCartDisplay(); displayServices(); // refresh buttons } function updateCartDisplay() { const cartEmpty = document.getElementById('cartEmpty'); const cartContent = document.getElementById('cartContent'); const cartItems = document.getElementById('cartItems'); const cartCount = document.getElementById('cartCount'); const cartBadge = document.getElementById('cartBadge'); const cartTotal = document.getElementById('cartTotal'); const totalDuration = document.getElementById('totalDuration'); if (cart.length === 0) { cartEmpty.classList.remove('hidden'); cartContent.classList.add('hidden'); } else { cartEmpty.classList.add('hidden'); cartContent.classList.remove('hidden'); cartItems.innerHTML = ''; cart.forEach(item => { const cartItem = document.createElement('div'); cartItem.className = 'cart-item'; cartItem.innerHTML = ` <div class="cart-item-info"> <div class="cart-item-name">${item.name}</div> <div class="cart-item-details"> <span>${formatDuration(item.duration)}</span> <span>${formatPrice(item.price)}</span> </div> </div> <button class="cart-remove" onclick="removeFromCart('${item.id}')">×</button> `; cartItems.appendChild(cartItem); }); const total = cart.reduce((sum, item) => sum + item.price, 0); const duration = cart.reduce((sum, item) => sum + item.duration, 0); cartCount.textContent = `${cart.length} services`; cartBadge.textContent = cart.length; cartTotal.textContent = formatPrice(total); totalDuration.textContent = formatDuration(duration); } } function confirmBooking() { const firstName = document.getElementById('firstName').value.trim(); const lastName = document.getElementById('lastName').value.trim(); const email = document.getElementById('email').value.trim(); const phone = document.getElementById('phone').value.trim(); const staff = document.querySelector('input[name="staff"]:checked').value; if (!firstName || !lastName || !email || !phone) { showToast('Please fill in all required fields.', 'error'); return; } if (!selectedDate || !selectedTime) { showToast('Please select date and time.', 'error'); return; } // Simulate booking success showToast('Booking confirmed successfully!', 'success'); // Reset form and cart cart = []; updateCartDisplay(); closeBookingModal(); // Clear form document.getElementById('firstName').value = ''; document.getElementById('lastName').value = ''; document.getElementById('email').value = ''; document.getElementById('phone').value = ''; document.querySelector('input[name="staff"][value="no-preference"]').checked = true; selectedDate = ''; selectedTime = ''; } function showToast(message, type = 'info') { const toast = document.createElement('div'); toast.style.cssText = ` position: fixed; top: 20px; right: 20px; background: ${type === 'error' ? '#ef4444' : type === 'success' ? '#10b981' : '#3b82f6'}; color: white; padding: 1rem 1.5rem; border-radius: 0.5rem; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); z-index: 1001; animation: fadeIn 0.3s ease-out; max-width: 300px; `; toast.textContent = message; document.body.appendChild(toast); setTimeout(() => { toast.style.animation = 'fadeOut 0.3s ease-out'; setTimeout(() => toast.remove(), 300); }, 3000); } // Event listeners and initial setup document.addEventListener('DOMContentLoaded', function () { // Load services from database loadServices(); // Search input document.getElementById('searchInput').addEventListener('input', displayServices); // Category buttons document.querySelectorAll('.category-btn').forEach(btn => { btn.addEventListener('click', function () { document.querySelectorAll('.category-btn').forEach(b => b.classList.remove('active')); this.classList.add('active'); selectedCategory = this.getAttribute('data-category'); displayServices(); }); }); updateCartDisplay(); }); </script> </body> </html>
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server1.winmanyltd.com
Server IP: 203.161.60.52
PHP Version: 8.3.27
Server Software: Apache
System: Linux server1.winmanyltd.com 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
HDD Total: 117.98 GB
HDD Free: 59.8 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
Yes
git:
Yes
User Info
Username: eliosofonline
User ID (UID): 1002
Group ID (GID): 1003
Script Owner UID: 1002
Current Dir Owner: 1002