From 9bfede30d203fb44480212d94d3261e59dcb0925 Mon Sep 17 00:00:00 2001
From: noackorama <noackorama@gmail.com>
Date: Fri, 3 Dec 2021 17:52:39 +0100
Subject: [PATCH] check SemClass for mandatory and forbidden plugins

---
 db/migrations/1.314_step_00349.php | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/db/migrations/1.314_step_00349.php b/db/migrations/1.314_step_00349.php
index f6cba395026..51e8ae4e990 100644
--- a/db/migrations/1.314_step_00349.php
+++ b/db/migrations/1.314_step_00349.php
@@ -120,8 +120,16 @@ class Step00349 extends Migration
 
         $all_plugins = $db->fetchPairs("SELECT pluginclassname, pluginid FROM plugins");
 
-        foreach ($db->query("SELECT seminar_id, status, modules FROM seminare") as $row) {
+        foreach ($db->query("SELECT seminar_id, status, modules, class  FROM seminare LEFT JOIN sem_types ON sem_types.id = seminare.status") as $row) {
             $activated_plugins = $db->fetchPairs("SELECT plugins_activated.pluginid, state FROM `plugins_activated` INNER JOIN `plugins` USING(pluginid) WHERE range_id=? AND range_type='sem' ORDER BY navigationpos", [$row['seminar_id']]);
+            $sem_class = OldSemClass::getClasses()[$row['class']] ?: OldSemClass::getDefaultSemClass();
+            foreach ($sem_class->getModules() as $sem_class_module => $sem_class_module_meta) {
+                if (!isset($studip_modules[$sem_class_module]) && isset($all_plugins[$sem_class_module])) {
+                    if ($sem_class_module_meta['sticky']) {
+                        $activated_plugins[$all_plugins[$sem_class_module]] = $sem_class_module_meta['activated'] ? '1' : '0';
+                    }
+                }
+            }
             $modules = $this->getLocalModules('sem', $row['modules'], $row['status']);
             $pos = 0;
             foreach ($modules as $pos => $module) {
-- 
GitLab