-
Notifications
You must be signed in to change notification settings - Fork 264
/
CaptchaType.php
109 lines (94 loc) · 2.44 KB
/
CaptchaType.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php
/*
* This file is part of the GenemuFormBundle package.
*
* (c) Olivier Chauvel <olivier@generation-multiple.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Genemu\Bundle\FormBundle\Form\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Genemu\Bundle\FormBundle\Gd\Type\Captcha;
use Genemu\Bundle\FormBundle\Form\Core\Validator\CaptchaValidator;
/**
* CaptchaType
*
* @author Olivier Chauvel <olivier@generation-multiple.com>
*/
class CaptchaType extends AbstractType
{
private $captcha;
private $options;
/**
* Constructs
*
* @param Captcha $captcha
* @param array $options
*/
public function __construct(Captcha $captcha, array $options)
{
$this->captcha = $captcha;
$this->options = $options;
}
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$this->captcha->setOptions($options);
$builder
->addEventSubscriber(new CaptchaValidator($this->captcha))
->setAttribute('captcha', $this->captcha)
;
}
/**
* {@inheritdoc}
*/
public function buildView(FormView $view, FormInterface $form, array $options)
{
$captcha = $this->captcha;
$view->vars = array_replace($view->vars, array(
'value' => '',
'src' => $captcha->getBase64($options['format']),
'width' => $captcha->getWidth(),
'height' => $captcha->getHeight(),
));
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$defaults = array_merge(
array('attr' => array('autocomplete' => 'off')),
$this->options
);
$resolver->setDefaults($defaults);
}
/**
* {@inheritdoc}
*/
public function getParent()
{
return 'Symfony\Component\Form\Extension\Core\Type\TextType';
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'genemu_captcha';
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'genemu_captcha';
}
}