public function getGridPopupMembersAction(
int $groupId,
string $type,
int $page,
string $componentName = '',
string $signedParameters = ''
): ?array
{
if (!Loader::includeModule('socialnetwork'))
{
$this->addError(new Error('SONET_CONTROLLER_MODULE_NOT_INSTALLED', 'SONET_CONTROLLER_MODULE_NOT_INSTALLED'));
return null;
}
if (
$groupId <= 0
|| !HelperWorkgroupAccess::canView([
'groupId' => $groupId,
'checkAdminSession' => ($this->getScope() !== Controller::SCOPE_REST),
])
)
{
$this->addError(
new Error(
Loc::getMessage('SONET_CONTROLLER_WORKGROUP_EMPTY'),
'SONET_CONTROLLER_WORKGROUP_EMPTY'
)
);
return null;
}
$unsignedParameters = [];
if (
$componentName !== ''
&& $signedParameters !== ''
)
{
$unsignedParameters = BitrixMainComponentParameterSigner::unsignParameters(
$componentName,
$signedParameters
);
if (!is_array($unsignedParameters))
{
$unsignedParameters = [];
}
}
$rolesMap = [
'all' => [
UserToGroupTable::ROLE_OWNER,
UserToGroupTable::ROLE_MODERATOR,
UserToGroupTable::ROLE_USER,
],
'heads' => [
UserToGroupTable::ROLE_OWNER,
UserToGroupTable::ROLE_MODERATOR,
],
'members' => [
UserToGroupTable::ROLE_USER,
],
'scrumTeam' => [
UserToGroupTable::ROLE_OWNER,
UserToGroupTable::ROLE_MODERATOR,
],
];
$limit = 10;
$query = new Query(UserToGroupTable::getEntity());
$records = $query
->setSelect([
'GROUP_ID',
'GROUP',
'USER_ID',
'ROLE',
'INITIATED_BY_TYPE',
'AUTO_MEMBER',
'NAME' => 'USER.NAME',
'LAST_NAME' => 'USER.LAST_NAME',
'SECOND_NAME' => 'USER.SECOND_NAME',
'LOGIN' => 'USER.LOGIN',
'PERSONAL_PHOTO' => 'USER.PERSONAL_PHOTO',
])
->where('GROUP_ID', $groupId)
->whereIn('ROLE', $rolesMap[$type])
->setLimit($limit)
->setOffset(($page - 1) * $limit)
->exec()->fetchCollection();
$isScrumMembers = ($type === 'scrumTeam');
if ($isScrumMembers)
{
$query->addSelect('GROUP.SCRUM_MASTER_ID', 'SCRUM_MASTER_ID');
}
$imageIds = [];
$resultMembers = [];
foreach ($records as $member)
{
$imageIds[$member->get('USER_ID')] = $member->get('USER')->get('PERSONAL_PHOTO');
$resultMembers[] = $member;
}
$imageIds = array_filter(
$imageIds,
static function ($id) { return (int)$id > 0; }
);
$avatars = HelperUIGridWorkgroupMembers::getUserAvatars($imageIds);
$pathToUser = ($unsignedParameters['PATH_TO_USER'] ?? HelperPath::get('user_profile'));
$userNameTemplate = ($unsignedParameters['NAME_TEMPLATE'] ?? CSite::getNameFormat());
$isIntranetInstalled = ModuleManager::isModuleInstalled('intranet');
$members = [];
foreach ($resultMembers as $member)
{
$id = $member->get('USER_ID');
$userNameFormatted = CUser::formatName($userNameTemplate, [
'NAME' => $member->get('USER')->get('NAME'),
'LAST_NAME' => $member->get('USER')->get('LAST_NAME'),
'SECOND_NAME' => $member->get('USER')->get('SECOND_NAME'),
'LOGIN' => $member->get('USER')->get('LOGIN'),
], $isIntranetInstalled);
$userUrl = CComponentEngine::makePathFromTemplate($pathToUser, [
'user_id' => $id,
'id' => $id,
]);
$members[] = [
'ID' => $id,
'PHOTO' => $avatars[$imageIds[$id] ?? null] ?? '',
'HREF' => $userUrl,
'FORMATTED_NAME' => $userNameFormatted,
'ROLE' => ($isScrumMembers ? $this->getScrumRole($member) : $member->get('ROLE')),
];
if ($isScrumMembers)
{
if (
$member->get('ROLE') === UserToGroupTable::ROLE_OWNER
&& $member->get('USER_ID') === $member->get('GROUP')->get('SCRUM_MASTER_ID')
)
{
$members[] = [
'ID' => $id,
'PHOTO' => $avatars[$imageIds[$id] ?? null] ?? '',
'HREF' => $userUrl,
'FORMATTED_NAME' => $userNameFormatted,
'ROLE' => 'M',
];
}
}
}
return $members;
}