<?php function completeScanDir($dir) { if (file_exists("$dir/.hide.txt")) { $hideFile = fopen("$dir/.hide.txt", "r"); $filesToHide = fread($hideFile, filesize("$dir/.hide.txt")); fclose($hideFile); $filesToHide = explode("\n", $filesToHide); } $result = []; foreach(scandir($dir) as $filename) { if ($filename[0] == '.'){ continue; } if (isset($filesToHide)) { if (in_array($filename, $filesToHide)) continue; } $filePath = $dir . '/' . $filename; if (is_dir($filePath)) { $result[$filePath] = completeScanDir($filePath); } else { $result[$filePath] = $filename; } } return $result; } function generateCSSCode($directory) { foreach ($directory as $path => $filename) { if (is_array($filename)) { // $filename is either a filename or an array of filenames, if so, it represents a directory $randomColor = "rgba(" . rand(0, 255) . ", " . rand(0, 255) . ", " . rand(0, 255); $useableName = str_replace("/", "_", $path); echo " #input_$useableName:checked + .submenu_$useableName, .submenu_$useableName:hover { display: block; background-color: $randomColor, 0.5); } .label_$useableName { background-color: $randomColor, 0.5); }\n\n"; generateCSSCode($filename); } } } function generateSubmenusHTML($directory, $indentation) { foreach ($directory as $path => $filename) { if ($filename !== "README.txt") { $useableName = str_replace("/", "_", $path); // CSS classes cant contain slashes if (is_array($filename)) { $pathFragments = explode("/", $path); // i wanted to just use end(explode("/", $path)) but PHP doesnt like it. $folderName = end($pathFragments); echo " $indentation<label for='input_$useableName' class='inout hcb-label label_$useableName'>$folderName</label> $indentation<input type='checkbox' id='input_$useableName' class='hacked-checkbox'> $indentation<div class='inset submenu submenu_$useableName' id='submenu_$useableName'>\n"; if (file_exists("$path/README.txt")) { // show description text if there is a README.txt echo " $indentation<p class='tiny-text'>Beschreibung:</p>\n"; $readmeFile = fopen("$path/README.txt", "r"); $readmeContent = fread($readmeFile, filesize("$path/README.txt")); echo " $indentation<pre class='heading-text fat-text'> $readmeContent $indentation</pre> $indentation<hr>\n"; fclose($readmeFile); } generateSubmenusHTML($filename, "$indentation "); echo " $indentation</div> $indentation<br>\n"; } else { if ($filename !== "README.txt") { echo " $indentation<a href='$path' class='file-link'>$filename</a>\n"; } } } } } ?>