diff --git a/public_html/index.php b/public_html/index.php index c0829af..1e6161c 100644 --- a/public_html/index.php +++ b/public_html/index.php @@ -11,6 +11,11 @@ * Version: 0.4 */ +// error reporting, comment out in production +//ini_set('display_errors', 1); +//ini_set('display_startup_errors', 1); +//error_reporting(E_ALL); + // Preparing plugins and hooks // Initialize HookDispatcher and plugin system require_once __DIR__ . '/../app/core/HookDispatcher.php'; @@ -18,6 +23,18 @@ require_once __DIR__ . '/../app/core/PluginManager.php'; use App\Core\HookDispatcher; use App\Core\PluginManager; +// Global allowed URLs registration +register_hook('filter_allowed_urls', function($urls) { + if (isset($GLOBALS['plugin_controllers']) && is_array($GLOBALS['plugin_controllers'])) { + foreach ($GLOBALS['plugin_controllers'] as $controllers) { + foreach ($controllers as $ctrl) { + $urls[] = $ctrl; + } + } + } + return $urls; +}); + // Hook registration and dispatch helpers function register_hook(string $hook, callable $callback): void { HookDispatcher::register($hook, $callback); @@ -81,11 +98,6 @@ $system_messages = []; require '../app/includes/errors.php'; -// error reporting, comment out in production -ini_set('display_errors', 1); -ini_set('display_startup_errors', 1); -error_reporting(E_ALL); - // list of available pages // edit accordingly, add 'pages/PAGE.php' $allowed_urls = [ @@ -95,9 +107,8 @@ $allowed_urls = [ 'profile','credentials','config','security', 'settings', 'status', - 'help', + 'help','about', 'login','logout', - 'about', ]; // Let plugins filter/extend allowed_urls @@ -215,7 +226,6 @@ if ($page == 'logout') { include '../app/templates/page-footer.php'; } else { - // if user is logged in, we need user details and rights if ($validSession) { // If by error a logged in user requests the login page @@ -241,32 +251,69 @@ if ($page == 'logout') { } // --- Plugin loading logic for all enabled plugins --- - $plugin_controllers = []; + // Ensure all enabled plugin bootstraps are loaded before mapping controllers foreach ($GLOBALS['enabled_plugins'] as $plugin_name => $plugin_info) { - $controller_path = $plugin_info['path'] . '/controllers/' . $plugin_name . '.php'; - if (file_exists($controller_path)) { - $plugin_controllers[$plugin_name] = $controller_path; + $bootstrap_path = $plugin_info['path'] . '/bootstrap.php'; + if (file_exists($bootstrap_path)) { + require_once $bootstrap_path; + } + } + // Plugin controller mapping logic (we add each controller listed in bootstrap as a page) + $mapped_plugin_controllers = []; + foreach ($GLOBALS['enabled_plugins'] as $plugin_name => $plugin_info) { + if (isset($GLOBALS['plugin_controllers'][$plugin_name])) { + foreach ($GLOBALS['plugin_controllers'][$plugin_name] as $plugin_page) { + $controller_path = $plugin_info['path'] . '/controllers/' . $plugin_page . '.php'; + if (file_exists($controller_path)) { + $mapped_plugin_controllers[$plugin_page] = $controller_path; + } + } } } // page building - include '../app/templates/page-header.php'; - include '../app/templates/page-menu.php'; - if ($validSession) { - include '../app/templates/page-sidebar.php'; - } if (in_array($page, $allowed_urls)) { - // all normal pages - if (isset($plugin_controllers[$page])) { - include $plugin_controllers[$page]; + // The page is in allowed URLs + if (isset($mapped_plugin_controllers[$page]) && file_exists($mapped_plugin_controllers[$page])) { + // The page is from a plugin controller + if (defined('PLUGIN_PAGE_DIRECT_OUTPUT') && PLUGIN_PAGE_DIRECT_OUTPUT === true) { + // Barebone page controller, we don't output anything extra + include $mapped_plugin_controllers[$page]; + ob_end_flush(); + exit; + } else { + include '../app/templates/page-header.php'; + include '../app/templates/page-menu.php'; + if ($validSession) { + include '../app/templates/page-sidebar.php'; + } + include $mapped_plugin_controllers[$page]; + include '../app/templates/page-footer.php'; + } } else { - include "../app/pages/{$page}.php"; + // The page is from a core controller + include '../app/templates/page-header.php'; + include '../app/templates/page-menu.php'; + if ($validSession) { + include '../app/templates/page-sidebar.php'; + } + if (file_exists("../app/pages/{$page}.php")) { + include "../app/pages/{$page}.php"; + } else { + include '../app/templates/error-notfound.php'; + } + include '../app/templates/page-footer.php'; } } else { - // the page is not in allowed urls, loading "not found" page + // The page is not in allowed URLs + include '../app/templates/page-header.php'; + include '../app/templates/page-menu.php'; + if ($validSession) { + include '../app/templates/page-sidebar.php'; + } include '../app/templates/error-notfound.php'; + include '../app/templates/page-footer.php'; } - include '../app/templates/page-footer.php'; } // flush the output buffer and show the page