Вход Регистрация
Файл: library/XenForo/Captcha/Abstract.php
Строк: 138
<?php

/**
 * Abstract base for CAPTCHA implementations.
 *
 * @package XenForo_Captcha
 */
abstract class XenForo_Captcha_Abstract
{
    
/**
     * Rendered output cache.
     *
     * @var XenForo_Template_Abstract|string|null
     */
    
protected $_rendered null;

    
/**
     * Determines if the CAPTCHA has been passed.
     *
     * @param array $input Set of input to validate against
     *
     * @return boolean
     */
    
abstract public function isValid(array $input);

    
/**
     * Renders the CAPTCHA for use in a template. This should only render the CAPTCHA area itself.
     * The CAPTCHA may be used in a form row or own its own.
     *
     * @param XenForo_View $view
     *
     * @return XenForo_Template_Abstract|string
     */
    
abstract public function renderInternal(XenForo_View $view);

    public function 
render(XenForo_View $view)
    {
        if (
$this->_rendered === null)
        {
            
$this->_rendered $this->renderInternal($view);
        }

        return 
$this->_rendered;
    }

    
/**
     * To string method to warn if the CAPTCHA hasn't been rendered properly.
     *
     * @return string
     */
    
public final function __toString()
    {
        if (
$this->_rendered === null)
        {
            return 
'Please call render() on this CAPTCHA object in the view.';
        }
        else
        {
            return (string)
$this->_rendered;
        }
    }

    
/**
     * Creates the default CAPTCHA handler. By default, this checks whether a CAPTCHA is needed
     * for the visiting user. Note that you can never guarantee that this function will return an object!
     *
     * @param boolean $alwaysCreate If false, creates if visiting user needs; otherwise, creates the default object if configured
     *
     * @return XenForo_Captcha_Abstract|false
     */
    
public static function createDefault($alwaysCreate false)
    {
        if (!
$alwaysCreate && !XenForo_Visitor::getInstance()->showCaptcha())
        {
            return 
false;
        }

        
$captchaType XenForo_Application::get('options')->captcha;

        if (!
$captchaType)
        {
            return 
false;
        }

        if (
strpos($captchaType'_') === false)
        {
            
$class 'XenForo_Captcha_' $captchaType;
        }
        else
        {
            
$class $captchaType;
        }

        
$class XenForo_Application::resolveDynamicClass($class);
        return (
class_exists($class) ? new $class() : false);
    }

    
/**
     * Validates the default CAPTCHA handler.
     *
     * @param array|XenForo_Input $input Input to check
     * @param boolean $alwaysCheck If true, always checks; if false, checks if visiting user needs
     *
     * @return boolean
     */
    
public static function validateDefault($input$alwaysCheck false)
    {
        if (!
$alwaysCheck && !XenForo_Visitor::getInstance()->showCaptcha())
        {
            return 
true;
        }

        if (
$input instanceof XenForo_Input)
        {
            
$input $input->getInput();
        }

        if (!
is_array($input))
        {
            throw new 
XenForo_Exception('Input must be an array or XenForo_Input object.');
        }

        
$captcha self::createDefault(true);
        if (!
$captcha)
        {
            return 
true;
        }

        return 
$captcha->isValid($input);
    }
}
Онлайн: 2
Реклама