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