public function handle($name, array $options, ClassMetadata $classMetadata, Configuration $configuration)
 {
     if (!empty($options['control'])) {
         return NULL;
     }
     if (!($mapping = MetadataHelpers::getAssociationMapping($classMetadata, $name, ClassMetadata::ONE_TO_ONE))) {
         return NULL;
     }
     $targetMetadata = $this->entityManager->getDao($mapping['targetEntity'])->getClassMetadata();
     return new ContainerBuilder($targetMetadata, new Container(), $configuration);
 }
 public function handle($name, array $options, ClassMetadata $classMetadata, Configuration $configuration)
 {
     if (!($mapping = MetadataHelpers::getAssociationMapping($classMetadata, $name, ClassMetadata::MANY_TO_MANY))) {
         return NULL;
     }
     $options += ['control' => ControlFactory::MULTI_SELECT_BOX, 'fill' => TRUE];
     $control = ControlFactory::create($options['control'], ['\\Nette\\Forms\\Controls\\MultiChoiceControl'], ControlFactory::MULTI_SELECT_BOX);
     if (empty($options['caption'])) {
         $control->caption = $configuration->getLabelingStrategy()->getControlLabel($name, $classMetadata);
     } else {
         $control->caption = $options['caption'];
     }
     $this->fillOptions($options, $control, $mapping);
     return new ControlBuilder($control);
 }
 public function handle($name, array $options, ClassMetadata $classMetadata, Configuration $configuration)
 {
     if (!($mapping = MetadataHelpers::getAssociationMapping($classMetadata, $name, [ClassMetadata::MANY_TO_ONE, ClassMetadata::ONE_TO_ONE]))) {
         return NULL;
     }
     $options += ['control' => ControlFactory::SELECT_BOX, 'fill' => TRUE];
     $control = ControlFactory::create($options['control'], self::$allowedControls, ControlFactory::SELECT_BOX);
     if (empty($options['caption'])) {
         $control->caption = $configuration->getLabelingStrategy()->getControlLabel($name, $classMetadata);
     } else {
         $control->caption = $options['caption'];
     }
     if ($control instanceof ChoiceControl) {
         $this->setPrompt($options, $control, $mapping);
         $this->fillOptions($options, $control, $mapping);
     }
     return new ControlBuilder($control);
 }
 public function handle($name, array $options, ClassMetadata $classMetadata, Configuration $configuration)
 {
     if (!($mapping = MetadataHelpers::getAssociationMapping($classMetadata, $name, ClassMetadata::ONE_TO_MANY))) {
         return NULL;
     }
     $options += ['createDefault' => 0];
     $dao = $this->entityManager->getDao($mapping['targetEntity']);
     $containerPrototype = new Container();
     $replicator = new ClonnableReplicator(function (Container $container) use($containerPrototype) {
         $clone = function (Container $targetContainer, Container $sourceContainer) use(&$clone) {
             /** @var IComponent $component */
             foreach ($sourceContainer->getComponents() as $component) {
                 if ($component instanceof Container && !$component instanceof ClonnableReplicator) {
                     /** @var Container $component */
                     $container = new Container();
                     $container->setCurrentGroup($component->getCurrentGroup());
                     $container->onValidate = $component->onValidate;
                     $targetContainer[$component->getName()] = $container;
                     $clone($container, $component);
                 } else {
                     $targetContainer[$component->getName()] = $control = clone $component;
                     if ($control instanceof BaseControl) {
                         $clonner = function () {
                             /** @var BaseControl $this */
                             $this->control = clone $this->control;
                             $this->label = clone $this->label;
                         };
                         $clonner = $clonner->bindTo($control, $control);
                         $clonner();
                     }
                 }
             }
         };
         $clone($container, $containerPrototype);
     }, $options['createDefault']);
     return new ReplicatorBuilder($dao->getClassMetadata(), $replicator, $configuration, $containerPrototype);
 }