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

/**
 * Helper for censoring option.
 *
 * @package XenForo_Options
 */
abstract class XenForo_Option_CensorWords
{
    
/**
     * Renders the censor words option row.
     *
     * @param XenForo_View $view View object
     * @param string $fieldPrefix Prefix for the HTML form field name
     * @param array $preparedOption Prepared option info
     * @param boolean $canEdit True if an "edit" link should appear
     *
     * @return XenForo_Template_Abstract Template object
     */
    
public static function renderOption(XenForo_View $view$fieldPrefix, array $preparedOption$canEdit)
    {
        
$value $preparedOption['option_value'];

        
$choices = array();
        foreach (
$value AS $word)
        {
            
$choices[] = array(
                
'word' => $word['word'],
                
'replace' => is_string($word['replace']) ? $word['replace'] : ''
            
);
        }

        
$editLink $view->createTemplateObject('option_list_option_editlink', array(
            
'preparedOption' => $preparedOption,
            
'canEditOptionDefinition' => $canEdit
        
));

        return 
$view->createTemplateObject('option_template_censorWords', array(
            
'fieldPrefix' => $fieldPrefix,
            
'listedFieldName' => $fieldPrefix '_listed[]',
            
'preparedOption' => $preparedOption,
            
'formatParams' => $preparedOption['formatParams'],
            
'editLink' => $editLink,

            
'choices' => $choices,
            
'nextCounter' => count($choices)
        ));
    }

    
/**
     * Verifies and prepares the censor option to the correct format.
     *
     * @param array $words List of words to censor (from input). Keys: word, exact, replace
     * @param XenForo_DataWriter $dw Calling DW
     * @param string $fieldName Name of field/option
     *
     * @return true
     */
    
public static function verifyOption(array &$wordsXenForo_DataWriter $dw$fieldName)
    {
        
$output = array();

        foreach (
$words AS $word)
        {
            if (!isset(
$word['word']) || !isset($word['replace']))
            {
                continue;
            }

            
$cache self::buildCensorCacheValue($word['word'], $word['replace']);
            if (
$cache)
            {
                
$output[] = $cache;
            }
        }

        
$words $output;

        return 
true;
    }

    
/**
     * Builds the regex and censor cache value for a find/replace pair
     *
     * @param string $find
     * @param string $replace
     *
     * @return array|bool
     */
    
public static function buildCensorCacheValue($find$replace)
    {
        
$find trim(strval($find));
        if (
$find === '')
        {
            return 
false;
        }

        
$prefixWildCard preg_match('#^*#'$find);
        
$suffixWildCard preg_match('#*$#'$find);

        
$replace is_int($replace) ? '' trim(strval($replace));
        if (
$replace === '')
        {
            
$replace utf8_strlen($find);
            if (
$prefixWildCard)
            {
                
$replace--;
            }
            if (
$suffixWildCard)
            {
                
$replace--;
            }
        }

        
$regexFind $find;
        if (
$prefixWildCard)
        {
            
$regexFind substr($regexFind1);
        }
        if (
$suffixWildCard)
        {
            
$regexFind substr($regexFind0, -1);
        }

        if (!
strlen($regexFind))
        {
            return 
false;
        }

        
$regex '#'
            
. ($prefixWildCard '' '(?<=W|^)')
            . 
preg_quote($regexFind'#')
            . (
$suffixWildCard '' '(?=W|$)')
            . 
'#iu';

        return array(
            
'word' => $find,
            
'regex' => $regex,
            
'replace' => $replace
        
);
    }
}
Онлайн: 2
Реклама