diff --git a/lib/models/Courseware/BlockTypes/BlockType.php b/lib/models/Courseware/BlockTypes/BlockType.php index 98e24aef69bbbfa0a7f1320367ccc46163a4f362..c1429157791fc3871a11ce702919254318a20b3b 100755 --- a/lib/models/Courseware/BlockTypes/BlockType.php +++ b/lib/models/Courseware/BlockTypes/BlockType.php @@ -302,6 +302,15 @@ abstract class BlockType */ protected function copyFileById(string $fileId, string $rangeId): string { + if ($this->block->container->structural_element->range_id === $rangeId) { + return $fileId; + } + + static $file_map = []; + if (isset($file_map[$fileId])) { + return $file_map[$fileId]; + } + $user = \User::findCurrent(); if ($file_ref = \FileRef::find($fileId)) { $copiedFile = \FileManager::copyFile( @@ -310,7 +319,9 @@ abstract class BlockType $user ); - return isset($copiedFile->id) ? $copiedFile->id : ''; + if (isset($copiedFile)) { + return $file_map[$fileId] = $copiedFile->id; + } } return ''; @@ -326,6 +337,15 @@ abstract class BlockType */ protected function copyFolderById(string $folderId, string $rangeId): string { + if ($this->block->container->structural_element->range_id === $rangeId) { + return $folderId; + } + + static $folder_map = []; + if (isset($folder_map[$folderId])) { + return $folder_map[$folderId]; + } + $user = \User::findCurrent(); $destinationFolder = $this->getDestinationFolder($user, $rangeId); if ($sourceFolder = \Folder::find($folderId)) { @@ -335,7 +355,7 @@ abstract class BlockType $user ); - return $copiedFolder->id; + return $folder_map[$folderId] = $copiedFolder->id; } return '';