/**
* {@inheritdoc}
*/
public function save(ClassMetadata $meta, Component $component, $entity)
{
if (!$component instanceof ToManyContainer) {
return FALSE;
}
if (!($collection = $this->getCollection($meta, $entity, $component->getName()))) {
return FALSE;
}
$em = $this->mapper->getEntityManager();
$class = $meta->getAssociationTargetClass($component->getName());
$relationMeta = $em->getClassMetadata($class);
/** @var Nette\Forms\Container $container */
foreach ($component->getComponents(FALSE, 'Nette\\Forms\\Container') as $container) {
$isNew = substr($container->getName(), 0, strlen(ToManyContainer::NEW_PREFIX)) === ToManyContainer::NEW_PREFIX;
$name = $isNew ? substr($container->getName(), strlen(ToManyContainer::NEW_PREFIX)) : $container->getName();
if (!($relation = $collection->get($name))) {
// entity was added from the client
if (!$component->isAllowedRemove()) {
continue;
}
$collection[$name] = $relation = $relationMeta->newInstance();
}
$this->mapper->save($relation, $container);
}
return TRUE;
}