private function addDeliverySection(ArrayNodeDefinition $node)
{
$node->validate()->ifTrue(function ($v) {
foreach ($v['methods'] as $methodCode => $service) {
if (null === $service || '' === $service) {
foreach ($v['services'] as $serviceConf) {
if ($methodCode === $serviceConf['code']) {
break 2;
}
}
return true;
}
}
return false;
})->thenInvalid('Custom delivery methods require a service id. Provided delivery methods need to be configured with their method code as key.')->end()->children()->arrayNode('services')->children()->arrayNode('free_address_required')->children()->scalarNode('name')->defaultValue('free_address_required')->cannotBeEmpty()->end()->scalarNode('code')->defaultValue('free_address_required')->cannotBeEmpty()->end()->scalarNode('priority')->defaultValue(10)->cannotBeEmpty()->end()->end()->end()->arrayNode('free_address_not_required')->children()->scalarNode('name')->defaultValue('free_address_not_required')->cannotBeEmpty()->end()->scalarNode('code')->defaultValue('free_address_not_required')->cannotBeEmpty()->end()->scalarNode('priority')->defaultValue(10)->cannotBeEmpty()->end()->end()->end()->end()->end()->arrayNode('methods')->useAttributeAsKey('code')->prototype('scalar')->end()->end()->end();
}