• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/lib/message.php
  • Класс: BitrixForumMessage
  • Вызов: Message::onBeforeAdd
static function onBeforeAdd(Event $event)
{
	$result = new MainORMEventResult();
	/** @var array $data */
	$data = $event->getParameter("fields");
	$strUploadDir = array_key_exists("UPLOAD_DIR", $data) ? $data["UPLOAD_DIR"] : "forum";
	self::modifyMessageFields($data);
	//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"]))
		{
			$res = File::checkFiles(
				ForumForum::getById($data["FORUM_ID"]),
				$data["FILES"],
				[
					"FORUM_ID" => $data["FORUM_ID"],
					"TOPIC_ID" => ($data["NEW_TOPIC"] === "Y" ? 0 : $data["TOPIC_ID"]),
					"MESSAGE_ID" => 0,
					"USER_ID" => $data["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);
			}
		}
		unset($data["FILES"]);
	}
	//endregion

	$data["POST_MESSAGE_CHECK"] = md5($data["POST_MESSAGE"] . (array_key_exists("FILES", $data) ? serialize($data["FILES"]) : ""));

	//region Deduplication
	$forum = ForumForum::getById($data["FORUM_ID"]);
	$deduplication = null;
	if (array_key_exists("AUX", $data))
	{
		if ($data["AUX"] == "Y")
		{
			$deduplication = false;
		}
		unset($data["AUX"]);
	}
	if (array_key_exists("DEDUPLICATION", $data))
	{
		$deduplication = $data["DEDUPLICATION"] == "Y";
		unset($data["DEDUPLICATION"]);
	}
	if ($deduplication === null)
	{
		$deduplication = $forum["DEDUPLICATION"] === "Y";
	}
	if ($deduplication && $data["NEW_TOPIC"] !== "Y")
	{
		if (self::getLastMessageHashInTopic($data["TOPIC_ID"]) === $data["POST_MESSAGE_CHECK"])
		{
			$result->addError(new EntityError(Loc::getmessage("F_ERR_MESSAGE_ALREADY_EXISTS"), "onBeforeMessageAdd"));
			return $result;
		}
	}
	//endregion

	$data["POST_MESSAGE"] = MainTextEmoji::encode($data["POST_MESSAGE"]);

	//region Filter
	if (MainConfigOption::get("forum", "FILTER", "Y") == "Y")
	{
		$data["POST_MESSAGE_FILTER"] = CFilterUnquotableWords::Filter($data["POST_MESSAGE"]);
		$filteredFields = self::getFilteredFields();
		$res = [];
		foreach ($filteredFields as $key)
		{
			$res[$key] = array_key_exists($key, $data) ? $data[$key] : "";
			if (!empty($res[$key]))
			{
				$res[$key] = CFilterUnquotableWords::Filter($res[$key]);
				if ($res[$key] == '')
				{
					$res[$key] = "*";
				}
			}
		}
		$data["HTML"] = serialize($res);
	}
	//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;
}