starting the page generator
authorEduardo <[email protected]>
Sun, 29 Oct 2023 00:57:06 +0000 (02:57 +0200)
committerEduardo <[email protected]>
Sun, 29 Oct 2023 00:57:06 +0000 (02:57 +0200)
page-generator/generator.php [new file with mode: 0644]
page-generator/index.php [new file with mode: 0644]

diff --git a/page-generator/generator.php b/page-generator/generator.php
new file mode 100644 (file)
index 0000000..f99c8bb
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+
+class CodeGenerator
+{
+
+    /**
+     * Iterate through all folders and subfolders and make copy of files from
+     * $fromFolder to $toFolder.
+     */
+    function copyRecursive(string $fromFolder, string $toFolder)
+    {
+        foreach ($i = new \RecursiveIteratorIterator(
+            new \RecursiveDirectoryIterator($fromFolder, \RecursiveDirectoryIterator::SKIP_DOTS),
+            \RecursiveIteratorIterator::SELF_FIRST
+        ) as $item) {
+            if ($item->isDir()) {
+                mkdir($toFolder . DIRECTORY_SEPARATOR . $i->getSubPathname());
+            } else {
+                copy($item, $toFolder . DIRECTORY_SEPARATOR . $i->getSubPathname());
+            }
+        }
+    }
+
+    /**
+     * Will delete a given folder and all its contents
+     */
+    function deleteRecursive(string $dir)
+    {
+        if (empty($dir))
+            return;
+
+        if (file_exists($dir)) {
+            foreach ($i = new \RecursiveIteratorIterator(
+                new \RecursiveDirectoryIterator($dir, \FilesystemIterator::SKIP_DOTS),
+                \RecursiveIteratorIterator::CHILD_FIRST
+            ) as $file) {
+                if ($file->isDir())
+                    rmdir($file);
+                else
+                    unlink($file);
+            }
+
+            rmdir($dir);
+        }
+    }
+
+    function generateFoldersForPages(array $folderList, $basePath)
+    {
+        foreach ($folderList as $folder) {
+            if ($folder == '/')
+                mkdir($basePath . "/index");
+            else
+                mkdir($basePath . '/' . $folder);
+        }
+    }
+}
diff --git a/page-generator/index.php b/page-generator/index.php
new file mode 100644 (file)
index 0000000..e08c307
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+
+require_once("generator.php");
+
+// constans
+const URL = "http://localhost:8000";
+const BASE_PATH_TEMP = "../generated_temp";
+
+$generator = new CodeGenerator();
+
+// create new folder (dont remove the old one yet)
+mkdir(BASE_PATH_TEMP);
+
+// create folder structure
+mkdir(BASE_PATH_TEMP . "/assets");
+mkdir(BASE_PATH_TEMP . "/css");
+mkdir(BASE_PATH_TEMP . "/img");
+mkdir(BASE_PATH_TEMP . "/js");
+
+// copy assets
+$generator->copyRecursive("../public/assets", BASE_PATH_TEMP . "/assets");
+$generator->copyRecursive("../public/css", BASE_PATH_TEMP . "/css");
+$generator->copyRecursive("../public/img", BASE_PATH_TEMP . "/img");
+$generator->copyRecursive("../public/js", BASE_PATH_TEMP . "/js");
+
+// get images sheet
+$image_list = file_get_contents(URL . '?sheet=images');
+$image_list = json_decode($image_list);
+
+// FIXME: DEBUG
+print_r($image_list);
+
+// copy images from whatever they are (if this is in a docker container they may be mounted somewhere)
+// rename images
+
+// create partials:
+mkdir(BASE_PATH_TEMP . "/partials");
+
+// generate head
+// generate footer
+
+// get menu
+$menu_list = file_get_contents(URL . '?sheet=menu');
+$menu_list = json_decode($menu_list);
+// FIXME: DEBUG
+print_r($menu_list);
+
+// generate header area
+
+// generate page folders
+$page_array = [];
+foreach ($menu_list as $item) {
+    foreach ($item as $key => $value) {
+        if ($key == 'path')
+            $page_array[] = $value;
+    }
+}
+
+mkdir(BASE_PATH_TEMP . "/pages");
+$generator->generateFoldersForPages($page_array, BASE_PATH_TEMP . "/pages");
+
+// generate each page
+
+// add partials to pages
+
+// remove partials
+$generator->deleteRecursive(BASE_PATH_TEMP . "/partials");
+
+// remove old folder
+$generator->deleteRecursive("../generated");
+
+// rename folder
+rename(BASE_PATH_TEMP, "../generated");
+
+// done