🤩 File Manager - Mr.X
PHP:
8.3.33
Server:
Apache
OS:
Linux 5.14.0-611.49.1.el9_7.x86_64
User:
websparkit
Navigate
Upload:
Upload
New File
New Folder
Editing:availability.php
<?php define('PAGE_TITLE', 'Availability'); require_once 'includes/header.php'; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $date = cleanInput($_POST['date']); $status = cleanInput($_POST['status']); $notes = cleanInput($_POST['notes'] ?? ''); $stmt = $conn->prepare("INSERT INTO availability (date, status, notes) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE status=?, notes=?"); $stmt->bind_param("sssss", $date, $status, $notes, $status, $notes); $stmt->execute(); $msg = '<div class="alert alert-success">Availability updated!</div>'; } $month = isset($_GET['month']) ? intval($_GET['month']) : intval(date('m')); $year = isset($_GET['year']) ? intval($_GET['year']) : intval(date('Y')); $firstDay = mktime(0,0,0,$month,1,$year); $daysInMonth = date('t',$firstDay); $monthName = date('F Y', $firstDay); $dayOfWeek = date('w', $firstDay); $prev = $month==1?12:$month-1; $prevY = $month==1?$year-1:$year; $next = $month==12?1:$month+1; $nextY = $month==12?$year+1:$year; $availabilities = []; $result = $conn->query("SELECT * FROM availability WHERE YEAR(date)=$year AND MONTH(date)=$month"); while($r=$result->fetch_assoc()) $availabilities[$r['date']]=$r; $booked_dates = []; $br = $conn->query("SELECT DISTINCT event_date FROM bookings WHERE YEAR(event_date)=$year AND MONTH(event_date)=$month AND status NOT IN ('cancelled')"); while($b=$br->fetch_assoc()) $booked_dates[]=$b['event_date']; ?> <div class="d-flex justify-content-between align-items-center mb-4"> <h4 class="fw-bold text-navy mb-0"><i class="bi bi-calendar text-warning me-2"></i>Availability Calendar</h4> </div> <?= $msg ?? '' ?> <div class="row g-4"> <div class="col-lg-8"> <div class="premium-card p-4"> <div class="calendar-header"> <a href="?month=<?= $prev ?>&year=<?= $prevY ?>" class="btn btn-outline-premium btn-sm">« Prev</a> <h5 class="fw-bold mb-0"><?= $monthName ?></h5> <a href="?month=<?= $next ?>&year=<?= $nextY ?>" class="btn btn-outline-premium btn-sm">Next »</a> </div> <div class="calendar-grid"> <?php foreach (['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] as $d): ?><div class="day-name"><?= $d ?></div><?php endforeach; ?> <?php for($i=0;$i<$dayOfWeek;$i++): ?><div></div><?php endfor; ?> <?php for($d=1;$d<=$daysInMonth;$d++): $date = sprintf('%04d-%02d-%02d',$year,$month,$d); $avail = $availabilities[$date] ?? null; $isBooked = in_array($date, $booked_dates); $cls = 'day'; if ($isBooked || ($avail && $avail['status']=='booked')) $cls.=' booked'; elseif ($avail && $avail['status']=='blocked') $cls.=' blocked'; elseif ($avail && $avail['status']=='holiday') $cls.=' blocked'; else $cls.=' available'; if ($d==date('d') && $month==date('m') && $year==date('Y')) $cls.=' today'; ?> <div class="<?= $cls ?>" data-date="<?= $date ?>" onclick="selectDate(this)"><?= $d ?></div> <?php endfor; ?> </div> <div class="calendar-legend mt-3"> <div class="legend-item"><div class="legend-color" style="background:#d4edda;"></div> Available</div> <div class="legend-item"><div class="legend-color" style="background:#ffeeba;"></div> Booked</div> <div class="legend-item"><div class="legend-color" style="background:#f8d7da;"></div> Blocked</div> <div class="legend-item"><div class="legend-color" style="background:var(--orange);"></div> Today</div> </div> </div> </div> <div class="col-lg-4"> <div class="premium-card p-4"> <h5 class="fw-bold mb-3">Set Availability</h5> <form method="post" id="availForm"> <div class="mb-3"><label class="form-label">Date</label><input type="date" name="date" id="availDate" class="form-control" required min="<?= date('Y-m-d') ?>"></div> <div class="mb-3"><label class="form-label">Status</label> <select name="status" class="form-select"> <option value="available">Available</option> <option value="blocked">Blocked</option> <option value="holiday">Holiday</option> </select> </div> <div class="mb-3"><label class="form-label">Notes</label><textarea name="notes" class="form-control" rows="2" placeholder="Optional reason"></textarea></div> <button type="submit" class="btn btn-premium w-100"><i class="bi bi-save me-2"></i>Save</button> </form> </div> </div> </div> <script> function selectDate(el) { var date = $(el).data('date'); if(date) { $('#availDate').val(date); $('html, body').animate({scrollTop: $('#availForm').offset().top-100},500); } } </script> <?php require_once 'includes/footer.php'; ?>
Save Changes
Cancel
Create New File
Create New Folder