Files
Ecobuddy/paginationcontroller.php

136 lines
4.4 KiB
PHP

<?php
require_once('Models/FacilityDataSet.php');
require_once("Models/Paginator.php");
// If page loads empty, set initial headers
if(!isset($_GET['page']) || !(isset($_GET['dir'])) || !(isset($_GET['sort']))) {
header("Location: ?sort=1&dir=asc&page=0");
exit;
}
$filterArray = [
0 => "",
1 => "",
2 => "",
3 => "",
4 => "",
5 => "",
6 => "",
7 => "",
8 => ""
];
$sortArray = [
0 => "",
1 => "",
2 => "",
3 => "",
4 => "",
5 => "",
6 => "",
7 => "",
8 => ""
];
$rowLimit = 5;
$filterArray[$_GET['category'] ?? null] = $_GET['term'] ?? null;
$sortArray[$_GET['sort'] ?? null] = $_GET['dir'] ?? null;
$facilityDataSet = new FacilityDataSet();
if(isset($_POST['paginatorButton'])) {
var_dump($_POST);
}
if ((isset($_POST['filter']) && isset($_POST['filterCat']) && (isset($_POST['dir'])) && (isset($_POST['sort'])))) {
$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;
var_dump($filterArray);
//redirect($filter, $filterArray, $direction, $sortArray, $page);
}
function redirect($filter, $filterArray, $direction, $sortArray, $page) : void {
// Set the filter and generate the new URI
//$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
$queryParams['page'] = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, [
'options' => ['default' => 0, 'min_range' => 0] // Default to 0 for the first page
]);
// Build the updated query string
$newQueryString = http_build_query($queryParams);
// Redirect with the updated URI
//var_dump("Redirecting to: {$filterSet["path"]}?{$newQueryString}");
header("Location: {$filterSet["path"]}?{$newQueryString}");
exit;
}
$view->pageData = $facilityDataSet->fetchAll($filterArray, $sortArray);
var_dump($filterArray, $sortArray);
$view->paginator = new Paginator($rowLimit, $view->pageData);
// Initialize paginator
$view->pageNumber = $view->paginator->getPageFromUri();
$view->pageData = $view->paginator->getPage($view->pageNumber);
// Send result count to view
$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'] ?? '/'
];
}