• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/classes/general/message.php
  • Класс: CAllForumMessage
  • Вызов: CAllForumMessage::CheckFields
static function CheckFields($ACTION, &$arFields, $ID = 0, $arParams = array())
{
	$aMsg = array();
	$ID = intval($ID);

	$arMessage = $arFields;

	if ($ACTION != "ADD" && $ID > 0 && (!is_set($arFields, "AUTHOR_NAME") || !is_set($arFields, "TOPIC_ID") || !is_set($arFields, "FORUM_ID")))
	{
		$arMessage = CForumMessage::GetByID($ID, array("FILTER" => "N"));
	}

	$bDeduplication = true;
	if ((is_set($arFields, "FORUM_ID") || $ACTION=="ADD") && intval($arFields["FORUM_ID"])<=0)
	{
		$aMsg[] = array(
			"id"=>'empty_forum_id',
			"text" => GetMessage("F_ERR_EMPTY_FORUM_ID"));
	}
	else
	{
		$forumID = (($ACTION == 'ADD') ? intval($arFields["FORUM_ID"]) : intval($arMessage["FORUM_ID"]));
		$arForum = CForumNew::GetByID($forumID);
		if (!is_array($arForum))
		{
			$aMsg[] = array(
				"id"=>'invalid_forum_id',
				"text" => GetMessage("F_ERR_INVALID_FORUM_ID"));
		}
		else
		{
			if (
				isset($arFields['AUX'])
				&& $arFields['AUX'] == 'Y'
			)
			{
				$bDeduplication = false;
			}
			else
			{
				$bDeduplication = ($arForum['DEDUPLICATION'] === 'Y');
			}
		}
	}

	if ((is_set($arFields, "TOPIC_ID") || $ACTION=="ADD") && intval($arFields["TOPIC_ID"])<=0)
	{
		$aMsg[] = array(
			"id"=>'empty_topic_id',
			"text" => GetMessage("F_ERR_EMPTY_TOPIC_ID"));
	}
	if ((is_set($arFields, "AUTHOR_NAME") || $ACTION=="ADD") && $arFields["AUTHOR_NAME"] == '')
	{
		$aMsg[] = array(
			"id"=>'empty_author_name',
			"text" => GetMessage("F_ERR_EMPTY_AUTHOR_NAME"));
	}

	if ((is_set($arFields, "POST_MESSAGE") || $ACTION=="ADD") && $arFields["POST_MESSAGE"] == '' &&
			(!is_set($arFields, 'FILES') || sizeof($arFields['FILES']) < 1))
	{
		$aMsg[] = array(
			"id"=>'empty_post_message',
			"text" => GetMessage("F_ERR_EMPTY_POST_MESSAGE"));
	}
	elseif (is_set($arFields, "POST_MESSAGE") && (!isset($arFields["NEW_TOPIC"]) || $arFields["NEW_TOPIC"] != "Y"))
	{
		$arFields["POST_MESSAGE_CHECK"] = md5($arFields["POST_MESSAGE"] . (is_set($arFields, 'FILES')?serialize($arFields['FILES']):''));

		if ($bDeduplication)
		{
			$iCnt = CForumMessage::GetList(array(), array("TOPIC_ID" => $arMessage["TOPIC_ID"], "!ID" => $ID,
				"AUTHOR_NAME" => $arMessage["AUTHOR_NAME"], "POST_MESSAGE_CHECK" => $arFields["POST_MESSAGE_CHECK"]), true);
			if (intval($iCnt)>0)
			{
				$aMsg[] = array(
					"id"=>'message_already_exists',
					"text" => GetMessage("F_ERR_MESSAGE_ALREADY_EXISTS"));
			}
		}
	}

	if (!empty($arFields['POST_MESSAGE']))
	{
		$arFields["POST_MESSAGE"] = BitrixMainTextEmoji::encode($arFields["POST_MESSAGE"]);
	}

	if (!is_set($arFields, "FILES"))
		$arFields["FILES"] = array();
	if (is_set($arFields, "ATTACH_IMG"))
	{
		if (!empty($arFields["ATTACH_IMG"]))
			$arFields["FILES"][] = $arFields["ATTACH_IMG"];
		unset($arFields["ATTACH_IMG"]);
	}
	if (!empty($arFields["FILES"]))
	{
		if ($ID > 0)
		{
			$arParams = !empty($arParams) ? $arParams : CForumMessage::GetByID($ID, array("FILTER" => "N"));
			$arParams["MESSAGE_ID"] = $ID;
		}
		else
		{
			$arParams = array("FORUM_ID" => $arMessage["FORUM_ID"], "MESSAGE_ID" => 0, "USER_ID" => $arFields["AUTHOR_ID"]);
		}
		if (!CForumFiles::CheckFields($arFields["FILES"], $arParams))
		{
			$res = $GLOBALS["APPLICATION"]->GetException();
			$aMsg[] = array(
				"id" => 'attach_error',
				"text" => $res->GetString());
		}
	}
	else
	{
		unset($arFields["FILES"]);
	}

	if (intval($arFields["TOPIC_ID"]) > 0)
	{
		$res = CForumTopic::GetById($arFields["TOPIC_ID"]);
		if (!$res)
		{
			$aMsg[] = array(
				"id" => 'topic_is_not_exists',
				"text" => GetMessage("F_ERR_TOPIC_IS_NOT_EXISTS"));
		}
		elseif ($res["STATE"] == "L")
		{
			$aMsg[] = array(
				"id" => 'topic_is_link',
				"text" => GetMessage("F_ERR_TOPIC_IS_LINK"));
		}
	}

	global $APPLICATION, $USER_FIELD_MANAGER;
	if(!empty($aMsg))
	{
		$e = new CAdminException(array_reverse($aMsg));
		$APPLICATION->ThrowException($e);
		return false;
	}
	else if(!$USER_FIELD_MANAGER->CheckFields("FORUM_MESSAGE", $ID, $arFields, (array_key_exists("USER_ID", $arFields) ? $arFields["USER_ID"] : false)))
		return false;

	if (is_set($arFields, "AUTHOR_ID") || $ACTION=="ADD") $arFields["AUTHOR_ID"] = !isset($arFields["AUTHOR_ID"]) || intval($arFields["AUTHOR_ID"]) <= 0 ? false : $arFields["AUTHOR_ID"];
	if (is_set($arFields, "USE_SMILES") || $ACTION=="ADD") $arFields["USE_SMILES"] = (isset($arFields["USE_SMILES"]) && $arFields["USE_SMILES"] == "N" ? "N" : "Y");
	if (is_set($arFields, "NEW_TOPIC") || $ACTION=="ADD") $arFields["NEW_TOPIC"] = (isset($arFields["NEW_TOPIC"]) && $arFields["NEW_TOPIC"] == "Y" ? "Y" : "N");
	if (is_set($arFields, "APPROVED") || $ACTION=="ADD") $arFields["APPROVED"] = (isset($arFields["APPROVED"]) && $arFields["APPROVED"] == "N" ? "N" : "Y");
	if (is_set($arFields, "SOURCE_ID") || $ACTION=="ADD") $arFields["SOURCE_ID"] = (isset($arFields["SOURCE_ID"]) && $arFields["SOURCE_ID"] == "EMAIL" ? "EMAIL" : "WEB");

	return True;
}