(feat): filter and direction dropdown
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
<?php
|
||||
require_once('Models/FacilityDataSet.php');
|
||||
require_once("Models/Paginator.php");
|
||||
|
||||
if(!isset($_GET['page'])) {
|
||||
header("location: ?page=0");
|
||||
// If page loads empty, set initial headers
|
||||
if(!isset($_GET['page']) || !(isset($_GET['dir'])) || !(isset($_GET['sort'])) || !(isset($_GET['category']))) {
|
||||
header("Location: ?page=0&sort=1&dir=asc&category=1");
|
||||
exit;
|
||||
}
|
||||
|
||||
$filterArray = [
|
||||
@@ -17,20 +18,35 @@ $filterArray = [
|
||||
7 => "",
|
||||
8 => ""
|
||||
];
|
||||
$sortArray = [
|
||||
0 => "",
|
||||
1 => "",
|
||||
2 => "",
|
||||
3 => "",
|
||||
4 => "",
|
||||
5 => "",
|
||||
6 => "",
|
||||
7 => "",
|
||||
8 => ""
|
||||
];
|
||||
|
||||
$rowLimit = 5; //$_POST['rowCount'];
|
||||
$rowLimit = 5;
|
||||
|
||||
$facilityDataSet = new FacilityDataSet();
|
||||
|
||||
if (isset($_POST['applyFilters']) && isset($_POST['filter'])) {
|
||||
var_dump($_POST);
|
||||
$applyFilters = filter_input(INPUT_POST, 'applyFilters', FILTER_SANITIZE_STRING);
|
||||
$filterKey = filter_input(INPUT_POST, 'filter', FILTER_SANITIZE_STRING);
|
||||
$filterArray[$filterKey] = $applyFilters;
|
||||
var_dump($_POST);
|
||||
if (isset($_POST['filter']) && isset($_POST['filterCat']) && (isset($_POST['dir'])) && (isset($_POST['sort'])) && (isset($_POST['paginationButton']))) {
|
||||
$filter = filter_input(INPUT_POST, 'filter', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?? '';
|
||||
$filterKey = filter_input(INPUT_POST, 'filterCat', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?? '';
|
||||
$direction = filter_input(INPUT_POST, 'dir', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?? 'asc'; // Default to 'asc'
|
||||
$sortKey = filter_input(INPUT_POST, 'sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?? '1'; // Default to 'title'
|
||||
$page = filter_input(INPUT_POST,'paginationButton', FILTER_SANITIZE_NUMBER_INT) ?? 0; // Default page to 0 on new filter
|
||||
$filterArray[$filterKey] = $filter;
|
||||
$sortArray[$sortKey] = $direction;
|
||||
// Set the filter and generate the new URI
|
||||
$filterSet = $facilityDataSet->setFilterUri($applyFilters, array_search($applyFilters, $filterArray));
|
||||
|
||||
//$filterSet = $facilityDataSet->setFilterUri($applyFilters, array_search($applyFilters, $filterArray));
|
||||
$filterSet = setUri($filter, array_search($filter, $filterArray), $direction, array_search($direction, $sortArray), $page);
|
||||
// Parse the existing query string
|
||||
$queryParams = [];
|
||||
parse_str($filterSet["newUri"], $queryParams);
|
||||
|
||||
// Add or overwrite the 'page' parameter
|
||||
@@ -42,14 +58,16 @@ if (isset($_POST['applyFilters']) && isset($_POST['filter'])) {
|
||||
$newQueryString = http_build_query($queryParams);
|
||||
|
||||
// Redirect with the updated URI
|
||||
//var_dump("Redirecting to: {$filterSet["path"]}?{$newQueryString}");
|
||||
header("Location: {$filterSet["path"]}?{$newQueryString}");
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
$filterArray[$_GET['category'] ?? null] = $_GET['term'] ?? null;
|
||||
$sortArray[$_GET['sort'] ?? null] = $_GET['dir'] ?? null;
|
||||
|
||||
$view->pageData = $facilityDataSet->fetchAll($filterArray);
|
||||
$view->pageData = $facilityDataSet->fetchAll($filterArray, $sortArray);
|
||||
$view->paginator = new Paginator($rowLimit, $view->pageData);
|
||||
|
||||
// Initialize paginator
|
||||
@@ -60,3 +78,52 @@ $view->pageData = $view->paginator->getPage($view->pageNumber);
|
||||
$view->dbMessage = $view->paginator->countPageResults($view->pageNumber) == 0
|
||||
? "No results"
|
||||
: $view->paginator->countPageResults($view->pageNumber) . " result(s)";
|
||||
|
||||
function setUri($filter, $category, $direction, $sort, $page)
|
||||
{
|
||||
$uri = $_SERVER['REQUEST_URI'];
|
||||
$uriComp = parse_url($uri);
|
||||
$params = [];
|
||||
|
||||
// Parse existing query parameters
|
||||
if (isset($uriComp['query'])) {
|
||||
parse_str($uriComp['query'], $params);
|
||||
} else {
|
||||
$params = array();
|
||||
}
|
||||
// Avoid unnecessary redirection if sort and filter is already correct
|
||||
if (
|
||||
(isset($params['sort']) && $params['sort'] === (string)$sort && isset($params['dir']) && $params['dir'] === $direction) &&
|
||||
(isset($params['category']) && $params['category'] === (string)$category && isset($params['term']) && $params['term'] === $filter)
|
||||
) {
|
||||
exit;
|
||||
}
|
||||
|
||||
// Update parameters
|
||||
if (!empty($category)) {
|
||||
$params['category'] = $category;
|
||||
}
|
||||
if (!empty($filter)) {
|
||||
$params['term'] = $filter;
|
||||
}
|
||||
if (!empty($sort)) {
|
||||
$params['sort'] = $sort;
|
||||
}
|
||||
if (!empty($direction)) {
|
||||
$params['dir'] = $direction;
|
||||
}
|
||||
if (!empty($filter)) {
|
||||
$params['page'] = $page;
|
||||
}
|
||||
|
||||
// Rebuild the query string
|
||||
$newUri = http_build_query($params);
|
||||
var_dump($newUri);
|
||||
// Redirect to the updated URI
|
||||
// Use the current path or root
|
||||
return
|
||||
[
|
||||
'newUri' => $newUri,
|
||||
'path' => $uriComp['path'] ?? '/'
|
||||
];
|
||||
}
|
||||
|
Reference in New Issue
Block a user