aboutsummaryrefslogtreecommitdiff
path: root/lib/plugins/engine/PluginEngine.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/plugins/engine/PluginEngine.php')
-rw-r--r--lib/plugins/engine/PluginEngine.php55
1 files changed, 35 insertions, 20 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);
+ }
+ }
}
}