From 2faca0609f43c482672926e3ef8cad93cfbf1352 Mon Sep 17 00:00:00 2001 From: Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de> Date: Fri, 12 Aug 2022 08:21:15 +0000 Subject: [PATCH] fix order during copy, don't use self to access methods on $this, fixes #1361 Closes #1361 Merge request studip/studip!892 --- lib/models/Courseware/Container.php | 8 +++----- lib/models/Courseware/StructuralElement.php | 21 ++++++++------------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/lib/models/Courseware/Container.php b/lib/models/Courseware/Container.php index b42856d56ef..1f621e5c883 100755 --- a/lib/models/Courseware/Container.php +++ b/lib/models/Courseware/Container.php @@ -120,7 +120,7 @@ class Container extends \SimpleORMap $container->store(); - $blockMap = self::copyBlocks($user, $container, $this); + $blockMap = $this->copyBlocks($user, $container); $container['payload'] = $container->type->copyPayload($blockMap); @@ -129,13 +129,11 @@ class Container extends \SimpleORMap return $container; } - private function copyBlocks(User $user, Container $newContainer, Container $remoteContainer): array + private function copyBlocks(User $user, Container $newContainer): array { $blockMap = []; - $blocks = Block::findBySQL('container_id = ?', [$remoteContainer->id]); - - foreach ($blocks as $block) { + foreach ($this->blocks as $block) { $newBlock = $block->copy($user, $newContainer); $blockMap[$block->id] = $newBlock->id; } diff --git a/lib/models/Courseware/StructuralElement.php b/lib/models/Courseware/StructuralElement.php index f0a9cf352b2..5123143facc 100755 --- a/lib/models/Courseware/StructuralElement.php +++ b/lib/models/Courseware/StructuralElement.php @@ -668,7 +668,7 @@ SQL; */ public function copy(User $user, StructuralElement $parent, string $purpose = ''): StructuralElement { - $file_ref_id = self::copyImage($user, $parent); + $file_ref_id = $this->copyImage($user, $parent); $element = self::build([ 'parent_id' => $parent->id, @@ -686,9 +686,9 @@ SQL; $element->store(); - self::copyContainers($user, $element); + $this->copyContainers($user, $element); - self::copyChildren($user, $element, $purpose); + $this->copyChildren($user, $element, $purpose); return $element; } @@ -714,7 +714,7 @@ SQL; { // merge with target if (!$target->image_id) { - $target->image_id = self::copyImage($user, $target); + $target->image_id = $this->copyImage($user, $target); } if ($target->title === 'neue Seite' || $target->title === 'New page') { @@ -752,29 +752,24 @@ SQL; $target->store(); // add Containers to target - self::copyContainers($user, $target); + $this->copyContainers($user, $target); // copy Children - - self::copyChildren($user, $target); + $this->copyChildren($user, $target); return $this; } private function copyContainers(User $user, StructuralElement $newElement): void { - $containers = \Courseware\Container::findBySQL('structural_element_id = ?', [$this->id]); - - foreach ($containers as $container) { + foreach ($this->containers as $container) { $container->copy($user, $newElement); } } private function copyChildren(User $user, StructuralElement $newElement, string $purpose = ''): void { - $children = self::findBySQL('parent_id = ?', [$this->id]); - - foreach ($children as $child) { + foreach ($this->children as $child) { $child->copy($user, $newElement, $purpose); } } -- GitLab