pluginsPath = $pluginsPath; $this->loadPlugins(); } public function setAPI(CMSAPI $api): void { $this->api = $api; // Inject API into all plugins that have setAPI method foreach ($this->plugins as $plugin) { if (method_exists($plugin, 'setAPI')) { $plugin->setAPI($api); } } } private function loadPlugins(): void { if (!is_dir($this->pluginsPath)) { return; } $pluginDirs = glob($this->pluginsPath . '/*', GLOB_ONLYDIR); foreach ($pluginDirs as $pluginDir) { $pluginName = basename($pluginDir); $pluginFile = $pluginDir . '/' . $pluginName . '.php'; if (file_exists($pluginFile)) { require_once $pluginFile; $className = $pluginName; if (class_exists($className)) { $this->plugins[$pluginName] = new $className(); // Inject API if already available if ($this->api && method_exists($this->plugins[$pluginName], 'setAPI')) { $this->plugins[$pluginName]->setAPI($this->api); } } } } } public function getPlugin(string $name): ?object { return $this->plugins[$name] ?? null; } public function getAllPlugins(): array { return $this->plugins; } public function getSidebarContent(): string { $sidebarContent = ''; foreach ($this->plugins as $plugin) { if (method_exists($plugin, 'getSidebarContent')) { $sidebarContent .= $plugin->getSidebarContent(); } } return $sidebarContent; } }