$_GET['category'] ?? '1', // Default category 'term' => $_GET['term'] ?? '', // Default term 'sort' => $_GET['sort'] ?? '1', // Default sort 'dir' => $_GET['dir'] ?? 'asc', // Default direction 'page' => $_GET['page'] ?? 0 // Default to first page ]; // If no query parameters exist (initial page load), redirect to set default ones if (empty($_GET)) { redirectWithFilters($filters); } // Set row limit $rowLimit = 7; // create dataset object $facilityDataSet = new FacilityDataSet(); if ($_SERVER['REQUEST_METHOD'] === 'POST') { /** * Unfortunately, ZERO time to fix this, too complex. */ if(isset($_POST['updateButton'])) { $data = [ 'id' => $_POST['idUpdate'], 'title' => $_POST['titlUpdate'], 'category' => $_POST['cateUpdate'], 'description' => $_POST['descUpdate'], 'houseNumber' => $_POST['hnumUpdate'], 'streetName' => $_POST['strtUpdate'], 'county' => $_POST['cntyUpdate'], 'town' => $_POST['townUpdate'], 'postcode' => $_POST['postUpdate'], 'lng' => $_POST['lngUpdate'], 'lat' => $_POST['latUpdate'], 'contributor' => $_POST['contUpdate'], ]; $facilityDataSet->addFacility($data); } if(isset($_POST['createButton'])) { $data = [ 'title' => $_POST['titlCreate'], 'category' => $_POST['cateCreate'], 'description' => $_POST['descCreate'], 'houseNumber' => $_POST['hnumCreate'], 'streetName' => $_POST['strtCreate'], 'county' => $_POST['cntyCreate'], 'town' => $_POST['townCreate'], 'postcode' => $_POST['postCreate'], 'contributor' => $_POST['contCreate'], ]; $facilityDataSet->addFacility($data); } // passes id to delete facility if (isset($_POST['deleteButton'])) { $facilityDataSet->deleteFacility($_POST['id']); } // Check if filters/sorting changed $filtersChanged = ( $filters['category'] !== ($_POST['filterCat'] ?? $filters['category']) || $filters['term'] !== ($_POST['filter'] ?? $filters['term']) || $filters['sort'] !== ($_POST['sort'] ?? $filters['sort']) || $filters['dir'] !== ($_POST['dir'] ?? $filters['dir']) ); // load from post if exists and sanitise, otherwise use defaults $filters['category'] = filter_input(INPUT_POST, 'filterCat', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?? $filters['category']; $filters['term'] = filter_input(INPUT_POST, 'filter', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?? $filters['term']; $filters['sort'] = filter_input(INPUT_POST, 'sort', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?? $filters['sort']; $filters['dir'] = filter_input(INPUT_POST, 'dir', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?? $filters['dir']; // Reset page if filters changed $filters['page'] = $filtersChanged ? 0 : $_POST['paginationButton'] ?? $filters['page']; redirectWithFilters($filters); } // fetch page data from database $view->allPageData = $facilityDataSet->fetchAll( ['category' => $filters['category'], 'term' => $filters['term']], ['sort' => $filters['sort'], 'dir' => $filters['dir']] ); // set total facility count to view $view->totalResults = $view->allPageData['count']; // create paginator object $view->paginator = new Paginator($rowLimit, $view->allPageData); // assign page number to view $view->pageNumber = $view->paginator->getPageFromUri(); // get current page $view->pageData = $view->paginator->getPage($view->pageNumber); // Send result count to view in format "showing x of y results" $view->dbMessage = $view->paginator->countPageResults($view->pageNumber) == 0 ? "No results" : "Showing " . $view->paginator->countPageResults($view->pageNumber) . " of " . $view->totalResults . " result(s)"; // Redirect function, adds header parameters function redirectWithFilters($filters) { // Ensure no unintended keys are passed $allowedKeys = ['category', 'term', 'sort', 'dir', 'page']; $filters = array_filter($filters, function($key) use ($allowedKeys) { return in_array($key, $allowedKeys); }, ARRAY_FILTER_USE_KEY); $queryString = http_build_query($filters); header("Location: ?" . $queryString); exit; }