read($folder); } public function read($folder) { $folders = glob("$folder/*", GLOB_ONLYDIR); foreach ($folders as $folder) { //$this->files[] = $folder . "/"; $this->read($folder); } $files = array_filter(glob("$folder/*md"), "is_file"); foreach ($files as $file) { $this->files[] = $file; } } public function getPages(int $page, int $limit, string $sort = null) { $content = $this->getContents(); $published = filter($content, function ($item) { return $item["published"] == "true"; }); $deleted = filter($content, function ($item) { return $item["deleted"]; }); $all = $content; $filter = isset($sort) ? $sort : "all"; //echo $filter; $filtered = []; switch ($filter) { case "published": $filtered = $published; break; case "deleted": $filtered = $deleted; break; default: $filtered = $content; break; } $numOfPages = ceil(count($filtered) / $limit); $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" => $filter, "nextPage" => $next, "prevPage" => $prev, ], "stats" => [ "all" => count($all), "published" => count($published), "deleted" => count($deleted), ], ]; } public function getContents() { $parser = new Parser(); $contents = []; foreach ($this->files as $file) { $doc = $parser->parse(file_get_contents($file), false); $meta = $doc->getYAML(); //$date = getdate($meta["created"]); $newDate = date("Y M D d", $meta["created"]); $page = [ "id" => $meta["id"], "uuid" => $meta["uuid"], "title" => $meta["title"], "feature" => $meta["feature"], "path" => $meta["path"], "layout" => $meta["layout"], "tags" => $meta["tags"], "author" => $meta["author"], "prettyDate" => $newDate, "created" => $meta["created"], "deleted" => $meta["deleted"], "menu" => $meta["menu"], "featured" => $meta["featured"], "published" => $meta["published"], "slug" => $meta["slug"], "filePath" => $file, "content" => $doc->getContent(), ]; //checks for duplicates $uuid = $meta["uuid"]; $found = current( array_filter($contents, function ($item) use ($uuid) { return isset($item["uuid"]) && $uuid == $item["uuid"]; }) ); // if uuid is not present, add it if (!$found) { array_push($contents, $page); } } $contents = orderBy($contents, ["id"], ["desc"]); return $contents; } }