Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Страницы 1
В файле functions.php меняем ф-ию censor_words() на эту:
function censor_words($text)
{
global $db;
static $search_for, $replace_with;
// If not already built in a previous call, build an array of censor words and their replacement text
if (!isset($search_for))
{
if (file_exists(FORUM_CACHE_DIR.'cache_censor.php'))
include FORUM_CACHE_DIR.'cache_censor.php';
if (!defined('PUN_CENSOR_LOADED'))
{
if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
require PUN_ROOT.'include/cache.php';
generate_censor_cache();
require FORUM_CACHE_DIR.'cache_censor.php';
}
}
if (!empty($search_for))
$text = substr(preg_replace($search_for, $replace_with, ' '.$text.' '), 1, -1);
return $text;
}
В файл cache.php добавляем новую ф-ию кэширования:
//
// Generate the censor cache PHP script - Visman
//
function generate_censor_cache()
{
global $db;
$result = $db->query('SELECT search_for, replace_with FROM '.$db->prefix.'censoring') or error('Unable to fetch censor word list', __FILE__, __LINE__, $db->error());
$num_words = $db->num_rows($result);
$search_for = $replace_with = array();
for ($i = 0; $i < $num_words; ++$i)
{
list($search_for[$i], $replace_with[$i]) = $db->fetch_row($result);
$search_for[$i] = '/(?<=\W)('.str_replace('\*', '\w*?', preg_quote($search_for[$i], '/')).')(?=\W)/i';
}
// Output config as PHP code
$fh = @fopen(FORUM_CACHE_DIR.'cache_censor.php', 'wb');
if (!$fh)
error('Unable to write censor cache file to cache directory. Please make sure PHP has write access to the directory \'cache\'', __FILE__, __LINE__);
fwrite($fh, '<?php'."\n\n".'define(\'PUN_CENSOR_LOADED\', 1);'."\n\n".'$search_for = '.var_export($search_for, true).';'."\n\n".'$replace_with = '.var_export($replace_with, true).';'."\n\n".'?>');
fclose($fh);
if (function_exists('apc_delete_file'))
@apc_delete_file(FORUM_CACHE_DIR.'cache_censor.php');
}
В файле admin_censoring.php перед строчками содержащими redirect('admin_censoring.php', (3 раза я насчитал) добавляем такие блоки:
// Regenerate the bans cache
if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
require PUN_ROOT.'include/cache.php';
generate_censor_cache();
Все!
Те кто использует цензуру на своем форуме получают экономию в один запрос к базе на каждом открытии страницы форума.
З.Ы. Будет включен в мою сборку начиная с ревизии 30.
Моя сборка FluxBB 1.5, ForkBB · сообщество
Offline
Мод будет включен в движок официально в версии 1.4.4
http://fluxbb.org/development/core/tickets/190/
Моя сборка FluxBB 1.5, ForkBB · сообщество
Offline
Visman мои поздравление!
Давай твори и не останавливайся!
Плоды твои не останутся незамеченными!
Offline
Freeman, а чего там делать?
Для того, чтобы регистр не учитывался нужно сменить
$search_for[$i] = '/(?<=\W)('.str_replace('\*', '\w*?', preg_quote($search_for[$i], '/')).')(?=\W)/i';
на
$search_for[$i] = '/(?<=\W)('.str_replace('\*', '\w*?', preg_quote($search_for[$i], '/')).')(?=\W)/iu';
Или взять вариант, который предложил artoodetoo.
По умолчанию вся нецензурщина заносится в один список с самого начала.
Моя сборка FluxBB 1.5, ForkBB · сообщество
Offline
Да, я с шумовыми словами перепутал.
Я их собрал в кучу в 30 ревизии.
Моя сборка FluxBB 1.5, ForkBB · сообщество
Offline
Страницы 1