• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/event_user_view.php
  • Класс: CAllSocNetEventUserView
  • Вызов: CAllSocNetEventUserView::Entity2UserAdd
static function Entity2UserAdd($entityType, $entityID, $userID, $role)
{
	global $APPLICATION, $DB, $arSocNetAllowedEntityTypes;

	$CacheRelatedUsers = array();

	$entityType = trim($entityType);
	if (!in_array($entityType, $arSocNetAllowedEntityTypes))
	{
		$APPLICATION->ThrowException(GetMessage("SONET_EUV_INCORRECT_ENTITY_TYPE"), "ERROR_INCORRECT_ENTITY_TYPE");
		return false;
	}
	
	$entityID = intval($entityID);
	if ($entityID <= 0)
	{
		$APPLICATION->ThrowException(GetMessage("SONET_EUV_EMPTY_ENTITY_ID"), "ERROR_EMPTY_ENTITY_ID");
		return false;
	}
	
	$userID = intval($userID);
	if ($userID <= 0)
	{
		$APPLICATION->ThrowException(GetMessage("SONET_EUV_EMPTY_USER_ID"), "ERROR_EMPTY_USER_ID");
		return false;
	}

	if (is_array($role))
	{
		if (count($role) <= 0)
		{
			$APPLICATION->ThrowException(GetMessage("SONET_EUV_EMPTY_ROLE"), "ERROR_EMPTY_ROLE");
			return false;
		}
	}
	else
	{
		$role = trim($role);
		if ($role == '')
		{
			$APPLICATION->ThrowException(GetMessage("SONET_EUV_EMPTY_ROLE"), "ERROR_EMPTY_ROLE");
			return false;
		}
		$role = array($role);
	}

	if (!CSocNetEventUserView::IsEntityEmpty($entityType, $entityID))
	{
		$arEvents = array();
		$arSocNetLogEvents = CSocNetAllowed::GetAllowedLogEvents();

		foreach ($arSocNetLogEvents as $event_tmp_id => $arLogEventTmp)
		{
			if (
				!array_key_exists("ENTITIES", $arLogEventTmp)
				|| !array_key_exists($entityType, $arLogEventTmp["ENTITIES"])
			)
				continue;

			if (
				array_key_exists("NO_SET", $arLogEventTmp)
				&& $arLogEventTmp["NO_SET"]
			)
				continue;

			$arEvents[] = $event_tmp_id;			

			if (
				array_key_exists("COMMENT_EVENT", $arLogEventTmp)
				&& is_array($arLogEventTmp["COMMENT_EVENT"])
				&& array_key_exists("EVENT_ID", $arLogEventTmp["COMMENT_EVENT"])
				&& $arLogEventTmp["COMMENT_EVENT"]["EVENT_ID"] <> ''
			)
				$arEvents[] = $arLogEventTmp["COMMENT_EVENT"]["EVENT_ID"];
		}

		$arSocNetFeaturesSettings = CSocNetAllowed::GetAllowedEntityTypes();
		foreach ($arSocNetFeaturesSettings as $feature => $arFeature)
		{
			if (!array_key_exists("subscribe_events", $arFeature))
			{
				continue;
			}

			foreach ($arFeature["subscribe_events"] as $event_id_tmp => $arEventIDTmp)
			{
				if (
					array_key_exists("NO_SET", $arEventIDTmp)
					&& $arEventIDTmp["NO_SET"]
				)
					continue;

				if (
					!array_key_exists("OPERATION", $arEventIDTmp)
					|| $arEventIDTmp["OPERATION"] == ''
				)
					continue;

				$featureOperationPerms = CSocNetFeaturesPerms::GetOperationPerm($entityType, $entityID, $feature, $arEventIDTmp["OPERATION"]);
				if (in_array($featureOperationPerms, $role))
					$arEvents[] = $event_id_tmp;

				if (
					array_key_exists("COMMENT_EVENT", $arEventIDTmp)
					&& is_array($arEventIDTmp["COMMENT_EVENT"])
					&& array_key_exists("EVENT_ID", $arEventIDTmp["COMMENT_EVENT"])
					&& array_key_exists("OPERATION", $arEventIDTmp["COMMENT_EVENT"])
					&& $arEventIDTmp["COMMENT_EVENT"]["EVENT_ID"] <> ''
					&& $arEventIDTmp["COMMENT_EVENT"]["OPERATION"] <> ''
					&& ($arEventIDTmp["COMMENT_EVENT"]["EVENT_ID"] != $event_id_tmp)
				)
				{
					$featureOperationPerms = CSocNetFeaturesPerms::GetOperationPerm($entityType, $entityID, $feature, $arEventIDTmp["COMMENT_EVENT"]["OPERATION"]);
					if (in_array($featureOperationPerms, $role))
						$arEvents[] = $arEventIDTmp["COMMENT_EVENT"]["EVENT_ID"];
				}
			}
		}
		$arEvents = array_unique($arEvents);

		foreach($arEvents as $event)
		{
			$arFieldsEUV = array(
				"ENTITY_TYPE" => SONET_ENTITY_GROUP,
				"ENTITY_ID" => $entityID,
				"EVENT_ID" => $event,
				"USER_ID" => $userID,
				"USER_ANONYMOUS" => "N"
			);
			CSocNetEventUserView::Add($arFieldsEUV);
		}
	}
	elseif($entityType == SONET_ENTITY_GROUP)
		CSocNetEventUserView::SetGroup($entityID, true);
	elseif($entityType == SONET_ENTITY_USER)
		CSocNetEventUserView::SetUser($entityID, false, false, true);
}