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

	$arSocNetFeaturesSettings = CSocNetAllowed::GetAllowedFeatures();

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

	if ((is_set($arFields, "FEATURE_ID") || $ACTION === "ADD") && (int)$arFields["FEATURE_ID"] <= 0)
	{
		$APPLICATION->ThrowException(GetMessage("SONET_GFP_EMPTY_GROUP_FEATURE_ID"), "EMPTY_FEATURE_ID");
		return false;
	}

	if (is_set($arFields, "FEATURE_ID"))
	{
		$arResult = CSocNetFeatures::GetByID($arFields["FEATURE_ID"]);
		if ($arResult == false)
		{
			$APPLICATION->ThrowException(str_replace("#ID#", $arFields["FEATURE_ID"], GetMessage("SONET_GFP_ERROR_NO_GROUP_FEATURE_ID")), "ERROR_NO_FEATURE_ID");
			return false;
		}
	}

	$groupFeature = "";
	$groupFeatureType = "";

	if ((is_set($arFields, "OPERATION_ID") || $ACTION === "ADD") && $arFields["OPERATION_ID"] == '')
	{
		$APPLICATION->ThrowException(GetMessage("SONET_GFP_EMPTY_OPERATION_ID"), "EMPTY_OPERATION_ID");
		return false;
	}

	if (is_set($arFields, "OPERATION_ID"))
	{
		$arFields["OPERATION_ID"] = mb_strtolower($arFields["OPERATION_ID"]);

		if (is_set($arFields, "FEATURE_ID"))
		{
			$arGroupFeature = CSocNetFeatures::GetByID($arFields["FEATURE_ID"]);
			if ($arGroupFeature != false)
			{
				$groupFeature = $arGroupFeature["FEATURE"];
				$groupFeatureType = $arGroupFeature["ENTITY_TYPE"];
			}
		}
		elseif ($ACTION !== "ADD" && (int)$ID > 0)
		{
			$dbGroupFeature = CSocNetFeaturesPerms::GetList(
				array(),
				array("ID" => $ID),
				false,
				false,
				array("FEATURE_FEATURE", "FEATURE_ENTITY_TYPE")
			);
			if ($arGroupFeature = $dbGroupFeature->Fetch())
			{
				$groupFeature = $arGroupFeature["FEATURE_FEATURE"];
				$groupFeatureType = $arGroupFeature["FEATURE_ENTITY_TYPE"];
			}
		}
		if (
			$groupFeature == ''
			|| !array_key_exists($groupFeature, $arSocNetFeaturesSettings)
		)
		{
			$APPLICATION->ThrowException(GetMessage("SONET_GFP_BAD_OPERATION_ID"), "BAD_OPERATION_ID");
			return false;
		}

		if (!array_key_exists($arFields["OPERATION_ID"], $arSocNetFeaturesSettings[$groupFeature]["operations"]))
		{
			$APPLICATION->ThrowException(GetMessage("SONET_GFP_NO_OPERATION_ID"), "NO_OPERATION_ID");
			return false;
		}
	}

	if ((is_set($arFields, "ROLE") || $ACTION === "ADD") && $arFields["ROLE"] == '')
	{
		$APPLICATION->ThrowException(GetMessage("SONET_GFP_EMPTY_ROLE"), "EMPTY_ROLE");
		return false;
	}

	if (is_set($arFields, "ROLE"))
	{
		if ($groupFeatureType == '')
		{
			if (is_set($arFields, "FEATURE_ID"))
			{
				$arGroupFeature = CSocNetFeatures::GetByID($arFields["FEATURE_ID"]);
				if ($arGroupFeature != false)
				{
					$groupFeatureType = $arGroupFeature["ENTITY_TYPE"];
				}
			}
			elseif ($ACTION !== "ADD" && (int)$ID > 0)
			{
				$dbGroupFeature = CSocNetFeaturesPerms::GetList(
					array(),
					array("ID" => $ID),
					false,
					false,
					array("FEATURE_FEATURE", "FEATURE_ENTITY_TYPE")
				);
				if ($arGroupFeature = $dbGroupFeature->Fetch())
				{
					$groupFeatureType = $arGroupFeature["FEATURE_ENTITY_TYPE"];
				}
			}
		}
		if ($groupFeatureType == '' || !in_array($groupFeatureType, $arSocNetAllowedEntityTypes))
		{
			$APPLICATION->ThrowException(GetMessage("SONET_GF_EMPTY_ENTITY_TYPE"), "BAD_TYPE");
			return false;
		}
		if ($groupFeatureType == SONET_ENTITY_GROUP)
		{
			if (!in_array($arFields["ROLE"], $arSocNetAllowedRolesForFeaturesPerms))
			{
				$APPLICATION->ThrowException(str_replace("#ID#", $arFields["ROLE"], GetMessage("SONET_GFP_ERROR_NO_ROLE")), "ERROR_NO_SITE");
				return false;
			}
		}
		else
		{
			if (!in_array($arFields["ROLE"], $arSocNetAllowedRelationsType))
			{
				$APPLICATION->ThrowException(str_replace("#ID#", $arFields["ROLE"], GetMessage("SONET_GFP_ERROR_NO_ROLE")), "ERROR_NO_SITE");
				return false;
			}

			if($arFields["ROLE"] === SONET_RELATIONS_TYPE_FRIENDS2)
			{
				$arFields["ROLE"] = SONET_RELATIONS_TYPE_FRIENDS;
			}
		}
	}

	return True;
}