Passed
Push — master ( 9f8783...853dd9 )
by Dāvis
04:39
created

ReCaptchaConfigurator::configureType()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 9
nc 1
nop 3
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Sludio\HelperBundle\Captcha\Configurator;
4
5
use Symfony\Component\Config\Definition\Builder\NodeBuilder;
6
use Symfony\Component\DependencyInjection\ContainerBuilder;
7
use Symfony\Component\DependencyInjection\Reference;
8
use Sludio\HelperBundle\Captcha\Validator\Constraint\IsTrueValidator;
9
use Sludio\HelperBundle\Captcha\Form\Type\RecaptchaType;
10
use Sludio\HelperBundle\Captcha\Router\LocaleResolver;
11
12
class ReCaptchaConfigurator implements CaptchaConfiguratorInterface
13
{
14
    public function buildConfiguration(NodeBuilder $node)
15
    {
16
        // @formatter:off
17
        $node
18
            ->scalarNode('public_key')->isRequired()->cannotBeEmpty()->end()
19
            ->scalarNode('private_key')->isRequired()->cannotBeEmpty()->end()
0 ignored issues
show
Bug introduced by
The method scalarNode() does not exist on Symfony\Component\Config...der\NodeParentInterface. It seems like you code against a sub-type of Symfony\Component\Config...der\NodeParentInterface such as Symfony\Component\Config...ion\Builder\NodeBuilder. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

19
            ->/** @scrutinizer ignore-call */ scalarNode('private_key')->isRequired()->cannotBeEmpty()->end()
Loading history...
20
            ->booleanNode('verify_host')->defaultValue(false)->end()
21
            ->booleanNode('ajax')->defaultValue(false)->end()
22
            ->scalarNode('locale_key')->defaultValue('en')->end()
23
            ->scalarNode('template')->defaultValue('SludioHelperBundle:Captcha:sludio_helper_captcha_recaptcha_widget.html.twig')->end()
24
            ->scalarNode('resolver_class')->defaultValue(LocaleResolver::class)->end()
25
            ->scalarNode('type_class')->defaultValue(RecaptchaType::class)->end()
26
            ->scalarNode('validator_class')->defaultValue(IsTrueValidator::class)->end()
27
            ->scalarNode('validate')->defaultValue(true)->end()
28
            ->arrayNode('locales')
29
                ->requiresAtLeastOneElement()
30
                ->beforeNormalization()
31
                    ->ifString()
32
                        ->then(function($v) {
33
                            return preg_split('/\s*,\s*/', $v);
34
                        })
35
                    ->end()
36
                ->prototype('scalar')->end()
37
            ->end()
38
            ->arrayNode('http_proxy')
39
                ->addDefaultsIfNotSet()
40
                ->children()
41
                    ->scalarNode('host')->defaultValue(null)->end()
42
                    ->scalarNode('port')->defaultValue(null)->end()
43
                    ->scalarNode('auth')->defaultValue(null)->end()
44
                ->end()
45
            ->end()
46
            ->arrayNode('options')
47
                ->addDefaultsIfNotSet()
48
                ->children()
49
                    ->booleanNode('compound')->defaultValue(false)->end()
50
                    ->scalarNode('url_challenge')->defaultValue(null)->end()
51
                    ->scalarNode('url_noscript')->defaultValue(null)->end()
52
                    ->scalarNode('theme')->defaultValue('light')->end()
53
                    ->scalarNode('type')->defaultValue('image')->end()
54
                    ->scalarNode('size')->defaultValue('normal')->end()
55
                    ->scalarNode('callback')->defaultValue(null)->end()
56
                    ->scalarNode('expiredDallback')->defaultValue(null)->end()
57
                    ->booleanNode('defer')->defaultValue(false)->end()
58
                    ->booleanNode('async')->defaultValue(false)->end()
59
                ->end()
60
            ->end()
61
        ;
62
        // @formatter:on
63
    }
64
65
    public function configureClient(ContainerBuilder $container, $clientServiceKey, array $options = [])
66
    {
67
        $this->configureResolver($container, $clientServiceKey, $resolver);
68
        $this->configureType($container, $clientServiceKey, $resolver);
69
        $this->configureValidator($container, $clientServiceKey);
70
    }
71
72
    private function configureResolver(ContainerBuilder $container, $clientServiceKey, &$resolver)
73
    {
74
        $resolver = $clientServiceKey.'.resolver';
75
        $resolverClass = $container->getParameter($clientServiceKey.'.resolver_class');
76
77
        $resolverDefinition = $container->register($resolver, $resolverClass);
78
        $resolverDefinition->setPublic(false);
79
        $resolverDefinition->setArguments([
80
            $container->getParameter($clientServiceKey.'.locale_key'),
81
            new Reference('request_stack'),
82
            $container->getParameter($clientServiceKey.'.locales'),
83
        ]);
84
    }
85
86
    private function configureType(ContainerBuilder $container, $clientServiceKey, $resolver)
87
    {
88
        $type = $clientServiceKey.'.form.type';
89
        $typeClass = $container->getParameter($clientServiceKey.'.type_class');
90
        $typeDefinition = $container->register($type, $typeClass);
91
        $typeDefinition->setArguments([
92
            $container->getParameter($clientServiceKey.'.public_key'),
93
            $container->getParameter($clientServiceKey.'.ajax'),
94
            $container->getDefinition($resolver),
95
            $container->getParameter($clientServiceKey.'.options'),
96
        ]);
97
        $typeDefinition->addTag('form.type');
98
    }
99
100
    private function configureValidator(ContainerBuilder $container, $clientServiceKey)
101
    {
102
        $validator = $clientServiceKey.'.validator.true';
103
        $validatorClass = $container->getParameter($clientServiceKey.'.validator_class');
104
        $validatorDefinition = $container->register($validator, $validatorClass);
105
        $validatorDefinition->setArguments([
106
            $container->getParameter($clientServiceKey.'.private_key'),
107
            $container->getParameter($clientServiceKey.'.http_proxy'),
108
            $container->getParameter($clientServiceKey.'.verify_host'),
109
            new Reference('request_stack'),
110
            $container->getParameter($clientServiceKey.'.validate'),
111
        ]);
112
        $validatorDefinition->addTag('validator.constraint_validator');
113
    }
114
}
115