• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/controller/livefeed/logentry.php
  • Класс: BitrixSocialnetworkControllerLivefeedLogEntry
  • Вызов: LogEntry::getHiddenDestinationsAction
public function getHiddenDestinationsAction(array $params = []): ?array
{
	$logId = (int)($params['logId'] ?? 0);
	$createdById = (int)($params['createdById'] ?? 0);
	$destinationLimit = (int)($params['destinationLimit'] ?? 100);

	$pathToUser = ($params['pathToUser'] ?? '');
	$pathToWorkgroup = ($params['pathToWorkgroup'] ?? '');
	$pathToDepartment = ($params['pathToDepartment'] ?? '');
	$nameTemplate = ($params['nameTemplate'] ?? CSite::getNameFormat());
	$showLogin = ($params['showLogin'] ?? (ModuleManager::isModuleInstalled('intranet') ? 'Y' : 'N'));

	if ($logId <= 0)
	{
		$this->addError(new Error('Empty Log ID.', 'SONET_CONTROLLER_LIVEFEED_LOGENTRY_EMPTY_LOG_ID'));
		return null;
	}

	if (!Loader::includeModule('socialnetwork'))
	{
		$this->addError(new Error('Cannot include Socialnetwork module.', 'SONET_CONTROLLER_LIVEFEED_LOGENTRY_MODULE_NOT_INSTALLED'));
		return null;
	}

	CSocNetTools::initGlobalExtranetArrays();

	$extranetInstalled = Loader::includeModule("extranet");
	$currentExtranetUser = ($extranetInstalled && !CExtranet::isIntranetUser());
	$extranetAdmin = ($extranetInstalled && CExtranet::isExtranetAdmin());
	$visibleUserIdList = $availableExtranetUserIdList = false;

	if ($currentExtranetUser)
	{
		$visibleUserIdList = CExtranet::getMyGroupsUsersSimple(SITE_ID);
	}
	elseif (
		$extranetInstalled
		&& !$extranetAdmin
	)
	{
		$availableExtranetUserIdList = CExtranet::getMyGroupsUsersSimple(CExtranet::getExtranetSiteID());
	}

	$rightsList = [];
	$skipGetRights = false;

	$res = GetModuleEvents('socialnetwork', 'OnBeforeSocNetLogEntryGetRights');
	while ($event = $res->fetch())
	{
		if (ExecuteModuleEventEx(
				$event,
				[
					[ 'LOG_ID' => $logId ],
					&$rightsList
				]
			) === false
		)
		{
			$skipGetRights = true;
			break;
		}
	}

	if (!$skipGetRights)
	{
		$res = CSocNetLogRights::getList([], [ 'LOG_ID' => $logId ]);
		while ($rightFields = $res->fetch())
		{
			$rightsList[] = $rightFields['GROUP_CODE'];
		}
	}

	$destinationParams = [
		'PATH_TO_USER' => $pathToUser,
		'PATH_TO_GROUP' => $pathToWorkgroup,
		'PATH_TO_CONPANY_DEPARTMENT' => $pathToDepartment,
		'NAME_TEMPLATE' => $nameTemplate,
		'SHOW_LOGIN' => $showLogin,
		'DESTINATION_LIMIT' => 100,
		'CHECK_PERMISSIONS_DEST' => 'N'
	];

	if ($createdById > 0)
	{
		$destinationParams["CREATED_BY"] = $createdById;
	}

	$moreCount = 0;
	$destinationList = CSocNetLogTools::formatDestinationFromRights($rightsList, $destinationParams, $moreCount);
	$hiddenDestinationsCount = 0;

	$availableWorkgroupsIdList = CSocNetLogTools::getAvailableGroups();

	foreach($destinationList as $key => $destinationFields)
	{
		if (
			isset($destinationFields['TYPE'], $destinationFields['ID'])
			&& (
				(
					$destinationFields['TYPE'] === 'SG'
					&& !in_array((int)$destinationFields['ID'], $availableWorkgroupsIdList)
				)
				|| (
					in_array($destinationFields['TYPE'], ['CRMCOMPANY', 'CRMLEAD', 'CRMCONTACT', 'CRMDEAL'])
					&& Loader::includeModule('crm')
					&& !BitrixCrmSecurityEntityAuthorization::checkReadPermission(
						CCrmLiveFeedEntity::resolveEntityTypeID($destinationFields['TYPE']),
						$destinationFields['ID']
					)
				)
				|| (
					in_array($destinationFields['TYPE'], ['DR', 'D'])
					&& $currentExtranetUser
				)
				|| (
					$destinationFields['TYPE'] === 'U'
					&& is_array($visibleUserIdList)
					&& !in_array((int)$destinationFields['ID'], $visibleUserIdList)
				)
				|| (
					$destinationFields['TYPE'] === 'U'
					&& isset($destinationFields['IS_EXTRANET'])
					&& $destinationFields['IS_EXTRANET'] === 'Y'
					&& is_array($availableExtranetUserIdList)
					&& !in_array((int)$destinationFields['ID'], $availableExtranetUserIdList)
				)
			)
		)
		{
			unset($destinationList[$key]);
			$hiddenDestinationsCount++;
		}
	}

	return [
		'destinationList' => array_slice($destinationList, $destinationLimit),
		'hiddenDestinationsCount' => $hiddenDestinationsCount
	];
}