69 lines
2.5 KiB
PHP
69 lines
2.5 KiB
PHP
<?php
|
|
require_once 'models/TicketModel.php';
|
|
|
|
class DashboardController {
|
|
private $ticketModel;
|
|
private $conn;
|
|
|
|
public function __construct($conn) {
|
|
$this->conn = $conn;
|
|
$this->ticketModel = new TicketModel($conn);
|
|
}
|
|
|
|
public function index() {
|
|
// Get query parameters
|
|
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
|
|
$limit = isset($_COOKIE['ticketsPerPage']) ? (int)$_COOKIE['ticketsPerPage'] : 15;
|
|
$sortColumn = isset($_GET['sort']) ? $_GET['sort'] : 'ticket_id';
|
|
$sortDirection = isset($_GET['dir']) ? $_GET['dir'] : 'desc';
|
|
$category = isset($_GET['category']) ? $_GET['category'] : null;
|
|
$type = isset($_GET['type']) ? $_GET['type'] : null;
|
|
$search = isset($_GET['search']) ? trim($_GET['search']) : null; // ADD THIS LINE
|
|
|
|
// Handle status filtering
|
|
$status = null;
|
|
if (isset($_GET['status']) && !empty($_GET['status'])) {
|
|
$status = $_GET['status'];
|
|
} else if (!isset($_GET['show_all'])) {
|
|
// Default: show Open and In Progress (exclude Closed)
|
|
$status = 'Open,In Progress';
|
|
}
|
|
// If $_GET['show_all'] exists or no status param with show_all, show all tickets (status = null)
|
|
|
|
// Get tickets with pagination, sorting, and search
|
|
$result = $this->ticketModel->getAllTickets($page, $limit, $status, $sortColumn, $sortDirection, $category, $type, $search);
|
|
|
|
// Get categories and types for filters
|
|
$categories = $this->getCategories();
|
|
$types = $this->getTypes();
|
|
|
|
// Extract data for the view
|
|
$tickets = $result['tickets'];
|
|
$totalTickets = $result['total'];
|
|
$totalPages = $result['pages'];
|
|
|
|
// Load the dashboard view
|
|
include 'views/DashboardView.php';
|
|
}
|
|
|
|
private function getCategories() {
|
|
$sql = "SELECT DISTINCT category FROM tickets WHERE category IS NOT NULL ORDER BY category";
|
|
$result = $this->conn->query($sql);
|
|
$categories = [];
|
|
while($row = $result->fetch_assoc()) {
|
|
$categories[] = $row['category'];
|
|
}
|
|
return $categories;
|
|
}
|
|
|
|
private function getTypes() {
|
|
$sql = "SELECT DISTINCT type FROM tickets WHERE type IS NOT NULL ORDER BY type";
|
|
$result = $this->conn->query($sql);
|
|
$types = [];
|
|
while($row = $result->fetch_assoc()) {
|
|
$types[] = $row['type'];
|
|
}
|
|
return $types;
|
|
}
|
|
}
|
|
?>
|