aboutsummaryrefslogtreecommitdiff
path: root/lib/plugins/engine
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
parentf7198ce453deae678c921b8e45c5ee7e00d6e8ee (diff)
avoid batch loading of plugins by type, fixes #6260
Closes #6260 Merge request studip/studip!4740
Diffstat (limited to 'lib/plugins/engine')
-rw-r--r--lib/plugins/engine/PluginEngine.php53
-rw-r--r--lib/plugins/engine/PluginManager.php18
2 files changed, 33 insertions, 38 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);
+ }
+ }
}
}
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);