diff -r 5e7a0fedabdf -r 877f952ae2bd web/lib/Zend/Form/Element/Captcha.php --- a/web/lib/Zend/Form/Element/Captcha.php Thu Mar 21 17:31:31 2013 +0100 +++ b/web/lib/Zend/Form/Element/Captcha.php Thu Mar 21 19:50:53 2013 +0100 @@ -15,9 +15,9 @@ * @category Zend * @package Zend_Form * @subpackage Element - * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License - * @version $Id: Captcha.php 22328 2010-05-30 15:09:06Z bittarman $ + * @version $Id: Captcha.php 24848 2012-05-31 19:28:48Z rob $ */ /** @see Zend_Form_Element_Xhtml */ @@ -38,7 +38,7 @@ * @category Zend * @package Zend_Form * @subpackage Element - * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_Form_Element_Captcha extends Zend_Form_Element_Xhtml @@ -127,24 +127,6 @@ } /** - * Return all attributes - * - * @return array - */ - public function getAttribs() - { - $attribs = get_object_vars($this); - unset($attribs['helper']); - foreach ($attribs as $key => $value) { - if ('_' == substr($key, 0, 1)) { - unset($attribs[$key]); - } - } - - return $attribs; - } - - /** * Set options * * Overrides to allow passing captcha options @@ -154,16 +136,22 @@ */ public function setOptions(array $options) { + $captcha = null; + $captchaOptions = array(); + if (array_key_exists('captcha', $options)) { + $captcha = $options['captcha']; if (array_key_exists('captchaOptions', $options)) { - $this->setCaptcha($options['captcha'], $options['captchaOptions']); + $captchaOptions = $options['captchaOptions']; unset($options['captchaOptions']); - } else { - $this->setCaptcha($options['captcha']); } unset($options['captcha']); } parent::setOptions($options); + + if(null !== $captcha) { + $this->setCaptcha($captcha, $captchaOptions); + } return $this; } @@ -178,18 +166,25 @@ $captcha = $this->getCaptcha(); $captcha->setName($this->getFullyQualifiedName()); - $decorators = $this->getDecorators(); + if (!$this->loadDefaultDecoratorsIsDisabled()) { + $decorators = $this->getDecorators(); + $decorator = $captcha->getDecorator(); + $key = get_class($this->_getDecorator($decorator, null)); + + if (!empty($decorator) && !array_key_exists($key, $decorators)) { + array_unshift($decorators, $decorator); + } - $decorator = $captcha->getDecorator(); - if (!empty($decorator)) { - array_unshift($decorators, $decorator); + $decorator = array('Captcha', array('captcha' => $captcha)); + $key = get_class($this->_getDecorator($decorator[0], $decorator[1])); + + if ($captcha instanceof Zend_Captcha_Word && !array_key_exists($key, $decorators)) { + array_unshift($decorators, $decorator); + } + + $this->setDecorators($decorators); } - $decorator = array('Captcha', array('captcha' => $captcha)); - array_unshift($decorators, $decorator); - - $this->setDecorators($decorators); - $this->setValue($this->getCaptcha()->generate()); return parent::render($view); @@ -237,7 +232,8 @@ switch ($type) { case null: $loader = $this->getPluginLoader(self::CAPTCHA); - $cPrefix = rtrim($prefix, '_') . '_Captcha'; + $nsSeparator = (false !== strpos($prefix, '\\'))?'\\':'_'; + $cPrefix = rtrim($prefix, $nsSeparator) . $nsSeparator . 'Captcha'; $cPath = rtrim($path, '/\\') . '/Captcha'; $loader->addPrefixPath($cPrefix, $cPath); return parent::addPrefixPath($prefix, $path); @@ -253,7 +249,7 @@ /** * Load default decorators * - * @return void + * @return Zend_Form_Element_Captcha */ public function loadDefaultDecorators() {