• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/lib/comments/comment.php
  • Класс: BitrixForumCommentsComment
  • Вызов: Comment::prepareFields
private function prepareFields(array &$params, ErrorCollection $errorCollectionParam)
{
	$result = array(
		"FORUM_ID" => $this->topic["FORUM_ID"],
		"TOPIC_ID" => $this->topic["ID"],
		"POST_MESSAGE" => trim($params["POST_MESSAGE"]),
		"AUTHOR_ID" => $params["AUTHOR_ID"],
		"AUTHOR_NAME" => trim($params["AUTHOR_NAME"]),
		"AUTHOR_EMAIL" => trim($params["AUTHOR_EMAIL"]),
		"USE_SMILES" => ($params["USE_SMILES"] == "Y" ? "Y" : "N"),
		"APPROVED" => $this->topic["APPROVED"],
		"XML_ID" => $this->getEntity()->getXmlId(),
		"AUX" => ($params["AUX"] ?? 'N'),
		"AUX_DATA" => ($params["AUX_DATA"] ?? ''),
	) + array_intersect_key($params, array_flip([
		"POST_DATE", "SOURCE_ID",
		"AUTHOR_IP", "AUTHOR_REAL_IP",
		"GUEST_ID"
	]));

	$errorCollection = new ErrorCollection();
	if (isset($params["SERVICE_TYPE"]))
	{
		if (!in_array($params["SERVICE_TYPE"], BitrixForumCommentsServiceManager::getTypesList()))
		{
			$errorCollection->addOne(new Error(Loc::getMessage("FORUM_CM_ERR_TYPE_INCORRECT"), self::ERROR_PARAMS_TYPE));
		}
		else
		{
			$result["SERVICE_TYPE"] = $params["SERVICE_TYPE"];
			if (!isset($params["SERVICE_DATA"]))
			{
				if (($result["SERVICE_TYPE"] === BitrixForumCommentsServiceManager::TYPE_TASK_INFO ||
					$result["SERVICE_TYPE"] === BitrixForumCommentsServiceManager::TYPE_TASK_CREATED)
					&& JSon::decode($result["POST_MESSAGE"]) == $params["AUX_DATA"])
				{
					$params["SERVICE_DATA"] = $result["POST_MESSAGE"];
					$result["POST_MESSAGE"] = "";
				}
				else
				{
					$params["SERVICE_DATA"] = Json::encode($params["AUX_DATA"] ?? []);
				}
			}
			$result["SERVICE_DATA"] = $params["SERVICE_DATA"];
			if ($result["POST_MESSAGE"] == "" &&
				($handler = BitrixForumCommentsServiceManager::find(
					["SERVICE_TYPE" => $result["SERVICE_TYPE"]]
				)))
			{
				$result["POST_MESSAGE"] = $handler->getText($result["SERVICE_DATA"]);
			}
		}
	}
	if ($result["POST_MESSAGE"] == '')
	{
		$errorCollection->addOne(new Error(Loc::getMessage("FORUM_CM_ERR_EMPTY_TEXT"), self::ERROR_PARAMS_MESSAGE));
	}

	if ($result["AUTHOR_NAME"] == '' && $result["AUTHOR_ID"] > 0)
		$result["AUTHOR_NAME"] = self::getUserName($result["AUTHOR_ID"]);
	if ($result["AUTHOR_NAME"] == '')
		$errorCollection->addOne(new Error(Loc::getMessage("FORUM_CM_ERR_EMPTY_AUTHORS_NAME"), self::ERROR_PARAMS_MESSAGE));

	if (is_array($params["FILES"]) && in_array($this->forum["ALLOW_UPLOAD"], array("Y", "F", "A")))
	{
		$result["FILES"] = array();
		foreach ($params["FILES"] as $key => $val)
		{
			if (intval($val["FILE_ID"]) > 0 && $val["del"] !== "Y")
			{
				unset($val["del"]);
			}
			$result["FILES"][$key] = $val;
		}
		$res = array(
			"FORUM_ID" => $this->forum["ID"],
			"TOPIC_ID" => $this->topic["ID"],
			"MESSAGE_ID" => 0,
			"USER_ID" => $result["AUTHOR_ID"],
			"FORUM" => $this->forum
		);
		if (!CForumFiles::checkFields($result["FILES"], $res, "NOT_CHECK_DB"))
		{
			$text = "File upload error.";
			if (($ex = $this->getApplication()->getException()) && $ex)
				$text = $ex->getString();
			$errorCollection->addOne(new Error($text, self::ERROR_PARAMS_MESSAGE));
		}
	}
	if ($result["APPROVED"] != "N")
	{
		$result["APPROVED"] = ($this->forum["MODERATION"] != "Y" || $this->getEntity()->canModerate($this->getUser()->getId())) ? "Y" : "N";
	}
	if ($errorCollection->hasErrors())
	{
		$errorCollectionParam->add($errorCollection->toArray());
		return false;
	}

	global $USER_FIELD_MANAGER;
	if (!empty($result["SERVICE_TYPE"]))
	{
		$fields = $USER_FIELD_MANAGER->getUserFields("FORUM_MESSAGE");
		if (($ufData = array_intersect_key($params, $fields)) && !empty($ufData))
		{
			$USER_FIELD_MANAGER->editFormAddFields("FORUM_MESSAGE", $result, ["FORM" => $ufData]);
		}
	}
	else
	{
		$USER_FIELD_MANAGER->editFormAddFields("FORUM_MESSAGE", $result);
	}
	$params = $result;
	return true;
}