- Модуль: forum
- Путь к файлу: ~/bitrix/modules/forum/lib/message.php
- Класс: BitrixForumMessageTable
- Вызов: MessageTable::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;
}