Loading app/Config/Autoload.php +1 −31 Original line number Diff line number Diff line Loading @@ -96,7 +96,7 @@ class Autoload extends AutoloadConfig * * @var list<string> */ public $files = [APPPATH . 'Libraries/ViewComponents/Helpers/view_components_helper.php']; public $files = []; /** * ------------------------------------------------------------------- Loading @@ -110,34 +110,4 @@ class Autoload extends AutoloadConfig * @var list<string> */ public $helpers = ['auth', 'setting', 'icons', 'plugins']; public function __construct() { // load plugins namespaces $pluginsPaths = glob(PLUGINS_PATH . '*/*', GLOB_ONLYDIR | GLOB_NOSORT); if (! $pluginsPaths) { $pluginsPaths = []; } foreach ($pluginsPaths as $pluginPath) { $vendor = basename(dirname($pluginPath)); $package = basename($pluginPath); // validate plugin pattern if (preg_match('~' . PLUGINS_KEY_PATTERN . '~', $vendor . '/' . $package) === false) { continue; } $pluginNamespace = 'Plugins\\' . str_replace( ' ', '', ucwords(str_replace(['-', '_', '.'], ' ', $vendor . '\\' . $package)) ); $this->psr4[$pluginNamespace] = $pluginPath; } parent::__construct(); } } modules/Plugins/Config/Plugins.php +2 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,8 @@ use CodeIgniter\Config\BaseConfig; class Plugins extends BaseConfig { public string $folder = PLUGINS_PATH; /** * @var list<string> */ Loading modules/Plugins/Config/Services.php +3 −1 Original line number Diff line number Diff line Loading @@ -15,6 +15,8 @@ class Services extends BaseService return self::getSharedInstance('plugins'); } return new Plugins(); $config = config('Plugins'); return new Plugins($config); } } modules/Plugins/Core/BasePlugin.php +5 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,11 @@ abstract class BasePlugin implements PluginInterface return $this->status; } final public function getDirectory(): string { return $this->directory; } /** * @return array<string,string> */ Loading modules/Plugins/Core/Plugins.php +26 −13 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ use App\Entities\Episode; use App\Entities\Podcast; use App\Libraries\SimpleRSSElement; use Config\Database; use Modules\Plugins\Config\Plugins as PluginsConfig; /** * @method void rssBeforeChannel(Podcast $podcast) Loading Loading @@ -63,8 +64,9 @@ class Plugins protected static int $activeCount = 0; public function __construct() { public function __construct( protected PluginsConfig $config ) { helper('plugins'); $this->registerPlugins(); Loading @@ -91,6 +93,14 @@ class Plugins return array_slice(static::$plugins, (($page - 1) * $perPage), $perPage); } /** * @return array<BasePlugin> */ public function getAllPlugins(): array { return static::$plugins; } /** * @return array<BasePlugin> */ Loading Loading @@ -240,8 +250,8 @@ class Plugins return false; } // delete plugin folder from PLUGINS_PATH $pluginFolder = PLUGINS_PATH . $plugin->getKey(); // delete plugin folder $pluginFolder = $this->config->folder . $plugin->getKey(); $rmdirResult = $this->rrmdir($pluginFolder); $transResult = $db->transCommit(); Loading @@ -252,13 +262,12 @@ class Plugins protected function registerPlugins(): void { // search for plugins in plugins folder $pluginsDirectories = glob(PLUGINS_PATH . '*/*', GLOB_ONLYDIR); $pluginsDirectories = glob($this->config->folder . '*/*', GLOB_ONLYDIR); if ($pluginsDirectories === false || $pluginsDirectories === []) { return; } $locator = service('locator'); foreach ($pluginsDirectories as $pluginDirectory) { $vendor = basename(dirname($pluginDirectory)); $package = basename($pluginDirectory); Loading @@ -267,13 +276,17 @@ class Plugins continue; } $pluginFile = $pluginDirectory . DIRECTORY_SEPARATOR . 'Plugin.php'; $className = str_replace( ' ', '', ucwords(str_replace(['-', '_', '.'], ' ', $vendor . ' ' . $package)) . 'Plugin' ); $className = $locator->findQualifiedNameFromPath($pluginFile); if ($className === false) { continue; spl_autoload_register(static function ($class) use (&$className, &$pluginDirectory): void { if ($class === $className) { include $pluginDirectory . DIRECTORY_SEPARATOR . 'Plugin.php'; } }, true); $plugin = new $className($vendor, $package, $pluginDirectory); if (! $plugin instanceof BasePlugin) { Loading Loading
app/Config/Autoload.php +1 −31 Original line number Diff line number Diff line Loading @@ -96,7 +96,7 @@ class Autoload extends AutoloadConfig * * @var list<string> */ public $files = [APPPATH . 'Libraries/ViewComponents/Helpers/view_components_helper.php']; public $files = []; /** * ------------------------------------------------------------------- Loading @@ -110,34 +110,4 @@ class Autoload extends AutoloadConfig * @var list<string> */ public $helpers = ['auth', 'setting', 'icons', 'plugins']; public function __construct() { // load plugins namespaces $pluginsPaths = glob(PLUGINS_PATH . '*/*', GLOB_ONLYDIR | GLOB_NOSORT); if (! $pluginsPaths) { $pluginsPaths = []; } foreach ($pluginsPaths as $pluginPath) { $vendor = basename(dirname($pluginPath)); $package = basename($pluginPath); // validate plugin pattern if (preg_match('~' . PLUGINS_KEY_PATTERN . '~', $vendor . '/' . $package) === false) { continue; } $pluginNamespace = 'Plugins\\' . str_replace( ' ', '', ucwords(str_replace(['-', '_', '.'], ' ', $vendor . '\\' . $package)) ); $this->psr4[$pluginNamespace] = $pluginPath; } parent::__construct(); } }
modules/Plugins/Config/Plugins.php +2 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,8 @@ use CodeIgniter\Config\BaseConfig; class Plugins extends BaseConfig { public string $folder = PLUGINS_PATH; /** * @var list<string> */ Loading
modules/Plugins/Config/Services.php +3 −1 Original line number Diff line number Diff line Loading @@ -15,6 +15,8 @@ class Services extends BaseService return self::getSharedInstance('plugins'); } return new Plugins(); $config = config('Plugins'); return new Plugins($config); } }
modules/Plugins/Core/BasePlugin.php +5 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,11 @@ abstract class BasePlugin implements PluginInterface return $this->status; } final public function getDirectory(): string { return $this->directory; } /** * @return array<string,string> */ Loading
modules/Plugins/Core/Plugins.php +26 −13 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ use App\Entities\Episode; use App\Entities\Podcast; use App\Libraries\SimpleRSSElement; use Config\Database; use Modules\Plugins\Config\Plugins as PluginsConfig; /** * @method void rssBeforeChannel(Podcast $podcast) Loading Loading @@ -63,8 +64,9 @@ class Plugins protected static int $activeCount = 0; public function __construct() { public function __construct( protected PluginsConfig $config ) { helper('plugins'); $this->registerPlugins(); Loading @@ -91,6 +93,14 @@ class Plugins return array_slice(static::$plugins, (($page - 1) * $perPage), $perPage); } /** * @return array<BasePlugin> */ public function getAllPlugins(): array { return static::$plugins; } /** * @return array<BasePlugin> */ Loading Loading @@ -240,8 +250,8 @@ class Plugins return false; } // delete plugin folder from PLUGINS_PATH $pluginFolder = PLUGINS_PATH . $plugin->getKey(); // delete plugin folder $pluginFolder = $this->config->folder . $plugin->getKey(); $rmdirResult = $this->rrmdir($pluginFolder); $transResult = $db->transCommit(); Loading @@ -252,13 +262,12 @@ class Plugins protected function registerPlugins(): void { // search for plugins in plugins folder $pluginsDirectories = glob(PLUGINS_PATH . '*/*', GLOB_ONLYDIR); $pluginsDirectories = glob($this->config->folder . '*/*', GLOB_ONLYDIR); if ($pluginsDirectories === false || $pluginsDirectories === []) { return; } $locator = service('locator'); foreach ($pluginsDirectories as $pluginDirectory) { $vendor = basename(dirname($pluginDirectory)); $package = basename($pluginDirectory); Loading @@ -267,13 +276,17 @@ class Plugins continue; } $pluginFile = $pluginDirectory . DIRECTORY_SEPARATOR . 'Plugin.php'; $className = str_replace( ' ', '', ucwords(str_replace(['-', '_', '.'], ' ', $vendor . ' ' . $package)) . 'Plugin' ); $className = $locator->findQualifiedNameFromPath($pluginFile); if ($className === false) { continue; spl_autoload_register(static function ($class) use (&$className, &$pluginDirectory): void { if ($class === $className) { include $pluginDirectory . DIRECTORY_SEPARATOR . 'Plugin.php'; } }, true); $plugin = new $className($vendor, $package, $pluginDirectory); if (! $plugin instanceof BasePlugin) { Loading