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 $builder = new SanitizerBuilder(); $builder->registerExtension(new BasicExtension()); $builder->registerExtension(new IframeExtension()); //relative-a and relative-image $builder->registerExtension( new \HtmlSanitizer\Extension\Relative\A\AExtension() ); $builder->registerExtension( new \HtmlSanitizer\Extension\Relative\Image\ImageExtension() ); $detergent = [ "extensions" => ["basic", "relative-a", "relative-image", "iframe"], "tags" => [ "div" => [ "allowed_attributes" => ["class", "title", "id", "style"], ], "img" => [ "allowed_attributes" => ["src", "alt", "title", "class"], ], "iframe" => [ "allowed_attributes" => ["height", "width", "title", "src"], ], ], ]; $sanitizer = $builder->build($detergent); $scrubbed = $sanitizer->sanitize($result->getContent()); $imageList = explode(",", $meta["feature"]); $images = []; foreach ($imageList as $item) { $image = trim($item); if ($item != null || $item != "") { array_push($images, $item); } } //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, "media" => $images, ]; //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; } }