- Модуль: 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;
}