- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/internals/project/provider.php
- Класс: BitrixTasksInternalsProjectProvider
- Вызов: Provider::fillMembers
public function fillMembers(array $projects): array
{
$projectIds = array_keys($projects);
$members = array_fill_keys($projectIds, []);
$query = $this->getPrimaryUsersQuery($projectIds);
$query
->whereIn(
'ROLE',
[
UserToGroupTable::ROLE_OWNER,
UserToGroupTable::ROLE_MODERATOR,
UserToGroupTable::ROLE_USER,
UserToGroupTable::ROLE_REQUEST,
]
)
;
$imageIds = [];
$resultMembers = [];
$result = $query->exec();
while ($member = $result->fetch())
{
$imageIds[$member['USER_ID']] = $member['PERSONAL_PHOTO'];
$resultMembers[] = $member;
}
$imageIds = array_filter(
$imageIds,
static function ($id) {
return (int)$id > 0;
}
);
$avatars = UI::getAvatars($imageIds);
$scrumMasters = [];
if ($this->isScrum)
{
foreach ($projects as $id => $data)
{
$scrumMasters[$id] = (int)$data['SCRUM_MASTER_ID'];
}
}
foreach ($resultMembers as $member)
{
$memberId = (int)$member['USER_ID'];
$projectId = (int)$member['GROUP_ID'];
$isOwner = ($member['ROLE'] === UserToGroupTable::ROLE_OWNER);
$isModerator = ($member['ROLE'] === UserToGroupTable::ROLE_MODERATOR);
$isScrumMaster = (isset($scrumMasters[$projectId]) && $scrumMasters[$projectId] === $memberId);
$isAccessRequesting = ($member['ROLE'] === UserToGroupTable::ROLE_REQUEST);
$isAccessRequestingByMe = (
$isAccessRequesting && $member['INITIATED_BY_TYPE'] === UserToGroupTable::INITIATED_BY_USER
);
$isHead = ($isOwner || $isModerator);
$members[$projectId][($isHead ? 'HEADS' : 'MEMBERS')][$memberId] = [
'ID' => $memberId,
'IS_OWNER' => ($isOwner ? 'Y' : 'N'),
'IS_MODERATOR' => ($isModerator ? 'Y' : 'N'),
'IS_SCRUM_MASTER' => ($isScrumMaster ? 'Y' : 'N'),
'IS_ACCESS_REQUESTING' => ($isAccessRequesting ? 'Y' : 'N'),
'IS_ACCESS_REQUESTING_BY_ME' => ($isAccessRequestingByMe ? 'Y' : 'N'),
'IS_AUTO_MEMBER' => $member['AUTO_MEMBER'],
'PHOTO' => (isset($imageIds[$memberId], $avatars[$imageIds[$memberId]]) ? $avatars[$imageIds[$memberId]] : null),
];
}
foreach ($projectIds as $projectId)
{
$projects[$projectId]['MEMBERS'] = [
'HEADS' => ($members[$projectId]['HEADS'] ?? []),
'MEMBERS' => ($members[$projectId]['MEMBERS'] ?? []),
];
}
return $projects;
}