diff --git a/extensions/tags/src/Api/Controller/CreateTagController.php b/extensions/tags/src/Api/Controller/CreateTagController.php index ec8ccc329..fb5d5574e 100644 --- a/extensions/tags/src/Api/Controller/CreateTagController.php +++ b/extensions/tags/src/Api/Controller/CreateTagController.php @@ -25,6 +25,11 @@ class CreateTagController extends AbstractCreateController */ public $serializer = TagSerializer::class; + /** + * {@inheritdoc} + */ + public $include = ['parent']; + /** * @var Dispatcher */ diff --git a/extensions/tags/src/Command/CreateTagHandler.php b/extensions/tags/src/Command/CreateTagHandler.php index d3f9a900e..35680566b 100644 --- a/extensions/tags/src/Command/CreateTagHandler.php +++ b/extensions/tags/src/Command/CreateTagHandler.php @@ -51,6 +51,21 @@ class CreateTagHandler array_get($data, 'attributes.isHidden') ); + $parentId = array_get($data, 'relationships.parent.data.id'); + + if ($parentId !== null) { + $rootTags = Tag::whereNull('parent_id')->whereNotNull('position'); + + if ($parentId === 0) { + $tag->position = $rootTags->max('position') + 1; + } elseif ($rootTags->find($parentId)) { + $position = Tag::where('parent_id', $parentId)->max('position'); + + $tag->parent()->associate($parentId); + $tag->position = $position === null ? 0 : $position + 1; + } + } + $this->validator->assertValid($tag->getAttributes()); $tag->save();