$status]; if ($trackingNumber) { $updateData['tracking_number'] = $trackingNumber; } db()->update('orders', $updateData, 'order_id = :id', ['id' => $orderId]); setFlash('success', 'Order status updated'); header('Location: /admin/orders.php'); exit; } } // Filters $status = $_GET['status'] ?? ''; $search = $_GET['search'] ?? ''; $dateFrom = $_GET['date_from'] ?? ''; $dateTo = $_GET['date_to'] ?? ''; $page = max(1, intval($_GET['page'] ?? 1)); // Build query $where = ['1=1']; $params = []; if ($status) { $where[] = 'order_status = :status'; $params['status'] = $status; } if ($search) { $where[] = '(order_number LIKE :search OR customer_name LIKE :search OR customer_email LIKE :search)'; $params['search'] = '%' . $search . '%'; } if ($dateFrom) { $where[] = 'DATE(created_at) >= :date_from'; $params['date_from'] = $dateFrom; } if ($dateTo) { $where[] = 'DATE(created_at) <= :date_to'; $params['date_to'] = $dateTo; } $whereClause = implode(' AND ', $where); // Get total and paginate $totalOrders = db()->count('orders', $whereClause, $params); $pagination = paginate($totalOrders, $page, ADMIN_ITEMS_PER_PAGE); // Get orders $orders = db()->fetchAll( "SELECT * FROM orders WHERE {$whereClause} ORDER BY created_at DESC LIMIT :limit OFFSET :offset", array_merge($params, ['limit' => $pagination['per_page'], 'offset' => $pagination['offset']]) ); $statuses = ['pending', 'confirmed', 'processing', 'shipped', 'delivered', 'cancelled', 'refunded']; ?>