diff options
| author | Ron Lucke <lucke@elan-ev.de> | 2022-04-26 07:23:04 +0000 |
|---|---|---|
| committer | Marcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de> | 2022-04-26 07:23:04 +0000 |
| commit | d0a835f4a67c890cc0a53973ba5066a49b458f97 (patch) | |
| tree | cb38983809207894423e632c4b8b4b5284ffd01b /lib | |
| parent | 35819b9364a04d7c3c223f5654a4d86d17761efa (diff) | |
CoursewareImport
Closes #886 and #906
Diffstat (limited to 'lib')
| -rwxr-xr-x | lib/classes/JsonApi/Routes/Courseware/StructuralElementsCopy.php | 17 | ||||
| -rwxr-xr-x | lib/models/Courseware/StructuralElement.php | 80 |
2 files changed, 83 insertions, 14 deletions
diff --git a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsCopy.php b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsCopy.php index 2dfee89..6e14b72 100755 --- a/lib/classes/JsonApi/Routes/Courseware/StructuralElementsCopy.php +++ b/lib/classes/JsonApi/Routes/Courseware/StructuralElementsCopy.php @@ -33,7 +33,11 @@ class StructuralElementsCopy extends NonJsonApiController throw new AuthorizationFailedException(); } - $newElement = $this->copyElement($user, $sourceElement, $newParent); + if ($data['migrate']) { + $newElement = $this->mergeElement($user, $sourceElement, $newParent); + } else { + $newElement = $this->copyElement($user, $sourceElement, $newParent); + } if ($data['remove_purpose']) { $newElement->purpose = ''; } @@ -43,9 +47,16 @@ class StructuralElementsCopy extends NonJsonApiController private function copyElement(\User $user, StructuralElement $sourceElement, StructuralElement $newParent) { - $new_element = $sourceElement->copy($user, $newParent); + $newElement = $sourceElement->copy($user, $newParent); + + return $newElement; + } + + private function mergeElement(\User $user, StructuralElement $sourceElement, StructuralElement $targetElement) + { + $newElement = $sourceElement->merge($user, $targetElement); - return $new_element; + return $newElement; } /** diff --git a/lib/models/Courseware/StructuralElement.php b/lib/models/Courseware/StructuralElement.php index b135e4a..ee5e92a 100755 --- a/lib/models/Courseware/StructuralElement.php +++ b/lib/models/Courseware/StructuralElement.php @@ -662,17 +662,7 @@ SQL; */ public function copy(User $user, StructuralElement $parent): StructuralElement { - /** @var ?\FileRef $original_file_ref */ - $original_file_ref = \FileRef::find($this->image_id); - if ($original_file_ref) { - $instance = new Instance($this->getCourseware($parent->range_id, $parent->range_type)); - $folder = \Courseware\Filesystem\PublicFolder::findOrCreateTopFolder($instance); - /** @var \FileRef $file_ref */ - $file_ref = \FileManager::copyFile($original_file_ref->getFileType(), $folder, $user); - $file_ref_id = $file_ref->id; - } else { - $file_ref_id = null; - } + $file_ref_id = self::copyImage($user, $parent); $element = self::build([ 'parent_id' => $parent->id, @@ -697,6 +687,74 @@ SQL; return $element; } + private function copyImage(User $user, StructuralElement $parent) : ?String + { + $file_ref_id = null; + + /** @var ?\FileRef $original_file_ref */ + $original_file_ref = \FileRef::find($this->image_id); + if ($original_file_ref) { + $instance = new Instance($this->getCourseware($parent->range_id, $parent->range_type)); + $folder = \Courseware\Filesystem\PublicFolder::findOrCreateTopFolder($instance); + /** @var \FileRef $file_ref */ + $file_ref = \FileManager::copyFile($original_file_ref->getFileType(), $folder, $user); + $file_ref_id = $file_ref->id; + } + + return $file_ref_id; + } + + public function merge(User $user, StructuralElement $target): StructuralElement + { + // merge with target + if (!$target->image_id) { + $target->image_id = self::copyImage($user, $target); + } + + if ($target->title === 'neue Seite' || $target->title === 'New page') { + $target->title = $this->title; + } + + if (!$target->purpose) { + $target->purpose = $this->purpose; + } + + if (!$target->payload['color']) { + $target->payload['color'] = $this->payload['color']; + } + + if (!$target->payload['description']) { + $target->payload['description'] = $this->payload['description']; + } + + if (!$target->payload['license_type']) { + $target->payload['license_type'] = $this->payload['license_type']; + } + + if (!$target->payload['required_time']) { + $target->payload['required_time'] = $this->payload['required_time']; + } + + if (!$target->payload['difficulty_start']) { + $target->payload['difficulty_start'] = $this->payload['difficulty_start']; + } + + if (!$target->payload['difficulty_end']) { + $target->payload['difficulty_end'] = $this->payload['difficulty_end']; + } + + $target->store(); + + // add Containers to target + self::copyContainers($user, $target); + + // copy Children + + self::copyChildren($user, $target); + + return $this; + } + private function copyContainers(User $user, StructuralElement $newElement): void { $containers = \Courseware\Container::findBySQL('structural_element_id = ?', [$this->id]); |
