* @copyright 2006-2008 by Philippe Jausions / 11abacus * @license http://www.opensource.org/licenses/bsd-license.php New BSD * @version CVS: $Id: Image.php,v 1.1 2008/04/26 23:27:30 jausions Exp $ * @link http://pear.php.net/package/HTML_QuickForm_CAPTCHA */ /** * Element for HTML_QuickForm to display a CAPTCHA image * * The HTML_QuickForm_CAPTCHA package adds an element to the * HTML_QuickForm package to display a CAPTCHA image. * * Options for the element * * * This package requires the use of a PHP session. * * @category HTML * @package HTML_QuickForm_CAPTCHA * @author Philippe Jausions * @copyright 2006-2008 by Philippe Jausions / 11abacus * @license http://www.opensource.org/licenses/bsd-license.php New BSD * @version Release: 0.3.0 * @link http://pear.php.net/package/HTML_QuickForm_CAPTCHA * @see Text_CAPTCHA_Driver_Image */ class HTML_QuickForm_CAPTCHA_Image extends HTML_QuickForm_CAPTCHA { public function __construct( $elementName = null, $elementLabel = null, $options = null, $attributes = null ) { return parent::__construct( $elementName, $elementLabel, $options, $attributes ); } /** * Default options * * @var array * @access protected */ var $_options = array( 'sessionVar' => '_HTML_QuickForm_CAPTCHA', 'width' => '200', 'height' => '80', 'alt' => 'Click to view another image', 'callback' => '', 'imageOptions' => null, 'phrase' => null, ); /** * CAPTCHA driver * * @var string * @access protected */ var $_CAPTCHA_driver = 'Image'; /** * Code based in HTML_QuickForm_text::getTemplate() * In order to render correctly the captcha in different layouts * @param string $layout * * @return string */ public static function getTemplate($layout) { $size = 8; switch ($layout) { case FormValidator::LAYOUT_INLINE: return '
{element}
'; break; case FormValidator::LAYOUT_HORIZONTAL: return '
{icon} {element}

{label_2}

{error}
{label_3}
'; break; case FormValidator::LAYOUT_BOX_NO_LABEL: return '
{icon} {element}
'; break; } } /** * Returns the HTML for the CAPTCHA image * * @return string * @access public */ public function toHtml() { if ($this->_flagFrozen) { return ''; } $result = parent::_initCAPTCHA(); if (PEAR::isError($result)) { return $result; } $html = ''; $tabs = $this->_getTabs(); $inputName = $this->getName(); $imgName = 'QF_CAPTCHA_'.$inputName; if ($this->getComment() != '') { $html .= $tabs.''; } $attr = $this->_attributes; unset($attr['type']); unset($attr['value']); unset($attr['name']); $html = $tabs.'_getAttrString($attr) .' onclick="var cancelClick = false; ' .$this->getOnclickJs($imgName) .' return !cancelClick;">'; return $html; } /** * Creates the javascript for the onclick event which will * reload a new CAPTCHA image * * @param string $imageName The image name/id * * @return string * @access public */ function getOnclickJs($imageName) { $onclickJs = '' .'if (document.images) {' .' var img = new Image();' .' var d = new Date();' .' img.src = this.href + ((this.href.indexOf(\'?\') == -1) ' .'? \'?\' : \'&\') + d.getTime();' .' document.images[\''.addslashes($imageName).'\'].src = img.src;' .' cancelClick = true;' .'}'; return $onclickJs; } }