From be2de100aa2f837511304af95c61cf8b16e2bcf2 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Mon, 20 Feb 2023 23:40:13 +0800 Subject: [PATCH] add --disable-plugins option for server command --- src/ZM/Plugin/PluginManager.php | 14 +++++++++++++- src/ZM/Plugin/PluginMeta.php | 17 +++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/ZM/Plugin/PluginManager.php b/src/ZM/Plugin/PluginManager.php index 5dac5274..773f6cd2 100644 --- a/src/ZM/Plugin/PluginManager.php +++ b/src/ZM/Plugin/PluginManager.php @@ -18,6 +18,11 @@ class PluginManager /** @var array 插件信息列表 */ private static array $plugins = []; + public static function getPlugins(): array + { + return self::$plugins; + } + /** * 传入插件父目录,扫描插件目录下的所有插件并注册添加 * @@ -203,9 +208,16 @@ class PluginManager * @param AnnotationParser $parser 传入注解解析器,用于将插件中的事件注解解析出来 * @throws PluginException */ - public static function enablePlugins(AnnotationParser $parser): void + public static function enablePlugins(AnnotationParser $parser, array $disable_list = []): void { foreach (self::$plugins as $name => $meta) { + if (in_array($name, $disable_list)) { + $meta->disablePlugin(); + } + if (!$meta->isEnabled()) { + logger()->notice('插件 ' . $name . ' 已被禁用'); + continue; + } // 除了内建插件外,输出 log 告知启动插件 if ($meta->getPluginType() !== ZM_PLUGIN_TYPE_NATIVE) { logger()->info('正在启用插件 ' . $name); diff --git a/src/ZM/Plugin/PluginMeta.php b/src/ZM/Plugin/PluginMeta.php index 381a3eec..1fe7d241 100644 --- a/src/ZM/Plugin/PluginMeta.php +++ b/src/ZM/Plugin/PluginMeta.php @@ -32,6 +32,8 @@ class PluginMeta implements \JsonSerializable /** @var array 元信息原文 */ private array $metas; + private bool $enabled = true; + private ?ZMPlugin $entity = null; /** @@ -56,6 +58,21 @@ class PluginMeta implements \JsonSerializable $this->root_dir = $root_dir; } + public function enablePlugin(): void + { + $this->enabled = true; + } + + public function disablePlugin(): void + { + $this->enabled = false; + } + + public function isEnabled(): bool + { + return $this->enabled; + } + public function bindEntity(ZMPlugin $plugin): void { $this->entity = $plugin;