Refactors index.php to allow multiple pages per plugin
parent
fd835dd058
commit
36e81104f1
|
@ -11,6 +11,11 @@
|
||||||
* Version: 0.4
|
* 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
|
// Preparing plugins and hooks
|
||||||
// Initialize HookDispatcher and plugin system
|
// Initialize HookDispatcher and plugin system
|
||||||
require_once __DIR__ . '/../app/core/HookDispatcher.php';
|
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\HookDispatcher;
|
||||||
use App\Core\PluginManager;
|
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
|
// Hook registration and dispatch helpers
|
||||||
function register_hook(string $hook, callable $callback): void {
|
function register_hook(string $hook, callable $callback): void {
|
||||||
HookDispatcher::register($hook, $callback);
|
HookDispatcher::register($hook, $callback);
|
||||||
|
@ -81,11 +98,6 @@ $system_messages = [];
|
||||||
|
|
||||||
require '../app/includes/errors.php';
|
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
|
// list of available pages
|
||||||
// edit accordingly, add 'pages/PAGE.php'
|
// edit accordingly, add 'pages/PAGE.php'
|
||||||
$allowed_urls = [
|
$allowed_urls = [
|
||||||
|
@ -95,9 +107,8 @@ $allowed_urls = [
|
||||||
'profile','credentials','config','security',
|
'profile','credentials','config','security',
|
||||||
'settings',
|
'settings',
|
||||||
'status',
|
'status',
|
||||||
'help',
|
'help','about',
|
||||||
'login','logout',
|
'login','logout',
|
||||||
'about',
|
|
||||||
];
|
];
|
||||||
|
|
||||||
// Let plugins filter/extend allowed_urls
|
// Let plugins filter/extend allowed_urls
|
||||||
|
@ -215,7 +226,6 @@ if ($page == 'logout') {
|
||||||
include '../app/templates/page-footer.php';
|
include '../app/templates/page-footer.php';
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// if user is logged in, we need user details and rights
|
// if user is logged in, we need user details and rights
|
||||||
if ($validSession) {
|
if ($validSession) {
|
||||||
// If by error a logged in user requests the login page
|
// 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 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) {
|
foreach ($GLOBALS['enabled_plugins'] as $plugin_name => $plugin_info) {
|
||||||
$controller_path = $plugin_info['path'] . '/controllers/' . $plugin_name . '.php';
|
$bootstrap_path = $plugin_info['path'] . '/bootstrap.php';
|
||||||
if (file_exists($controller_path)) {
|
if (file_exists($bootstrap_path)) {
|
||||||
$plugin_controllers[$plugin_name] = $controller_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
|
// 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)) {
|
if (in_array($page, $allowed_urls)) {
|
||||||
// all normal pages
|
// The page is in allowed URLs
|
||||||
if (isset($plugin_controllers[$page])) {
|
if (isset($mapped_plugin_controllers[$page]) && file_exists($mapped_plugin_controllers[$page])) {
|
||||||
include $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 {
|
} 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 {
|
} 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/error-notfound.php';
|
||||||
|
include '../app/templates/page-footer.php';
|
||||||
}
|
}
|
||||||
include '../app/templates/page-footer.php';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// flush the output buffer and show the page
|
// flush the output buffer and show the page
|
||||||
|
|
Loading…
Reference in New Issue