- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/lib/helper/workgroup.php
- Класс: BitrixSocialnetworkHelperWorkgroup
- Вызов: Workgroup::getAdditionalData
static function getAdditionalData(array $params = []): array
{
global $USER;
$ids = (
is_array($params['ids'])
? array_filter(
array_map(
static function($val) { return (int)$val; },
$params['ids']
),
static function ($val) { return $val > 0; }
)
: []
);
$features = (
is_array($params['features'])
? array_filter(
array_map(
static function($val) { return trim((string)$val); },
$params['features']
),
static function ($val) { return !empty($val); }
)
: []
);
$mandatoryFeatures = (
is_array($params['mandatoryFeatures'])
? array_filter(
array_map(
static function($val) { return trim((string)$val); },
$params['mandatoryFeatures']
),
static function ($val) { return !empty($val); }
)
: []
);
$currentUserId = (int)($params['currentUserId'] ?? $USER->getId());
if (empty($ids))
{
return $ids;
}
$featuresSettings = CSocNetAllowed::getAllowedFeatures();
$result = [];
$userRoles = [];
$res = UserToGroupTable::getList([
'filter' => [
'GROUP_ID' => $ids,
'USER_ID' => $currentUserId,
],
'select' => [ 'GROUP_ID', 'ROLE', 'INITIATED_BY_TYPE' ]
]);
while ($relationFields = $res->fetch())
{
$userRoles[(int)$relationFields['GROUP_ID']] = [
'ROLE' => $relationFields['ROLE'],
'INITIATED_BY_TYPE' => $relationFields['INITIATED_BY_TYPE'],
];
}
foreach ($features as $feature)
{
$activeFeaturesList = CSocNetFeatures::isActiveFeature(SONET_ENTITY_GROUP, $ids, $feature);
$filteredIds = array_keys(array_filter($activeFeaturesList, static function($val) { return $val; }));
if (
empty($filteredIds)
|| !isset($featuresSettings[$feature])
)
{
$permissions = [];
}
else
{
$minOperationList = $featuresSettings[$feature]['minoperation'];
if (!is_array($minOperationList))
{
$minOperationList = [ $minOperationList ];
}
$permissions = [];
foreach ($minOperationList as $minOperation)
{
$operationPermissions = CSocNetFeaturesPerms::getOperationPerm(SONET_ENTITY_GROUP, $filteredIds, $feature, $minOperation);
foreach ($operationPermissions as $groupId => $role)
{
if (
!isset($permissions[$groupId])
|| $role > $permissions[$groupId]
)
{
$permissions[$groupId] = $role;
}
}
}
}
foreach ($ids as $id)
{
if (!isset($result[$id]))
{
$result[$id] = [];
}
if (!isset($result[$id]['FEATURES']))
{
$result[$id]['FEATURES'] = [];
}
if (
in_array($feature, $mandatoryFeatures, true)
|| (
isset($permissions[$id])
&& (
!in_array($permissions[$id], UserToGroupTable::getRolesMember(), true)
|| (
isset($userRoles[$id])
&& $userRoles[$id]['ROLE'] <= $permissions[$id]
)
)
)
)
{
$result[$id]['FEATURES'][] = $feature;
}
}
}
foreach ($ids as $id)
{
$result[$id]['ROLE'] = ($userRoles[$id]['ROLE'] ?? '');
$result[$id]['INITIATED_BY_TYPE'] = ($userRoles[$id]['INITIATED_BY_TYPE'] ?? '');
}
return $result;
}