diff options
Diffstat (limited to 'lib/plugins/engine')
| -rw-r--r-- | lib/plugins/engine/PluginEngine.php | 55 | ||||
| -rw-r--r-- | lib/plugins/engine/PluginManager.php | 18 |
2 files changed, 35 insertions, 38 deletions
diff --git a/lib/plugins/engine/PluginEngine.php b/lib/plugins/engine/PluginEngine.php index 52f94af..03c00cf 100644 --- a/lib/plugins/engine/PluginEngine.php +++ b/lib/plugins/engine/PluginEngine.php @@ -34,31 +34,46 @@ class PluginEngine */ public static function loadPlugins() { - global $user, $perm; - - // load system plugins - self::getPlugins(SystemPlugin::class); - - // load homepage plugins - self::getPlugins(HomepagePlugin::class); - - // load course plugins - if (Context::getId()) { - $modules = self::getPlugins(StudipModule::class, Context::getId()); - $navigation = Navigation::getItem('/course'); + $plugin_manager = PluginManager::getInstance(); + $plugin_info = $plugin_manager->getPluginInfos(); + $context_id = Context::getId(); + + uasort($plugin_info, fn($a, $b) => + $b['core'] - $a['core'] ?: $a['position'] - $b['position'] + ); + + foreach ($plugin_info as $id => $info) { + // load system plugins + if (in_array(SystemPlugin::class, $info['type'])) { + $plugin_manager->getPluginById($id); + } - foreach ($modules as $module) { - $tabs = $module->getTabNavigation(Context::getId()); + // load homepage plugins + if (in_array(HomepagePlugin::class, $info['type'])) { + $plugin_manager->getPluginById($id); + } - if ($navigation && $tabs) { - $navigation->addToolNavigation($module->getPluginId(), $tabs); + // load course plugins + if (in_array(StudipModule::class, $info['type'])) { + if ($context_id) { + if ($plugin_manager->isPluginActivated($id, $context_id)) { + $navigation = Navigation::getItem('/course'); + $module = $plugin_manager->getPluginById($id); + $tabs = $module->getTabNavigation($context_id); + + if ($navigation && $tabs) { + $navigation->addToolNavigation($id, $tabs); + } + } } } - } - // load admin plugins - if (is_object($user) && $perm->have_perm('admin')) { - self::getPlugins(AdministrationPlugin::class); + // load admin plugins + if (in_array(AdministrationPlugin::class, $info['type'])) { + if ($GLOBALS['perm']->have_perm('admin')) { + $plugin_manager->getPluginById($id); + } + } } } diff --git a/lib/plugins/engine/PluginManager.php b/lib/plugins/engine/PluginManager.php index 4bcb96b..c66949a 100644 --- a/lib/plugins/engine/PluginManager.php +++ b/lib/plugins/engine/PluginManager.php @@ -51,22 +51,6 @@ class PluginManager } /** - * Comparison function used to order plugins by position. - */ - private static function positionCompare (array $plugin1, array $plugin2): int - { - if ($plugin1['core'] && !$plugin2['core']) { - return -1; - } - - if (!$plugin1['core'] && $plugin2['core']) { - return 1; - } - - return $plugin1['position'] - $plugin2['position']; - } - - /** * Read meta data for all plugins registered in the data base. */ private function readPluginInfos () @@ -662,8 +646,6 @@ class PluginManager $plugin_info = $this->getPluginInfos($type); $plugins = []; - usort($plugin_info, [self::class, 'positionCompare']); - foreach ($plugin_info as $info) { $activated = $context == null || $this->isPluginActivated($info['id'], $context); |
