• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/classes/general/topic.php
  • Класс: CAllForumTopic
  • Вызов: CAllForumTopic::Update
static function Update($ID, $arFields, $skip_counts = False)
{
	$topic = BitrixForumTopic::getById($ID);
	$entity = BitrixForumTopicTable::getEntity();
	$data = [];
	foreach ($arFields as $k => $v)
	{
		$k = (mb_strpos($k, "=") === 0? mb_substr($k, 1) : $k);
		if ($entity->hasField($k))
		{
			$field = $entity->getField($k);
			$data[$k] = $v;
			if ($field instanceof BitrixMainORMFieldsDateField)
			{
				$data[$k] = new BitrixMainTypeDateTime(BitrixMainTypeDateTime::isCorrect($v) ? $v : null);
			}
			else if (preg_match("/{$k}s*(+|-)s*(d+)/", $v, $matches))
			{
				$data[$k] = new BitrixMainDBSqlExpression("?# $matches[1] $matches[2]", $k);
			}
		}
	}
	$fieldForEdit = array_intersect_key($data, array_flip(["TITLE",
		"TITLE_SEO",
		"TAGS",
		"DESCRIPTION",
		"ICON",
		"USER_START_NAME"])
	);
	if (!empty($fieldForEdit))
	{
		$topic->edit($data);
		$data = array_diff_key($data, $data);
	}
	if (array_key_exists("FORUM_ID", $data))
	{
		$topic->moveToForum($data["FORUM_ID"]);
		unset($GLOBALS["FORUM_CACHE"]["FORUM"]);
		unset($data["FORUM_ID"]);
	}
	if (!empty($data))
	{
		BitrixForumTopic::update($topic->getId(), $data);
	}

	unset($GLOBALS["FORUM_CACHE"]["TOPIC"][$ID]);
	unset($GLOBALS["FORUM_CACHE"]["TOPIC_FILTER"][$ID]);

	return $ID;
}