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/models/Courseware | |
| parent | 35819b9364a04d7c3c223f5654a4d86d17761efa (diff) | |
CoursewareImport
Closes #886 and #906
Diffstat (limited to 'lib/models/Courseware')
| -rwxr-xr-x | lib/models/Courseware/StructuralElement.php | 80 |
1 files changed, 69 insertions, 11 deletions
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]); |
