Provider::fillMembers

  1. Bitrix24 API (v. 23.675.0)
  2. tasks
  3. Provider
  4. fillMembers
  • Модуль: 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;
}

Добавить комментарий