- Модуль: 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;
}