• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_destination.php
  • Класс: CSocNetLogDestination
  • Вызов: CSocNetLogDestination::GetSocnetGroupFilteredByInitiatePerms
static function GetSocnetGroupFilteredByInitiatePerms(&$arGroups)
{
	global $USER;

	$arGroupsIDs = array();
	foreach($arGroups as $value)
	{
		$arGroupsIDs[] = $value["id"];
	}

	if (count($arGroupsIDs) <= 0)
	{
		return;
	}

	if (
		$USER->IsAdmin()
		|| CSocNetUser::IsCurrentUserModuleAdmin(CSite::GetDefSite())
	)
	{
		return;
	}

	$groupsList = array();
	$userRolesList = array();

	$res = BitrixSocialnetworkWorkgroupTable::getList(array(
		'filter' => array(
			'@ID' => $arGroupsIDs
		),
		'select' => array('ID', 'OWNER_ID', 'INITIATE_PERMS')
	));

	while ($group = $res->fetch())
	{
		$groupsList[$group['ID']] = array(
			'OWNER_ID' => $group['OWNER_ID'],
			'INITIATE_PERMS' => $group['INITIATE_PERMS']
		);
	}

	$res = UserToGroupTable::getList(array(
		'filter' => array(
			'USER_ID' => $USER->getId(),
			'@GROUP_ID' => $arGroupsIDs
		),
		'select' => array('GROUP_ID', 'ROLE')
	));

	while ($relation = $res->fetch())
	{
		$userRolesList[$relation['GROUP_ID']] = $relation['ROLE'];
	}

	$userId = $USER->getId();

	foreach ($arGroups as $key => $group)
	{
		$groupId = $group["id"];

		$canInitiate = (
			(
				isset($groupsList[$groupId])
				&& $groupsList[$groupId]["INITIATE_PERMS"] == UserToGroupTable::ROLE_OWNER
				&& $userId == $groupsList[$groupId]["OWNER_ID"]
			)
			|| (
				isset($groupsList[$groupId])
				&& $groupsList[$groupId]["INITIATE_PERMS"] == UserToGroupTable::ROLE_MODERATOR
				&& isset($userRolesList[$groupId])
				&& in_array($userRolesList[$groupId], array(
					UserToGroupTable::ROLE_OWNER,
					UserToGroupTable::ROLE_MODERATOR
				))
			)
			|| (
				isset($groupsList[$groupId])
				&& $groupsList[$groupId]["INITIATE_PERMS"] == UserToGroupTable::ROLE_USER
				&& isset($userRolesList[$groupId])
				&& in_array($userRolesList[$groupId], array(
					UserToGroupTable::ROLE_OWNER,
					UserToGroupTable::ROLE_MODERATOR,
					UserToGroupTable::ROLE_USER
				))
			)
		);

		if (!$canInitiate)
		{
			unset($arGroups[$key]);
		}
	}
}