diff --git a/my_listings.php b/my_listings.php index 50fa0cc..b81b1ac 100644 --- a/my_listings.php +++ b/my_listings.php @@ -3,6 +3,9 @@ session_start(); require_once 'db/config.php'; // Include the database configuration +// Pagination constants +const ITEMS_PER_PAGE = 6; + // If user is not logged in or not a vendor, redirect if (!isset($_SESSION['user_id']) || $_SESSION['user_role'] !== 'vendor') { header("Location: login.php"); // Redirect to login or a suitable page @@ -17,24 +20,81 @@ $pdo = db(); // Get the PDO connection $items = []; // Initialize an empty array to hold items // Fetch items listed by the current vendor + $total_items_query = "SELECT COUNT(*) FROM items WHERE owner_id = ?"; + $total_items_params = [$user_id]; + + if (isset($_GET['search']) && !empty($_GET['search'])) { + $searchTerm = '%' . $_GET['search'] . '%'; + $total_items_query .= " AND (name LIKE ? OR description LIKE ?)"; + $total_items_params[] = $searchTerm; + $total_items_params[] = $searchTerm; + } + + if (isset($_GET['status']) && !empty($_GET['status'])) { + $statusFilter = $_GET['status']; + $total_items_query .= " AND status = ?"; + $total_items_params[] = $statusFilter; + } + + $total_stmt = $pdo->prepare($total_items_query); + $total_stmt->execute($total_items_params); + $total_items = $total_stmt->fetchColumn(); + + $total_pages = ceil($total_items / ITEMS_PER_PAGE); + + $current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1; + $current_page = max(1, min($current_page, $total_pages == 0 ? 1 : $total_pages)); // Ensure current page is within valid range + $offset = ($current_page - 1) * ITEMS_PER_PAGE; + + // Fetch items listed by the current vendor $query = "SELECT * FROM items WHERE owner_id = ?"; - $params = [$user_id]; + $query_params = [$user_id]; if (isset($_GET['search']) && !empty($_GET['search'])) { $searchTerm = '%' . $_GET['search'] . '%'; $query .= " AND (name LIKE ? OR description LIKE ?)"; - $params[] = $searchTerm; - $params[] = $searchTerm; + $query_params[] = $searchTerm; + $query_params[] = $searchTerm; } if (isset($_GET['status']) && !empty($_GET['status'])) { $statusFilter = $_GET['status']; $query .= " AND status = ?"; - $params[] = $statusFilter; + $query_params[] = $statusFilter; } + $orderBy = " ORDER BY creation_date DESC"; // Default sort + + if (isset($_GET['sort']) && !empty($_GET['sort'])) { + switch ($_GET['sort']) { + case 'name_asc': + $orderBy = " ORDER BY name ASC"; + break; + case 'name_desc': + $orderBy = " ORDER BY name DESC"; + break; + case 'price_asc': + $orderBy = " ORDER BY price ASC"; + break; + case 'price_desc': + $orderBy = " ORDER BY price DESC"; + break; + case 'date_asc': + $orderBy = " ORDER BY creation_date ASC"; + break; + case 'date_desc': + $orderBy = " ORDER BY creation_date DESC"; + break; + } + } + + $query .= $orderBy; + $query .= " LIMIT ? OFFSET ?"; + $query_params[] = ITEMS_PER_PAGE; + $query_params[] = $offset; + $stmt = $pdo->prepare($query); - $stmt->execute($params); + $stmt->execute($query_params); $items = $stmt->fetchAll(); ?> @@ -68,6 +128,15 @@ $items = []; // Initialize an empty array to hold items + @@ -96,6 +165,23 @@ $items = []; // Initialize an empty array to hold items + + 1): ?> + + +