[], 'containers' => [], 'blocks' => [], ]; if ($rangeId !== null && $rangeType !== null) { $newElement = $source->copyToRange( $user, $rangeId, $rangeType, $purpose, $duplicate, $mapping, ); } elseif ($target !== null) { $newElement = $source->copy( $user, $target, $purpose, $mapping, $duplicate ); } else { throw new \InvalidArgumentException('Entweder target oder rangeId + rangeType müssen gesetzt sein.'); } $unit = $newUnit ?? $newElement->findUnit(); self::performMapping($mapping, $unit); return $newElement; } private static function performMapping(array $mapping, Unit $newUnit): void { foreach ($mapping['blocks'] ?? [] as $block) { $block->type->performMapping($mapping, $newUnit); } } }