From f684be3f1120a9575b6809a3150a4325405f0cec Mon Sep 17 00:00:00 2001
From: Ron Lucke <lucke@elan-ev.de>
Date: Thu, 10 Aug 2023 11:03:01 +0000
Subject: [PATCH] fix #2933

Closes #2933

Merge request studip/studip!2008
---
 .../Courseware/BlockTypes/BlockType.php       | 49 +++++++++++--------
 1 file changed, 29 insertions(+), 20 deletions(-)

diff --git a/lib/models/Courseware/BlockTypes/BlockType.php b/lib/models/Courseware/BlockTypes/BlockType.php
index 50bcc4254f1..88f07b13f4c 100644
--- a/lib/models/Courseware/BlockTypes/BlockType.php
+++ b/lib/models/Courseware/BlockTypes/BlockType.php
@@ -332,7 +332,13 @@ abstract class BlockType
     {
         static $file_map = [];
 
-        if ($this->block->container->structural_element->range_id === $rangeId) {
+        $file_ref = \FileRef::find($fileId);
+
+        if (!$file_ref) {
+            return '';
+        }
+
+        if ($file_ref->getRangeCourseId() === $rangeId) {
             return $fileId;
         }
 
@@ -341,16 +347,15 @@ abstract class BlockType
         }
 
         $user = \User::findCurrent();
-        if ($file_ref = \FileRef::find($fileId)) {
-            $copiedFile = \FileManager::copyFile(
-                $file_ref->getFiletype(),
-                $this->getDestinationFolder($user, $rangeId),
-                $user
-            );
+        $destinationFolder = $this->getDestinationFolder($user, $rangeId);
+        $copiedFile = \FileManager::copyFile(
+            $file_ref->getFiletype(),
+            $destinationFolder,
+            $user
+        );
 
-            if (is_object($copiedFile)) {
-                return $file_map[$fileId] = $copiedFile->id;
-            }
+        if (is_object($copiedFile)) {
+            return $file_map[$fileId] = $copiedFile->id;
         }
 
         return '';
@@ -368,7 +373,13 @@ abstract class BlockType
     {
         static $folder_map = [];
 
-        if ($this->block->container->structural_element->range_id === $rangeId) {
+        $sourceFolder = \Folder::find($folderId);
+
+        if (!$sourceFolder) {
+            return '';
+        }
+
+        if ($sourceFolder->getRangeCourseId() === $rangeId) {
             return $folderId;
         }
 
@@ -378,16 +389,14 @@ abstract class BlockType
 
         $user = \User::findCurrent();
         $destinationFolder = $this->getDestinationFolder($user, $rangeId);
-        if ($sourceFolder = \Folder::find($folderId)) {
-            $copiedFolder = \FileManager::copyFolder(
-                $sourceFolder->getTypedFolder(),
-                $destinationFolder,
-                $user
-            );
+        $copiedFolder = \FileManager::copyFolder(
+            $sourceFolder->getTypedFolder(),
+            $destinationFolder,
+            $user
+        );
 
-            if (is_object($copiedFolder)) {
-                return $folder_map[$folderId] = $copiedFolder->id;
-            }
+        if (is_object($copiedFolder)) {
+            return $folder_map[$folderId] = $copiedFolder->id;
         }
 
         return '';
-- 
GitLab