Fixed possibility to create nested structure from the part edit page

This commit is contained in:
Jan Böhmer 2023-01-30 22:29:20 +01:00
parent d9e25d077d
commit 60446edd68
2 changed files with 23 additions and 28 deletions

View file

@ -322,6 +322,11 @@ abstract class AbstractStructuralDBElement extends AttachmentContainingDBElement
$this->parent = $new_parent; $this->parent = $new_parent;
//Add this element as child to the new parent
if (null !== $new_parent) {
$new_parent->getChildren()->add($this);
}
return $this; return $this;
} }
@ -340,18 +345,28 @@ abstract class AbstractStructuralDBElement extends AttachmentContainingDBElement
} }
/** /**
* @param static[]|Collection $elements * Adds the given element as child to this element.
* * @param static $child
* @return $this * @return $this
*/ */
public function setChildren($elements): self public function addChild(self $child): self
{ {
if (!is_array($elements) && !$elements instanceof Collection) { $this->children->add($child);
throw new InvalidArgumentException('$elements must be an array or Collection!'); //Children get this element as parent
$child->setParent($this);
return $this;
} }
$this->children = $elements; /**
* Removes the given element as child from this element.
* @param static $child
* @return $this
*/
public function removeChild(self $child): self
{
$this->children->removeElement($child);
//Children has no parent anymore
$child->setParent(null);
return $this; return $this;
} }

View file

@ -54,26 +54,6 @@ class StructuralEntityChoiceLoader extends AbstractChoiceLoader
return array_merge($tmp, $this->builder->typeToNodesList($this->options['class'], null)); return array_merge($tmp, $this->builder->typeToNodesList($this->options['class'], null));
} }
/*public function loadChoicesForValues(array $values, callable $value = null)
{
$tmp = parent::loadChoicesForValues($values, $value);
if ($this->options['allow_add'] && empty($tmp)) {
if (count($values) > 1) {
throw new \InvalidArgumentException('Cannot add multiple entities at once.');
}
//Dont create a new entity for the empty option
if ($values[0] === "" || $values[0] === null) {
return $tmp;
}
return [$this->createNewEntitiesFromValue($values[0])[0]];
}
return $tmp;
}*/
public function createNewEntitiesFromValue(string $value): array public function createNewEntitiesFromValue(string $value): array
{ {
if (!$this->options['allow_add']) { if (!$this->options['allow_add']) {