/** * @param FormEvent $event */ public function buildCredentials(FormEvent $event) { /** @var array $data */ $data = $event->getData(); if (is_null($data)) { return; } $propertyPath = is_array($data) ? '[factoryName]' : 'factoryName'; $factoryName = PropertyAccess::createPropertyAccessor()->getValue($data, $propertyPath); if (empty($factoryName)) { return; } $form = $event->getForm(); $form->add('config', 'form'); $configForm = $form->get('config'); $gatewayFactory = $this->registry->getGatewayFactory($factoryName); $config = $gatewayFactory->createConfig(); $propertyPath = is_array($data) ? '[config]' : 'config'; $firstTime = false == PropertyAccess::createPropertyAccessor()->getValue($data, $propertyPath); foreach ($config['payum.default_options'] as $name => $value) { $propertyPath = is_array($data) ? "[config][{$name}]" : "config[{$name}]"; if ($firstTime) { PropertyAccess::createPropertyAccessor()->setValue($data, $propertyPath, $value); } $type = is_bool($value) ? 'checkbox' : 'text'; $options = array(); $options['required'] = in_array($name, $config['payum.required_options']); $configForm->add($name, $type, $options); } $event->setData($data); }
/** * @param GatewayConfigInterface $gatewayConfig * * @return GatewayInterface */ protected function createGateway(GatewayConfigInterface $gatewayConfig) { $config = $gatewayConfig->getConfig(); if (isset($config['factory'])) { $factory = $this->gatewayFactoryRegistry->getGatewayFactory($config['factory']); unset($config['factory']); } else { // BC $factory = $this->gatewayFactoryRegistry->getGatewayFactory($gatewayConfig->getFactoryName()); } return $factory->create($config); }