• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/lib/message.php
  • Класс: BitrixForumMessageTable
  • Вызов: MessageTable::onBeforeUpdate
static function onBeforeUpdate(MainORMEvent $event)
{
	$result = new MainORMEventResult();
	/** @var array $data */
	$data = $event->getParameter("fields");
	$id = $event->getParameter("id");
	$id = $id["ID"];
	$strUploadDir = array_key_exists("UPLOAD_DIR", $data) ? $data["UPLOAD_DIR"] : "forum";
	self::modifyMessageFields($data);
	if (MainConfigOption::get("forum", "FILTER", "Y") == "Y" &&
		!empty(array_intersect(self::getFilteredFields(), array_keys($data))))
	{
		$forFilter = $data;
		if (
			array_intersect(self::getFilteredFields(), array_keys($data)) !== self::getFilteredFields() &&
			($message = MessageTable::getDataById($id))
		)
		{
			$forFilter = array_merge($message, $forFilter);
		}
		$res = [];
		foreach (self::getFilteredFields() as $key)
		{
			$res[$key] = array_key_exists($key, $forFilter) ? $forFilter[$key] : "";
			if (!empty($res[$key]))
			{
				$res[$key] = CFilterUnquotableWords::Filter($res[$key]);
				if ($res[$key] == '' )
				{
					$res[$key] = "*";
				}
			}
		}
		$data["HTML"] = serialize($res);
	}
	if (array_key_exists("POST_MESSAGE", $data))
	{
		$data["POST_MESSAGE"] = MainTextEmoji::encode($data["POST_MESSAGE"]);
		if (MainConfigOption::get("forum", "FILTER", "Y") == "Y")
		{
			$data["POST_MESSAGE_FILTER"] = CFilterUnquotableWords::Filter($data["POST_MESSAGE"]);
		}
	}
	unset($data["AUX"]);
	unset($data["DEDUPLICATION"]);

	//region Files
	if (array_key_exists("ATTACH_IMG", $data) && !empty($data["ATTACH_IMG"]))
	{
		if (!array_key_exists("FILES", $data))
		{
			$data["FILES"] = [];
		}
		$data["FILES"][] = $data["ATTACH_IMG"];
		unset($data["ATTACH_IMG"]);
	}
	if (array_key_exists("FILES", $data))
	{
		$data["FILES"] = is_array($data["FILES"]) ? $data["FILES"] : [$data["FILES"]];
		if (!empty($data["FILES"]))
		{
			$fileFields = $data + MessageTable::getDataById($id);
			$res = ForumFile::checkFiles(
				ForumForum::getById($fileFields["FORUM_ID"]),
				$data["FILES"],
				[
					"FORUM_ID" => $fileFields["FORUM_ID"],
					"TOPIC_ID" => $fileFields["TOPIC_ID"],
					"MESSAGE_ID" => $id,
					"USER_ID" => $fileFields["AUTHOR_ID"]
				]
			);
			if (!$res->isSuccess())
			{
				$result->setErrors($res->getErrors());
			}
			else
			{
				/*@var MainORMObjectifyEntityObject $object*/
				$object = $event->getParameter("object");
				/*@var MainDictionary $object->customData*/
				$object->sysSetRuntime("FILES", $data["FILES"]);
				$object->sysSetRuntime("UPLOAD_DIR", $strUploadDir);
				$object->sysSetRuntime("FILE_FIELDS", $fileFields);
			}
		}
		unset($data["FILES"]);
	}
	//endregion
	$fields = $event->getParameter("fields");
	if ($data != $fields)
	{
		foreach ($fields as $key => $val)
		{
			if (!array_key_exists($key, $data))
			{
				$result->unsetField($key);
			}
			else if ($data[$key] == $val)
			{
				unset($data[$key]);
			}
		}
		$result->modifyFields($data);
	}
	return $result;
}