• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_events.php
  • Класс: CAllSocNetLogEvents
  • Вызов: CAllSocNetLogEvents::CheckFields
static function CheckFields($ACTION, &$arFields, $ID = 0)
{
	global $DB, $arSocNetAllowedEntityTypes;

	$arSocNetFeaturesSettings = CSocNetAllowed::GetAllowedFeatures();
	$arSocNetLogEvents = CSocNetAllowed::GetAllowedLogEvents();

	if ($ACTION != "ADD" && intval($ID) <= 0)
	{
		$GLOBALS["APPLICATION"]->ThrowException("System error 870164", "ERROR");
		return false;
	}

	if ((is_set($arFields, "ENTITY_TYPE") || $ACTION=="ADD") && $arFields["ENTITY_TYPE"] == '')
	{
		$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_LE_EMPTY_ENTITY_TYPE"), "EMPTY_ENTITY_TYPE");
		return false;
	}
	elseif (is_set($arFields, "ENTITY_TYPE"))
	{
		if (!in_array($arFields["ENTITY_TYPE"], CSocNetAllowed::GetAllowedEntityTypes()))
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_LE_ERROR_NO_ENTITY_TYPE"), "ERROR_NO_ENTITY_TYPE");
			return false;
		}
	}

	if (is_set($arFields, "ENTITY_ID"))
	{
		$type = "";
		if (is_set($arFields, "ENTITY_TYPE"))
		{
			$type = $arFields["ENTITY_TYPE"];
		}
		elseif ($ACTION != "ADD")
		{
			$arRe = CAllSocNetLog::GetByID($ID);
			if ($arRe)
				$type = $arRe["ENTITY_TYPE"];
		}
		if ($type == '')
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_LE_ERROR_CALC_ENTITY_TYPE"), "ERROR_CALC_ENTITY_TYPE");
			return false;
		}

		if ($type == SONET_SUBSCRIBE_ENTITY_GROUP && intval($arFields["ENTITY_ID"]) > 0)
		{
			$arResult = CSocNetGroup::GetByID($arFields["ENTITY_ID"]);
			if ($arResult == false)
			{
				$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_LE_ERROR_NO_ENTITY_ID"), "ERROR_NO_ENTITY_ID");
				return false;
			}
		}
		elseif (
				$type == SONET_SUBSCRIBE_ENTITY_USER
				&& intval($arFields["ENTITY_ID"]) > 0
		)
		{
			$dbResult = CUser::GetByID($arFields["ENTITY_ID"]);
			if (!$dbResult->Fetch())
			{
				$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_LE_ERROR_NO_ENTITY_ID"), "ERROR_NO_ENTITY_ID");
				return false;
			}
		}
	}

	if ((is_set($arFields, "EVENT_ID") || $ACTION=="ADD") && $arFields["EVENT_ID"] == '')
	{
		$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_LE_EMPTY_EVENT_ID"), "EMPTY_EVENT_ID");
		return false;
	}
	elseif (is_set($arFields, "EVENT_ID"))
	{
		$arFields["EVENT_ID"] = mb_strtolower($arFields["EVENT_ID"]);
		if (
			!array_key_exists($arFields["EVENT_ID"], $arSocNetFeaturesSettings) 
			&& $arFields["EVENT_ID"] != "all"
			&& !array_key_exists($arFields["EVENT_ID"], $arSocNetLogEvents)
		)
		{
			$bFound = false;
			foreach($arSocNetFeaturesSettings as $feature_id => $arFeature)
			{
				if (
					array_key_exists("subscribe_events", $arFeature)
					&& array_key_exists($arFields["EVENT_ID"], $arFeature["subscribe_events"])
				)
				{
					$bFound = true;
					break;
				}
			}

			if (!$bFound && CSocNetLogTools::FindLogCommentEventByID($arFields["EVENT_ID"]))
				$bFound = true;

			if (!$bFound)
			{
				$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SONET_LE_ERROR_NO_FEATURE_ID"), "ERROR_NO_FEATURE");
				return false;
			}
		}
	}

	if (is_set($arFields, "SITE_ID") && $arFields["SITE_ID"] != false)
	{
		$dbResult = CSite::GetByID($arFields["SITE_ID"]);
		if (!$dbResult->Fetch())
		{
			$GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arFields["SITE_ID"], GetMessage("SONET_LE_ERROR_NO_SITE")), "ERROR_NO_SITE");
			return false;
		}
	}

	if (
		(is_set($arFields, "MAIL_EVENT") || $ACTION=="ADD")
		&& ($arFields["MAIL_EVENT"] ?? null) != "Y"
		&& ($arFields["MAIL_EVENT"] ?? null) != "N"
	)
	{
		$arFields["MAIL_EVENT"] = "N";
	}

	if (is_set($arFields, "MAIL_EVENT") && $arFields["MAIL_EVENT"] == "Y")
		$arFields["TRANSPORT"] = "M";

	return True;
}