From 52497ee6be4696b930c164872d8b5a5ec3a79513 Mon Sep 17 00:00:00 2001
From: Murtaza Sultani <sultani@data-quest.de>
Date: Wed, 4 Sep 2024 14:54:54 +0000
Subject: [PATCH] =?UTF-8?q?Resolve=20"OER:=20Besser=20zur=C3=BCck=20Typ=20?=
 =?UTF-8?q?der=20Methode=20(oerModuleIntegrateMaterialToCourse())"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #4561

Merge request studip/studip!3373
---
 app/controllers/oer/market.php | 16 +++++++++-------
 lib/modules/CoreDocuments.php  | 31 +++++++++++++++++--------------
 lib/modules/OERModule.php      |  4 ++--
 3 files changed, 28 insertions(+), 23 deletions(-)

diff --git a/app/controllers/oer/market.php b/app/controllers/oer/market.php
index 3f9dc89646b..8c615f5eec1 100644
--- a/app/controllers/oer/market.php
+++ b/app/controllers/oer/market.php
@@ -423,18 +423,20 @@ class Oer_MarketController extends StudipController
                     $semclass = $this->course->getSemClass();
                     if ($semclass->isModuleAllowed($class)) {
                         //activate module in course ?
-                        $newfile = $class::oerModuleIntegrateMaterialToCourse(
+                        $response = $class::oerModuleIntegrateMaterialToCourse(
                             $this->material,
                             $this->course
                         );
-                        if (is_array($newfile)) {
-                            PageLayout::postError(_("Beim Kopieren ist ein Fehler aufgetaucht."), $newfile);
+
+                        if ($response['type'] === 'error') {
+                            PageLayout::postError($response['message'], $response['message_detail']);
                         } else {
-                            PageLayout::postSuccess(_("Das Lernmaterial wurde kopiert."));
+                            PageLayout::postSuccess($response['message'], $response['message_detail']);
                         }
-                        $this->response->add_header("X-Location", URLHelper::getURL("dispatch.php/course/files", array('cid' => $this->course->id)));
-                        $this->response->add_header("X-Dialog-Close", 1);
-                        $this->redirect(URLHelper::getURL("dispatch.php/course/files", array('cid' => $this->course->id)));
+
+                        $this->response->add_header('X-Dialog-Close', 1);
+                        $this->relocate($response['redirect_url']);
+
                         return;
                     }
                 }
diff --git a/lib/modules/CoreDocuments.php b/lib/modules/CoreDocuments.php
index 2acfeef2275..3f6de68151c 100644
--- a/lib/modules/CoreDocuments.php
+++ b/lib/modules/CoreDocuments.php
@@ -12,11 +12,8 @@
 class CoreDocuments extends CorePlugin implements StudipModule, OERModule
 {
 
-
     /**
-     * Determines if the StudipModule wants to handle the OERMaterial. Returns false if not.
-     * @param OERMaterial $material
-     * @return false|Icon
+     * {@inheritdoc}
      */
     static public function oerModuleWantsToUseMaterial(OERMaterial $material)
     {
@@ -24,9 +21,7 @@ class CoreDocuments extends CorePlugin implements StudipModule, OERModule
     }
 
     /**
-     * Returns an Icon class object with the given role.
-     * @param string $role
-     * @return null|Icon
+     * {@inheritdoc}
      */
     public function oerGetIcon($role = Icon::ROLE_CLICKABLE)
     {
@@ -34,11 +29,7 @@ class CoreDocuments extends CorePlugin implements StudipModule, OERModule
     }
 
     /**
-     * This function is triggered i a user chose to use this module as the target of the oermaterial.
-     * Now this module should put a copy of $material in its own area of the given course.
-     * @param OERMaterial $material
-     * @param Course $course
-     * @return array|FileType
+     * {@inheritdoc}
      */
     static public function oerModuleIntegrateMaterialToCourse(OERMaterial $material, Course $course)
     {
@@ -89,12 +80,24 @@ class CoreDocuments extends CorePlugin implements StudipModule, OERModule
             if (!$newfile) {
                 return [_('Daten konnten nicht kopiert werden!')];
             }
-            return $newfile;
+
+            return [
+                'type' => 'success',
+                'message' => _('Das Lernmaterial wurde kopiert.'),
+                'message_detail' => [],
+                'redirect_url' => URLHelper::getURL('dispatch.php/course/files', ['cid' => $course->id])
+            ];
         } else {
             if ($tmp_name) {
                 @unlink($tmp_name);
             }
-            return [_('Daten konnten nicht kopiert werden!')];
+
+            return [
+                'type' => 'error',
+                'message' => _('Beim Kopieren ist ein Fehler aufgetaucht.'),
+                'message_detail' => [_('Daten konnten nicht kopiert werden!')],
+                'redirect_url' => URLHelper::getURL('dispatch.php/oer/market/details/' . $material->id)
+            ];
         }
     }
 
diff --git a/lib/modules/OERModule.php b/lib/modules/OERModule.php
index 6cc89096ab0..4e71ebe6c13 100644
--- a/lib/modules/OERModule.php
+++ b/lib/modules/OERModule.php
@@ -5,7 +5,7 @@ interface OERModule
     /**
      * Determines if the StudipModule wants to handle the OERMaterial. Returns false if not.
      * @param OERMaterial $material
-     * @return false|Icon
+     * @return false
      */
     public static function oerModuleWantsToUseMaterial(OERMaterial $material);
 
@@ -14,7 +14,7 @@ interface OERModule
      * Now this module should put a copy of $material in its own area of the given course.
      * @param OERMaterial $material
      * @param Course $course
-     * @return void
+     * @return array
      */
     public static function oerModuleIntegrateMaterialToCourse(OERMaterial $material, Course $course);
 
-- 
GitLab