favicons = array_unique($favicons, SORT_LOCALE_STRING); $this->screenshots = array_unique($screenshots, SORT_LOCALE_STRING); if (isset($_SESSION['reimport'])) { $this->resizeImg(); unset($_SESSION['reimport']); } $this->copyUserFile(); } /** * Resizes the favicons and screenshots. * * @return void */ private function resizeImg(): void { $image = new \Zebra_Image(); foreach ($this->favicons as $favicon) { if (!str_starts_with(strtolower($favicon), 'http')) { if (is_file('../data/imgs/favicons/' . $favicon)) { $image->source_path = '../data/imgs/favicons/' . $favicon; $image->target_path = '../public/imgs/favicons/' . $favicon . '.webp'; $image->preserve_aspect_ratio = true; $image->enlarge_smaller_images = false; $image->resize(32, 32); $image->target_path = '../public/imgs/big_favicons/' . $favicon . '.webp'; $image->resize(128, 128); } } } foreach ($this->screenshots as $screenshot) { if (!str_starts_with(strtolower($screenshot), 'http')) { if (is_file('../data/imgs/screenshots/' . $favicon)) { $image->source_path = '../data/imgs/screenshots/' . $screenshot; $image->target_path = '../public/imgs/screenshots/' . $screenshot . '.webp'; $image->preserve_aspect_ratio = true; $image->enlarge_smaller_images = false; $image->resize(1120); $image->target_path = '../public/imgs/thumbs/' . $screenshot . '.webp'; $image->resize(250); } } } } /** * Copy user-provided CSS, JS, and SVG files to the public directory. * * @return void */ private function copyUserFile(): void { if (file_exists('../data/assets/css/user.css')) { copy('../data/assets/css/user.css', '../public/assets/css/user.css'); } if (file_exists('../data/assets/js/user.js')) { copy('../data/assets/js/user.js', '../public/assets/js/user.js'); } foreach (glob("../data/assets/icons/*.svg") as $filePath) { $filename = pathinfo($filePath, PATHINFO_BASENAME); copy($filePath, $filename); } } /** * Generate the user documentation in HTML format. * * @return string | null The HTML content of the user documentation. */ public function genUserDoc(): string | null { if (file_exists('../data/help.md')) { $configMD = [ 'table_of_contents' => [ 'html_class' => 'table-of-contents', 'position' => 'top', 'style' => 'bullet', 'min_heading_level' => 1, 'max_heading_level' => 6, 'normalize' => 'relative', 'placeholder' => null, ], 'heading_permalink' => [ 'html_class' => 'heading-permalink', 'id_prefix' => 'content', 'apply_id_to_heading' => false, 'heading_class' => '', 'fragment_prefix' => 'content', 'insert' => 'before', 'min_heading_level' => 1, 'max_heading_level' => 6, 'title' => 'Permalink', 'symbol' => '', 'aria_hidden' => true, ], ]; $environment = new Environment($configMD); $environment->addExtension(new CommonMarkCoreExtension()); $environment->addExtension(new HeadingPermalinkExtension()); $environment->addExtension(new TableOfContentsExtension()); $converter = new MarkdownConverter($environment); return $converter->convert(file_get_contents('../data/help.md'))->getContent(); } else { return null; } } }