Вход Регистрация
Файл: library/XenForo/BbCode/Formatter/BbCode/Strip.php
Строк: 109
<?php

/**
 * BB code to BB code formatter that can strip quotes or all BB codes.
 *
 * @package XenForo_BbCode
 */
class XenForo_BbCode_Formatter_BbCode_Strip extends XenForo_BbCode_Formatter_BbCode_Abstract
{
    protected 
$_generalTagCallback = array('$this''handleTag');

    protected 
$_overrideCallbacks = array(
        
'quote' => array('$this''handleQuoteTag'),
        
'list' => array('$this''handleListTag')
    );

    protected 
$_skipTags = array('media''attach');

    
/**
     * The maximum quote depth allowed. -1 means unlimited.
     *
     * @var integer
     */
    
protected $_maxQuoteDepth = -1;

    
/**
     * Controls whether all tags will be stripped.
     *
     * @var boolean
     */
    
protected $_stripAllBbCode false;

    
/**
     * Sets the maximum quote depth.
     *
     * @param integer $max
     *
     * @return $this Fluent interface
     */
    
public function setMaxQuoteDepth($max)
    {
        
$this->_maxQuoteDepth intval($max);

        return 
$this;
    }

    
/**
     * Sets the value for stripping non-quote tags.
     *
     * @param boolean $value
     * @param integer|null $maxQuoteDepth
     *
     * @return $this Fluent interface
     */
    
public function stripAllBbCode($value$maxQuoteDepth null)
    {
        
$this->_stripAllBbCode $value;
        if (
$maxQuoteDepth !== null)
        {
            
$this->_maxQuoteDepth $maxQuoteDepth;
        }

        return 
$this;
    }

    
/**
     * General purpose tag handler.
     *
     * @param array $tag
     * @param array $rendererStates
     *
     * @return string
     */
    
public function handleTag(array $tag, array $rendererStates)
    {
        if (
$this->_stripAllBbCode)
        {
            if (
in_array($tag['tag'], $this->_skipTags))
            {
                return 
'';
            }

            return 
$this->renderSubTree($tag['children'], $rendererStates);
        }
        else
        {
            return 
$this->renderTagUnparsed($tag$rendererStates);
        }
    }

    public function 
handleListTag(array $tag, array $rendererStates)
    {
        if (
$this->_stripAllBbCode)
        {
            
$rendered $this->renderSubTree($tag['children'], $rendererStates);
            return 
str_replace('[*]'''$rendered);
        }
        else
        {
            return 
$this->renderTagUnparsed($tag$rendererStates);
        }
    }

    
/**
     * Deals with stripping nested quote tags.
     *
     * @param array $tag
     * @param array $rendererStates

     * @return string
     */
    
public function handleQuoteTag(array $tag, array $rendererStates)
    {
        if (empty(
$rendererStates['quoteDepth']))
        {
            
$rendererStates['quoteDepth'] = 1;
        }
        else
        {
            
$rendererStates['quoteDepth']++;
        }

        if (
$this->_maxQuoteDepth > -&& $rendererStates['quoteDepth'] > $this->_maxQuoteDepth)
        {
            return 
'';
        }

        if (!empty(
$tag['original']) && is_array($tag['original']))
        {
            list(
$prepend$append) = $tag['original'];
        }
        else
        {
            
$prepend '';
            
$append '';
        }

        if (
$rendererStates['quoteDepth'] == $this->_maxQuoteDepth)
        {
            
// at the edge of the quote, so we want to ltrim whatever comes after
            
foreach ($tag['children'] AS $key => $child)
            {
                if (
is_array($child) && !empty($child['tag']) && $child['tag'] == 'quote' && isset($tag['children'][$key 1]))
                {
                    
$after =& $tag['children'][$key 1];
                    if (
is_string($after))
                    {
                        
$after ltrim($after);
                    }
                }
            }
        }

        if (
$this->_stripAllBbCode)
        {
            
$prepend '';
            
$append '';
        }

        return 
$this->filterString($prepend$rendererStates)
            . 
$this->renderSubTree($tag['children'], $rendererStates)
            . 
$this->filterString($append$rendererStates);
    }
}
Онлайн: 3
Реклама