aboutsummaryrefslogtreecommitdiff
path: root/lib/plugins/engine/PluginEngine.php
diff options
context:
space:
mode:
authorElmar Ludwig <elmar.ludwig@uni-osnabrueck.de>2026-03-02 17:41:50 +0100
committerElmar Ludwig <elmar.ludwig@uni-osnabrueck.de>2026-03-02 17:41:50 +0100
commit9500f0acd34f6169066f7cc975ff286d5a4739c0 (patch)
tree33c4bae6145630526f5089c7d46409add2c4b16b /lib/plugins/engine/PluginEngine.php
parentf7198ce453deae678c921b8e45c5ee7e00d6e8ee (diff)
avoid batch loading of plugins by type, fixes #6260
Closes #6260 Merge request studip/studip!4740
Diffstat (limited to 'lib/plugins/engine/PluginEngine.php')
-rw-r--r--lib/plugins/engine/PluginEngine.php53
1 files changed, 33 insertions, 20 deletions
diff --git a/lib/plugins/engine/PluginEngine.php b/lib/plugins/engine/PluginEngine.php
index 5c7bad5..f6cb832 100644
--- a/lib/plugins/engine/PluginEngine.php
+++ b/lib/plugins/engine/PluginEngine.php
@@ -34,33 +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);
-
+ $plugin_manager = PluginManager::getInstance();
+ $plugin_info = $plugin_manager->getPluginInfos();
$context_id = Context::getId();
- // load course plugins
- if ($context_id) {
- $modules = self::getPlugins(StudipModule::class, $context_id);
- $navigation = Navigation::getItem('/course');
+ uasort($plugin_info, fn($a, $b) =>
+ $b['core'] - $a['core'] ?: $a['position'] - $b['position']
+ );
- foreach ($modules as $module) {
- $tabs = $module->getTabNavigation($context_id);
+ foreach ($plugin_info as $id => $info) {
+ // load system plugins
+ if (in_array(SystemPlugin::class, $info['type'])) {
+ $plugin_manager->getPluginById($id);
+ }
- if ($navigation && $tabs) {
- $navigation->addToolNavigation($module->getPluginId(), $tabs);
+ // load homepage plugins
+ if (in_array(HomepagePlugin::class, $info['type'])) {
+ $plugin_manager->getPluginById($id);
+ }
+
+ // 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);
+ }
+ }
}
}