conn = $conn; } /** * Get all saved filters for a user */ public function getUserFilters($userId) { $sql = "SELECT filter_id, filter_name, filter_criteria, is_default, created_at, updated_at FROM saved_filters WHERE user_id = ? ORDER BY is_default DESC, filter_name ASC"; $stmt = $this->conn->prepare($sql); $stmt->bind_param("i", $userId); $stmt->execute(); $result = $stmt->get_result(); $filters = []; while ($row = $result->fetch_assoc()) { $row['filter_criteria'] = json_decode($row['filter_criteria'], true); $filters[] = $row; } return $filters; } /** * Get a specific saved filter */ public function getFilter($filterId, $userId) { $sql = "SELECT filter_id, filter_name, filter_criteria, is_default FROM saved_filters WHERE filter_id = ? AND user_id = ?"; $stmt = $this->conn->prepare($sql); $stmt->bind_param("ii", $filterId, $userId); $stmt->execute(); $result = $stmt->get_result(); if ($row = $result->fetch_assoc()) { $row['filter_criteria'] = json_decode($row['filter_criteria'], true); return $row; } return null; } /** * Save a new filter */ public function saveFilter($userId, $filterName, $filterCriteria, $isDefault = false) { // If this is set as default, unset all other defaults for this user if ($isDefault) { $this->clearDefaultFilters($userId); } $sql = "INSERT INTO saved_filters (user_id, filter_name, filter_criteria, is_default) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE filter_criteria = VALUES(filter_criteria), is_default = VALUES(is_default), updated_at = CURRENT_TIMESTAMP"; $stmt = $this->conn->prepare($sql); $criteriaJson = json_encode($filterCriteria); $stmt->bind_param("issi", $userId, $filterName, $criteriaJson, $isDefault); if ($stmt->execute()) { return [ 'success' => true, 'filter_id' => $stmt->insert_id ?: $this->getFilterIdByName($userId, $filterName) ]; } return ['success' => false, 'error' => $this->conn->error]; } /** * Update an existing filter */ public function updateFilter($filterId, $userId, $filterName, $filterCriteria, $isDefault = false) { // Verify ownership $existing = $this->getFilter($filterId, $userId); if (!$existing) { return ['success' => false, 'error' => 'Filter not found']; } // If this is set as default, unset all other defaults for this user if ($isDefault) { $this->clearDefaultFilters($userId); } $sql = "UPDATE saved_filters SET filter_name = ?, filter_criteria = ?, is_default = ?, updated_at = CURRENT_TIMESTAMP WHERE filter_id = ? AND user_id = ?"; $stmt = $this->conn->prepare($sql); $criteriaJson = json_encode($filterCriteria); $stmt->bind_param("ssiii", $filterName, $criteriaJson, $isDefault, $filterId, $userId); if ($stmt->execute()) { return ['success' => true]; } return ['success' => false, 'error' => $this->conn->error]; } /** * Delete a saved filter */ public function deleteFilter($filterId, $userId) { $sql = "DELETE FROM saved_filters WHERE filter_id = ? AND user_id = ?"; $stmt = $this->conn->prepare($sql); $stmt->bind_param("ii", $filterId, $userId); if ($stmt->execute() && $stmt->affected_rows > 0) { return ['success' => true]; } return ['success' => false, 'error' => 'Filter not found']; } /** * Set a filter as default */ public function setDefaultFilter($filterId, $userId) { // First, clear all defaults $this->clearDefaultFilters($userId); // Then set this one as default $sql = "UPDATE saved_filters SET is_default = 1 WHERE filter_id = ? AND user_id = ?"; $stmt = $this->conn->prepare($sql); $stmt->bind_param("ii", $filterId, $userId); if ($stmt->execute()) { return ['success' => true]; } return ['success' => false, 'error' => $this->conn->error]; } /** * Get the default filter for a user */ public function getDefaultFilter($userId) { $sql = "SELECT filter_id, filter_name, filter_criteria FROM saved_filters WHERE user_id = ? AND is_default = 1 LIMIT 1"; $stmt = $this->conn->prepare($sql); $stmt->bind_param("i", $userId); $stmt->execute(); $result = $stmt->get_result(); if ($row = $result->fetch_assoc()) { $row['filter_criteria'] = json_decode($row['filter_criteria'], true); return $row; } return null; } /** * Clear all default filters for a user (helper method) */ private function clearDefaultFilters($userId) { $sql = "UPDATE saved_filters SET is_default = 0 WHERE user_id = ?"; $stmt = $this->conn->prepare($sql); $stmt->bind_param("i", $userId); $stmt->execute(); } /** * Get filter ID by name (helper method) */ private function getFilterIdByName($userId, $filterName) { $sql = "SELECT filter_id FROM saved_filters WHERE user_id = ? AND filter_name = ?"; $stmt = $this->conn->prepare($sql); $stmt->bind_param("is", $userId, $filterName); $stmt->execute(); $result = $stmt->get_result(); if ($row = $result->fetch_assoc()) { return $row['filter_id']; } return null; } } ?>