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; } } function getAll() { $environment = new Environment($this->config); $environment->addExtension(new CommonMarkCoreExtension()); // Add the extension $environment->addExtension(new FrontMatterExtension()); //Add Strikethrough rendering $environment->addExtension(new StrikethroughExtension()); //add attributes to elements in markdown $environment->addExtension(new AttributesExtension()); // Instantiate the converter engine and start converting some Markdown! $converter = new MarkdownConverter($environment); $contents = []; foreach ($this->files as $file) { //get meta and html from file $result = $converter->convertToHtml(file_get_contents($file)); $meta = []; if ($result instanceof RenderedContentWithFrontMatter) { $meta = $result->getFrontMatter(); } //get raw markdown from file $frontMatterExtension = new FrontMatterExtension(); $parsed = $frontMatterExtension ->getFrontMatterParser() ->parse(file_get_contents($file)); //never trust the front end. clean it up $sanitizer = HtmlSanitizer\Sanitizer::create([ "extensions" => ["basic", "image", "list", "code"], "tags" => [ "img" => [ "allowed_attributes" => ["src", "alt", "title", "class"], "allowed_hosts" => null, "allow_relative_links" => true, ], ], ]); $scrubbed = $sanitizer->sanitize($result->getContent()); //sort attributes into page object $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"], "created" => date("Y M D d", $meta["created"]), "updated" => date("Y M D d", $meta["updated"]), "rawCreated" => $meta["created"], "rawUpdated" => $meta["updated"], "createdYear" => date("Y", $meta["created"]), "createdMonth" => date("m", $meta["created"]), "deleted" => $meta["deleted"], "menu" => $meta["menu"], "featured" => $meta["featured"], "published" => $meta["published"], "slug" => $meta["slug"], "filePath" => $file, "content" => $parsed->getContent(), "html" => $scrubbed, ]; //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; } }