forked from projects/fipamo
ro
2395278893
plugged in the dash index template which required grabbing markdown pages and converting them to data the system can use and then pagination that is used to sort content into pages start page now switches from login screen to index based on session, but that might be changes so it's a bit more clean to work with middleware
91 lines
2.4 KiB
PHP
91 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use function _\filter;
|
|
|
|
class PaginateService
|
|
{
|
|
protected $content;
|
|
|
|
public function __construct(ContentService $contentService)
|
|
{
|
|
$this->content = $contentService;
|
|
}
|
|
|
|
public function getPage(int $page, int $limit, string $sort = null)
|
|
{
|
|
$content = $this->content->loadAllPages();
|
|
|
|
$published = filter($content, function ($item) {
|
|
return $item['published'] == true && $item['deleted'] == false;
|
|
});
|
|
$deleted = filter($content, function ($item) {
|
|
return $item['deleted'] == true;
|
|
});
|
|
|
|
// $all = $content;
|
|
$all = filter($content, function ($item) {
|
|
return $item['deleted'] == false;
|
|
});
|
|
$filter = isset($sort) ? $sort : 'all';
|
|
switch ($filter) {
|
|
case 'published':
|
|
$filtered = $published;
|
|
break;
|
|
case 'deleted':
|
|
$filtered = $deleted;
|
|
break;
|
|
default:
|
|
$filtered = $all;
|
|
break;
|
|
}
|
|
$numOfPages = ceil(count($filtered) / ($limit + 1));
|
|
$folder = [];
|
|
|
|
if (count($filtered) != 0) {
|
|
if (count($filtered) < $limit) {
|
|
$limit = count($filtered) - 1;
|
|
}
|
|
$range = $page * $limit - $limit;
|
|
|
|
if ($range != 0) {
|
|
$range = $range + 1;
|
|
}
|
|
for ($i = 0; $i <= $limit; ++$i) {
|
|
if (isset($filtered[$i + $range])) {
|
|
array_push($folder, $filtered[$i + $range]);
|
|
} else {
|
|
// chill out
|
|
}
|
|
}
|
|
}
|
|
|
|
$prev = $page - 1;
|
|
if ($prev <= 0) {
|
|
$prev = $numOfPages;
|
|
}
|
|
|
|
$next = $page + 1;
|
|
if ($next > $numOfPages) {
|
|
$next = 1;
|
|
}
|
|
|
|
return [
|
|
'pages' => $folder,
|
|
'numOfPages' => $numOfPages,
|
|
'entryCount' => count($filtered),
|
|
'paginate' => [
|
|
'sort' => $sort,
|
|
'nextPage' => $next,
|
|
'prevPage' => $prev,
|
|
],
|
|
'stats' => [
|
|
'all' => count($all),
|
|
'published' => count($published),
|
|
'deleted' => count($deleted),
|
|
],
|
|
];
|
|
}
|
|
}
|