...Человеческий поиск в разработке...
- Модуль: 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; }