From 736c8d12156eceace76b4a53043b69edbc6e3996 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Noack?= <noack@data-quest.de>
Date: Tue, 2 May 2023 08:24:09 +0000
Subject: [PATCH] =?UTF-8?q?Resolve=20#2594=20"onActivation/onDeactivation?=
 =?UTF-8?q?=20wird=20f=C3=BCr=20Plugins=20nicht=20aufgerufen=20wenn=20eine?=
 =?UTF-8?q?=20neue=20Veranstaltung=20angelegt=20wird=20oder=20ein=20Plugin?=
 =?UTF-8?q?=20zwangsweise=20aktiviert=20wird"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #2594

Merge request studip/studip!1750
---
 lib/classes/SemClass.class.php | 18 +++---------------
 lib/models/Course.class.php    | 12 +++---------
 lib/models/Institute.class.php | 16 +++++-----------
 3 files changed, 11 insertions(+), 35 deletions(-)

diff --git a/lib/classes/SemClass.class.php b/lib/classes/SemClass.class.php
index 862747f0696..cfd7bc03a74 100644
--- a/lib/classes/SemClass.class.php
+++ b/lib/classes/SemClass.class.php
@@ -147,16 +147,8 @@ class SemClass implements ArrayAccess
         $plugin = PluginManager::getInstance()->getPlugin($module);
         if ($plugin) {
             return Course::findEachBySQL(function ($course) use ($plugin) {
-                if (!$course->tools->findOneby('plugin_id', $plugin->getPluginId())) {
-                    return ToolActivation::create([
-                        'plugin_id' => $plugin->getPluginId(),
-                        'range_type'  => 'course',
-                        'range_id' => $course->id
-                    ]);
-                } else {
-                    return 0;
-                }
-        },
+                return PluginManager::getInstance()->setPluginActivated($plugin->getPluginId(), $course->id, true);
+            },
                 "seminare.status IN (?)",
                 [array_keys($this->getSemTypes())]);
         } else {
@@ -173,11 +165,7 @@ class SemClass implements ArrayAccess
         $plugin = PluginManager::getInstance()->getPlugin($module);
         if ($plugin) {
             return Course::findEachBySQL(function ($course) use ($plugin) {
-                if ($tool = $course->tools->findOneby('plugin_id', $plugin->getPluginId())) {
-                    return $tool->delete();
-                } else {
-                    return 0;
-                }
+                return PluginManager::getInstance()->setPluginActivated($plugin->getPluginId(), $course->id, false);
             },
                 "seminare.status IN (?)",
                 [array_keys($this->getSemTypes())]);
diff --git a/lib/models/Course.class.php b/lib/models/Course.class.php
index 429bb1b8459..315b52ede14 100644
--- a/lib/models/Course.class.php
+++ b/lib/models/Course.class.php
@@ -1004,15 +1004,9 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe
     public function setDefaultTools()
     {
         $this->tools = [];
-        foreach (array_values($this->getSemClass()->getActivatedModuleObjects()) as  $pos => $module) {
-            $this->tools[] = ToolActivation::create(
-                [
-                    'plugin_id' => $module->getPluginId(),
-                    'range_type'  => 'course',
-                    'range_id' => $this->id,
-                    'position' => $pos
-                ]
-            );
+        foreach (array_values($this->getSemClass()->getActivatedModuleObjects()) as $module) {
+            PluginManager::getInstance()->setPluginActivated($module->getPluginId(), $this->id, true);
+            $this->tools[] = ToolActivation::find([$this->id, $module->getPluginId()]);
         }
     }
 
diff --git a/lib/models/Institute.class.php b/lib/models/Institute.class.php
index 1ba4eb08a86..9e662cc32e2 100644
--- a/lib/models/Institute.class.php
+++ b/lib/models/Institute.class.php
@@ -320,17 +320,11 @@ class Institute extends SimpleORMap implements Range
      */
     public function setDefaultTools()
     {
-        $this->tools = [];
-        foreach (array_values($this->getSemClass()->getActivatedModuleObjects()) as  $pos => $module) {
-            $this->tools[] = ToolActivation::create(
-                [
-                    'plugin_id' => $module->getPluginId(),
-                    'range_type'  => 'institute',
-                    'range_id' => $this->id,
-                    'position' => $pos
-                ]
-            );
-        }
+       $this->tools = [];
+       foreach (array_values($this->getSemClass()->getActivatedModuleObjects()) as $module) {
+           PluginManager::getInstance()->setPluginActivated($module->getPluginId(), $this->id, true);
+           $this->tools[] = ToolActivation::find([$this->id, $module->getPluginId()]);
+       }
     }
 
     /**
-- 
GitLab