From c1d4b4f80cd6bb85507ee9471e47013955a26a91 Mon Sep 17 00:00:00 2001 From: slawkens Date: Thu, 13 Jun 2024 14:36:18 +0200 Subject: [PATCH] Make autoload of pages, commands and themes configurable Not everyone might want them to autoload --- plugins/example.json | 8 ++++- system/src/Plugins.php | 77 +++++++++++++++++++++++++++++------------- 2 files changed, 60 insertions(+), 25 deletions(-) diff --git a/plugins/example.json b/plugins/example.json index 20415897..0abfb3bf 100644 --- a/plugins/example.json +++ b/plugins/example.json @@ -40,5 +40,11 @@ "redirect_to": "account/manage" } }, - "settings": "plugins/your-plugin-folder/settings.php" + "settings": "plugins/your-plugin-folder/settings.php", + "autoload": { + "pages": true, + "pagesSubFolders": false, + "commands": true, + "themes": true + } } diff --git a/system/src/Plugins.php b/system/src/Plugins.php index 0b12a2e7..6cb3ee0a 100644 --- a/system/src/Plugins.php +++ b/system/src/Plugins.php @@ -89,31 +89,14 @@ class Plugins { } } - // - // Get all plugins/*/pages/*.php pages - // - $pluginPages = glob(PLUGINS . $plugin['filename'] . '/pages/*.php'); - foreach ($pluginPages as $file) { - $file = str_replace(PLUGINS, 'plugins/', $file); - $name = pathinfo($file, PATHINFO_FILENAME); - - if (!isset($duplicates[$name])) { - $routes[] = [['get', 'post'], $name, $file, $priority]; - $duplicates[$name] = true; - } - } - - // - // Get all plugins/*/pages/subFolder/*.php pages - // - $pluginPagesSubFolders = glob(PLUGINS . $plugin['filename'] . '/pages/*', GLOB_ONLYDIR); - foreach ($pluginPagesSubFolders as $folder) { - $folderName = pathinfo($folder, PATHINFO_FILENAME); - - $subFiles = glob(PLUGINS . $plugin['filename'] . '/pages/' . $folderName . '/*.php'); - foreach ($subFiles as $file) { + if (self::getAutoLoadOption($plugin, 'pages', true)) { + // + // Get all plugins/*/pages/*.php pages + // + $pluginPages = glob(PLUGINS . $plugin['filename'] . '/pages/*.php'); + foreach ($pluginPages as $file) { $file = str_replace(PLUGINS, 'plugins/', $file); - $name = $folderName . '/' . pathinfo($file, PATHINFO_FILENAME); + $name = pathinfo($file, PATHINFO_FILENAME); if (!isset($duplicates[$name])) { $routes[] = [['get', 'post'], $name, $file, $priority]; @@ -121,6 +104,27 @@ class Plugins { } } } + + if (self::getAutoLoadOption($plugin, 'pagesSubFolders', true)) { + // + // Get all plugins/*/pages/subFolder/*.php pages + // + $pluginPagesSubFolders = glob(PLUGINS . $plugin['filename'] . '/pages/*', GLOB_ONLYDIR); + foreach ($pluginPagesSubFolders as $folder) { + $folderName = pathinfo($folder, PATHINFO_FILENAME); + + $subFiles = glob(PLUGINS . $plugin['filename'] . '/pages/' . $folderName . '/*.php'); + foreach ($subFiles as $file) { + $file = str_replace(PLUGINS, 'plugins/', $file); + $name = $folderName . '/' . pathinfo($file, PATHINFO_FILENAME); + + if (!isset($duplicates[$name])) { + $routes[] = [['get', 'post'], $name, $file, $priority]; + $duplicates[$name] = true; + } + } + } + } } usort($routes, function ($a, $b) @@ -158,6 +162,10 @@ class Plugins { $themes = []; foreach(self::getAllPluginsJson() as $plugin) { + if (!self::getAutoLoadOption($plugin, 'themes', true)) { + continue; + } + $pluginThemes = glob(PLUGINS . $plugin['filename'] . '/themes/*', GLOB_ONLYDIR); foreach ($pluginThemes as $path) { $path = str_replace(PLUGINS, 'plugins/', $path); @@ -186,6 +194,10 @@ class Plugins { $commands = []; foreach(self::getAllPluginsJson() as $plugin) { + if (!self::getAutoLoadOption($plugin, 'commands', true)) { + continue; + } + $pluginCommands = glob(PLUGINS . $plugin['filename'] . '/commands/*.php'); foreach ($pluginCommands as $path) { $commands[] = $path; @@ -792,4 +804,21 @@ class Plugins { } } } + + private static function getAutoLoadOption(array $plugin, string $optionName, bool $default = true) + { + if (isset($plugin['autoload'])) { + $autoload = $plugin['autoload']; + if (is_array($autoload)) { + if (isset($autoload[$optionName])) { + return getBoolean($autoload[$optionName]); + } + } + else if (is_bool($autoload)) { + return $autoload; + } + } + + return $default; + } }