[CaptchaType] Cleaning options management (fixes #15)
This commit is contained in:
parent
f9c57e6970
commit
0453ae2e0e
|
@ -23,83 +23,10 @@ use Gregwar\CaptchaBundle\DataTransformer\EmptyTransformer;
|
||||||
class CaptchaType extends AbstractType
|
class CaptchaType extends AbstractType
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* The image width
|
* Options
|
||||||
* @var integer
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $width;
|
private $options = array();
|
||||||
|
|
||||||
/**
|
|
||||||
* The image height
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
protected $height;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The code length
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
protected $length;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate image or data
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
protected $asFile;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Keep value between two requests ?
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
protected $keepValue;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Charset used
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $charset;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Folder to save captcha images in,
|
|
||||||
* relative to public web folder
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $imageFolder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Public web folder
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $webPath;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Frequence of garbage collection in fractions of 1
|
|
||||||
* @var int
|
|
||||||
*/
|
|
||||||
protected $gcFreq;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Captcha font
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $font;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Captcha quality
|
|
||||||
* @var int
|
|
||||||
*/
|
|
||||||
protected $quality;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Maximum age of images in minutes
|
|
||||||
* @var int
|
|
||||||
*/
|
|
||||||
protected $expiration;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The session
|
|
||||||
* @var Symfony\Component\HttpFoundation\Session
|
|
||||||
*/
|
|
||||||
protected $session;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Session key
|
* Session key
|
||||||
|
@ -107,23 +34,10 @@ class CaptchaType extends AbstractType
|
||||||
*/
|
*/
|
||||||
private $key = 'captcha';
|
private $key = 'captcha';
|
||||||
|
|
||||||
|
|
||||||
public function __construct(Session $session, $config)
|
public function __construct(Session $session, $config)
|
||||||
{
|
{
|
||||||
$this->session = $session;
|
$this->session = $session;
|
||||||
|
$this->options = $config;
|
||||||
$this->width = $config['width'];
|
|
||||||
$this->height = $config['height'];
|
|
||||||
$this->length = $config['length'];
|
|
||||||
$this->charset = $config['charset'];
|
|
||||||
$this->keepValue = $config['keep_value'];
|
|
||||||
$this->asFile = $config['as_file'];
|
|
||||||
$this->imageFolder = $config['image_folder'];
|
|
||||||
$this->webPath = $config['web_path'];
|
|
||||||
$this->gcFreq = $config['gc_freq'];
|
|
||||||
$this->expiration = $config['expiration'];
|
|
||||||
$this->font = $config['font'];
|
|
||||||
$this->quality = $config['quality'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildForm(FormBuilder $builder, array $options)
|
public function buildForm(FormBuilder $builder, array $options)
|
||||||
|
@ -139,21 +53,28 @@ class CaptchaType extends AbstractType
|
||||||
{
|
{
|
||||||
$fingerprint = null;
|
$fingerprint = null;
|
||||||
|
|
||||||
if ($this->session->has($this->key.'_fingerprint')) {
|
if ($this->options['keep_value'] && $this->session->has($this->key.'_fingerprint')) {
|
||||||
$fingerprint = $this->session->get($this->key.'_fingerprint');
|
$fingerprint = $this->session->get($this->key.'_fingerprint');
|
||||||
}
|
}
|
||||||
|
|
||||||
$generator = new CaptchaGenerator($this->generateCaptchaValue(), $this->imageFolder, $this->webPath, $this->gcFreq, $this->expiration, $this->font, $fingerprint, $this->quality);
|
$generator = new CaptchaGenerator($this->generateCaptchaValue(),
|
||||||
|
$this->options['image_folder'],
|
||||||
|
$this->options['web_path'],
|
||||||
|
$this->options['gc_freq'],
|
||||||
|
$this->options['expiration'],
|
||||||
|
$this->options['font'],
|
||||||
|
$fingerprint,
|
||||||
|
$this->options['quality']);
|
||||||
|
|
||||||
if ($this->asFile) {
|
if ($this->options['as_file']) {
|
||||||
$view->set('captcha_code', $generator->getFile($this->width, $this->height));
|
$view->set('captcha_code', $generator->getFile($this->options['width'], $this->options['height']));
|
||||||
} else {
|
} else {
|
||||||
$view->set('captcha_code', $generator->getCode($this->width, $this->height));
|
$view->set('captcha_code', $generator->getCode($this->options['width'], $this->options['height']));
|
||||||
}
|
}
|
||||||
$view->set('captcha_width', $this->width);
|
$view->set('captcha_width', $this->options['width']);
|
||||||
$view->set('captcha_height', $this->height);
|
$view->set('captcha_height', $this->options['height']);
|
||||||
|
|
||||||
if ($this->keepValue) {
|
if ($this->options['keep_value']) {
|
||||||
$this->session->set($this->key.'_fingerprint', $generator->getFingerprint());
|
$this->session->set($this->key.'_fingerprint', $generator->getFingerprint());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,26 +83,10 @@ class CaptchaType extends AbstractType
|
||||||
|
|
||||||
public function getDefaultOptions(array $options = array())
|
public function getDefaultOptions(array $options = array())
|
||||||
{
|
{
|
||||||
if (isset($options['width'])) {
|
$this->options = array_replace($this->options, $options);
|
||||||
$this->width = $options['width'];
|
$this->options['property_path'] = false;
|
||||||
}
|
|
||||||
if (isset($options['height'])) {
|
|
||||||
$this->height = $options['height'];
|
|
||||||
}
|
|
||||||
if (isset($options['length'])) {
|
|
||||||
$this->length = $options['length'];
|
|
||||||
}
|
|
||||||
if (isset($options['as_file'])) {
|
|
||||||
$this->asFile = $options['as_file'];
|
|
||||||
}
|
|
||||||
|
|
||||||
return array(
|
return $this->options;
|
||||||
'width' => $this->width,
|
|
||||||
'height' => $this->height,
|
|
||||||
'length' => $this->length,
|
|
||||||
'as_file' => $this->asFile,
|
|
||||||
'property_path' => false,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getParent(array $options)
|
public function getParent(array $options)
|
||||||
|
@ -196,11 +101,11 @@ class CaptchaType extends AbstractType
|
||||||
|
|
||||||
private function generateCaptchaValue()
|
private function generateCaptchaValue()
|
||||||
{
|
{
|
||||||
if (!$this->keepValue || !$this->session->has($this->key)) {
|
if (!$this->options['keep_value'] || !$this->session->has($this->key)) {
|
||||||
$value = '';
|
$value = '';
|
||||||
$chars = str_split($this->charset);
|
$chars = str_split($this->options['charset']);
|
||||||
|
|
||||||
for ($i=0; $i<$this->length; $i++) {
|
for ($i=0; $i<$this->options['length']; $i++) {
|
||||||
$value.= $chars[array_rand($chars)];
|
$value.= $chars[array_rand($chars)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue