🤩 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:orders.php
<?php // admin/orders.php require_once '../includes/db.php'; require_once '../includes/functions.php'; $search = isset($_GET['search']) ? trim($_GET['search']) : ''; $status_filter = isset($_GET['status']) ? trim($_GET['status']) : ''; // Build dynamic query $query_parts = []; $params = []; if (!empty($search)) { $query_parts[] = "(order_no LIKE :search OR customer_name LIKE :search OR email LIKE :search OR phone LIKE :search)"; $params[':search'] = '%' . $search . '%'; } if (!empty($status_filter)) { $query_parts[] = "status = :status"; $params[':status'] = $status_filter; } $where_clause = ""; if (!empty($query_parts)) { $where_clause = "WHERE " . implode(" AND ", $query_parts); } // Pagination logic $limit = 10; $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; if ($page < 1) $page = 1; $offset = ($page - 1) * $limit; try { // Total count for pagination $count_sql = "SELECT COUNT(*) FROM orders $where_clause"; $count_stmt = $pdo->prepare($count_sql); foreach ($params as $key => $val) { $count_stmt->bindValue($key, $val); } $count_stmt->execute(); $total_rows = $count_stmt->fetchColumn(); $total_pages = ceil($total_rows / $limit); // Fetch orders $sql = "SELECT * FROM orders $where_clause ORDER BY created_at DESC LIMIT :limit OFFSET :offset"; $stmt = $pdo->prepare($sql); foreach ($params as $key => $val) { $stmt->bindValue($key, $val); } $stmt->bindValue(':limit', $limit, PDO::PARAM_INT); $stmt->bindValue(':offset', $offset, PDO::PARAM_INT); $stmt->execute(); $orders = $stmt->fetchAll(); } catch (PDOException $e) { die("Database query error: " . $e->getMessage()); } include '../includes/admin_header.php'; ?> <!-- Search and Filter Bar --> <div class="card premium-card mb-4"> <div class="card-body p-3"> <form method="GET" action="orders.php" class="row g-2 align-items-center"> <input type="hidden" name="status" value="<?php echo s($status_filter); ?>"> <div class="col-md-8"> <div class="input-group"> <span class="input-group-text bg-white border-end-0 text-muted"> <i class="fas fa-search"></i> </span> <input type="text" name="search" class="form-control border-start-0 ps-0" placeholder="Search by Order No, Customer Name, Email, or Phone..." value="<?php echo s($search); ?>"> </div> </div> <div class="col-md-2 d-grid"> <button type="submit" class="btn btn-royal">Filter</button> </div> <div class="col-md-2 d-grid"> <a href="orders.php" class="btn btn-outline-secondary">Reset</a> </div> </form> </div> </div> <!-- Status Navigation Tabs --> <div class="mb-4"> <div class="btn-group flex-wrap gap-1" role="group"> <a href="orders.php?status=&search=<?php echo s($search); ?>" class="btn btn-sm px-3 rounded-pill <?php echo empty($status_filter) ? 'btn-royal' : 'btn-outline-secondary'; ?>"> All Orders </a> <a href="orders.php?status=Pending&search=<?php echo s($search); ?>" class="btn btn-sm px-3 rounded-pill <?php echo $status_filter == 'Pending' ? 'btn-royal' : 'btn-outline-secondary'; ?>"> Pending </a> <a href="orders.php?status=Confirmed&search=<?php echo s($search); ?>" class="btn btn-sm px-3 rounded-pill <?php echo $status_filter == 'Confirmed' ? 'btn-royal' : 'btn-outline-secondary'; ?>"> Confirmed </a> <a href="orders.php?status=Processing&search=<?php echo s($search); ?>" class="btn btn-sm px-3 rounded-pill <?php echo $status_filter == 'Processing' ? 'btn-royal' : 'btn-outline-secondary'; ?>"> Processing </a> <a href="orders.php?status=Completed&search=<?php echo s($search); ?>" class="btn btn-sm px-3 rounded-pill <?php echo $status_filter == 'Completed' ? 'btn-royal' : 'btn-outline-secondary'; ?>"> Completed </a> <a href="orders.php?status=Cancelled&search=<?php echo s($search); ?>" class="btn btn-sm px-3 rounded-pill <?php echo $status_filter == 'Cancelled' ? 'btn-royal' : 'btn-outline-secondary'; ?>"> Cancelled </a> </div> </div> <!-- Orders Table Card --> <div class="card premium-card"> <div class="card-body p-0"> <div class="table-responsive"> <table class="table table-hover align-middle mb-0"> <thead class="table-light"> <tr> <th class="ps-4">Order No</th> <th>Customer Details</th> <th>Specs & Size</th> <th>Date & Time</th> <th>Quick Status Update</th> <th class="text-end pe-4">Actions</th> </tr> </thead> <tbody> <?php if (empty($orders)): ?> <tr> <td colspan="6" class="text-center py-5 text-muted"> <i class="fas fa-search-minus fa-3x mb-3 d-block text-secondary"></i> No matching orders found. </td> </tr> <?php else: ?> <?php foreach ($orders as $order): ?> <tr> <td class="ps-4 fw-bold font-monospace text-royal"> <a href="order_detail.php?id=<?php echo $order['id']; ?>" class="text-decoration-none"> <?php echo s($order['order_no']); ?> </a> </td> <td> <div class="fw-semibold"><?php echo s($order['customer_name']); ?></div> <div class="small text-muted">Ph: <?php echo s($order['phone']); ?></div> <div class="small text-muted">Email: <?php echo s($order['email']); ?></div> </td> <td> <div class="small"> <strong>Curtain:</strong> <?php echo s($order['curtain_type']); ?><br> <strong>Fabric:</strong> <?php echo s($order['fabric']); ?><br> <strong>Size:</strong> <?php echo s($order['width']); ?>"W × <?php echo s($order['height']); ?>"H (Qty: <?php echo (int)$order['quantity']; ?>) </div> </td> <td> <div class="small"><?php echo date('M d, Y', strtotime($order['created_at'])); ?></div> <div class="small text-muted"><?php echo date('h:i A', strtotime($order['created_at'])); ?></div> </td> <td> <!-- Inline Status Select Dropdown --> <select class="form-select form-select-sm select-order-status" data-id="<?php echo $order['id']; ?>" style="min-width: 130px;"> <option value="Pending" <?php echo $order['status'] == 'Pending' ? 'selected' : ''; ?>>Pending</option> <option value="Confirmed" <?php echo $order['status'] == 'Confirmed' ? 'selected' : ''; ?>>Confirmed</option> <option value="Processing" <?php echo $order['status'] == 'Processing' ? 'selected' : ''; ?>>Processing</option> <option value="Completed" <?php echo $order['status'] == 'Completed' ? 'selected' : ''; ?>>Completed</option> <option value="Cancelled" <?php echo $order['status'] == 'Cancelled' ? 'selected' : ''; ?>>Cancelled</option> </select> </td> <td class="text-end pe-4"> <div class="btn-group"> <a href="order_detail.php?id=<?php echo $order['id']; ?>" class="btn btn-outline-primary btn-sm" title="View specs & actions"> <i class="fas fa-eye"></i> </a> <a href="order_edit.php?id=<?php echo $order['id']; ?>" class="btn btn-outline-secondary btn-sm" title="Edit dimensions/specs"> <i class="fas fa-edit"></i> </a> <button type="button" class="btn btn-outline-danger btn-sm btn-delete-order" data-id="<?php echo $order['id']; ?>" data-order-no="<?php echo s($order['order_no']); ?>" title="Delete record"> <i class="fas fa-trash-alt"></i> </button> </div> </td> </tr> <?php endforeach; ?> <?php endif; ?> </tbody> </table> </div> </div> <!-- Table Footer / Pagination --> <?php if ($total_pages > 1): ?> <div class="card-footer bg-white border-0 py-3 d-flex justify-content-between align-items-center"> <div class="small text-muted"> Showing <?php echo $offset + 1; ?> to <?php echo min($offset + $limit, $total_rows); ?> of <?php echo $total_rows; ?> orders </div> <nav aria-label="Order pagination"> <ul class="pagination pagination-sm mb-0"> <!-- Previous --> <li class="page-item <?php echo $page <= 1 ? 'disabled' : ''; ?>"> <a class="page-link" href="orders.php?page=<?php echo $page - 1; ?>&status=<?php echo s($status_filter); ?>&search=<?php echo s($search); ?>">Previous</a> </li> <!-- Page Numbers --> <?php for ($i = 1; $i <= $total_pages; $i++): ?> <li class="page-item <?php echo $page == $i ? 'active' : ''; ?>"> <a class="page-link <?php echo $page == $i ? 'bg-royal text-white border-royal' : ''; ?>" href="orders.php?page=<?php echo $i; ?>&status=<?php echo s($status_filter); ?>&search=<?php echo s($search); ?>"><?php echo $i; ?></a> </li> <?php endfor; ?> <!-- Next --> <li class="page-item <?php echo $page >= $total_pages ? 'disabled' : ''; ?>"> <a class="page-link" href="orders.php?page=<?php echo $page + 1; ?>&status=<?php echo s($status_filter); ?>&search=<?php echo s($search); ?>">Next</a> </li> </ul> </nav> </div> <?php endif; ?> </div> <?php include '../includes/admin_footer.php'; ?>
Save Changes
Cancel
Create New File
Create New Folder