diff --git a/public_html/index.php b/public_html/index.php index 51542f6..b52b686 100644 --- a/public_html/index.php +++ b/public_html/index.php @@ -12,43 +12,31 @@ */ // Preparing plugins and hooks -$GLOBALS['plugin_hooks'] = []; -$enabled_plugins = []; +// Initialize HookDispatcher and plugin system +require_once __DIR__ . '/../app/core/HookDispatcher.php'; +require_once __DIR__ . '/../app/core/PluginManager.php'; +use App\Core\HookDispatcher; +use App\Core\PluginManager; -// Plugin discovery +// Hook registration and dispatch helpers +function register_hook(string $hook, callable $callback): void { + HookDispatcher::register($hook, $callback); +} +function do_hook(string $hook, array $context = []): void { + HookDispatcher::dispatch($hook, $context); +} +function filter_public_pages(array $pages): array { + return HookDispatcher::applyFilters('filter_public_pages', $pages); +} +function filter_allowed_urls(array $urls): array { + return HookDispatcher::applyFilters('filter_allowed_urls', $urls); +} + +// Load enabled plugins $plugins_dir = dirname(__DIR__) . '/plugins/'; -foreach (glob($plugins_dir . '*', GLOB_ONLYDIR) as $plugin_path) { - $manifest = $plugin_path . '/plugin.json'; - if (file_exists($manifest)) { - $meta = json_decode(file_get_contents($manifest), true); - if (!empty($meta['enabled'])) { - $plugin_name = basename($plugin_path); - $enabled_plugins[$plugin_name] = [ - 'path' => $plugin_path, - 'meta' => $meta - ]; - // Autoload plugin bootstrap if exists - $bootstrap = $plugin_path . '/bootstrap.php'; - if (file_exists($bootstrap)) { - include_once $bootstrap; - } - } - } -} +$enabled_plugins = PluginManager::load($plugins_dir); $GLOBALS['enabled_plugins'] = $enabled_plugins; -// Simple hook system -function register_hook($hook, $callback) { - $GLOBALS['plugin_hooks'][$hook][] = $callback; -} -function do_hook($hook, $context = []) { - if (!empty($GLOBALS['plugin_hooks'][$hook])) { - foreach ($GLOBALS['plugin_hooks'][$hook] as $callback) { - call_user_func($callback, $context); - } - } -} - // Define CSRF token include path globally if (!defined('CSRF_TOKEN_INCLUDE')) { define('CSRF_TOKEN_INCLUDE', dirname(__DIR__) . '/app/includes/csrf_token.php'); @@ -121,14 +109,6 @@ $allowed_urls = [ ]; // Let plugins filter/extend allowed_urls -function filter_allowed_urls($urls) { - if (!empty($GLOBALS['plugin_hooks']['filter_allowed_urls'])) { - foreach ($GLOBALS['plugin_hooks']['filter_allowed_urls'] as $callback) { - $urls = call_user_func($callback, $urls); - } - } - return $urls; -} $allowed_urls = filter_allowed_urls($allowed_urls); // cnfig file @@ -161,14 +141,6 @@ $app_root = $config['folder']; $public_pages = ['login', 'help', 'about']; // Let plugins filter/extend public_pages -function filter_public_pages($pages) { - if (!empty($GLOBALS['plugin_hooks']['filter_public_pages'])) { - foreach ($GLOBALS['plugin_hooks']['filter_public_pages'] as $callback) { - $pages = call_user_func($callback, $pages); - } - } - return $pages; -} $public_pages = filter_public_pages($public_pages); // Dispatch routing and auth