• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/classes/general/filter_dictionary.php
  • Класс: CAllFilterUnquotableWords
  • Вызов: CAllFilterUnquotableWords::Filter
static function Filter($message)
{
	global $USER, $DB, $CACHE_MANAGER, $APPLICATION;
	static $arFilterPattern = array();
	$filter = array();
	$pattern = array();
	$replacement = array();

	if (!array_key_exists(LANGUAGE_ID, $arFilterPattern))
	{
		$cache_id = "b_forum_filter_".COption::GetOptionInt("forum", "FILTER_DICT_W", false, LANGUAGE_ID);
		if (CACHED_b_forum_filter !== false && $CACHE_MANAGER->Read(CACHED_b_forum_filter, $cache_id, "b_forum_filter"))
		{
			$arFilterPattern[LANGUAGE_ID] = $CACHE_MANAGER->Get($cache_id);
		}
		else
		{
			$db_res = CFilterUnquotableWords::GetList(array(),
				array("USE_IT"=>"Y", "DICTIONARY_ID"=>COption::GetOptionInt("forum", "FILTER_DICT_W", false, LANGUAGE_ID)));
			$replace = COption::GetOptionString("forum", "FILTER_RPL", "*");
			while ($res = $db_res->Fetch())
			{
				if (trim($res["PATTERN"]) <> '' )
				{
					$arFilterPattern[LANGUAGE_ID]["pattern"][] = trim($res["PATTERN"]);
					$arFilterPattern[LANGUAGE_ID]["replacement"][] = $res["REPLACEMENT"] <> '' ? " ".$res["REPLACEMENT"]." " : " ".$replace." ";
				}
			}
		}
	}

	if (empty($arFilterPattern[LANGUAGE_ID]["pattern"])):
		return $message;
	endif;

	$pattern = $arFilterPattern[LANGUAGE_ID]["pattern"];
	$replacement = $arFilterPattern[LANGUAGE_ID]["replacement"];

	ksort($pattern); ksort($replacement);
	$message = '  '.$message.'  ';
	switch (COption::GetOptionString("forum", "FILTER_ACTION", "rpl"))
	{
		case "rpl":
			$message = preg_replace($pattern, $replacement, $message);
			break;
		case "del":
			$message = preg_replace($pattern, '', $message);
			break;
	}
	return trim($message);
}