• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/baseobject.php
  • Класс: BitrixDiskBaseObject
  • Вызов: BaseObject::getMembersOfSharing
public function getMembersOfSharing()
{
	$realObject = $this->getRealObject();
	if(!$realObject)
	{
		return array();
	}

	$sharings = $realObject->getSharingsAsReal();
	$members = array();
	$membersToSharing = array();
	foreach($sharings as $sharing)
	{
		if($sharing->isToDepartmentChild())
		{
			continue;
		}
		[$type, $id] = Sharing::parseEntityValue($sharing->getToEntity());
		$members[$type][] = $id;
		$membersToSharing[$type . '|' . $id] = $sharing;
	}
	unset($sharing);

	$enabledSocialnetwork = Loader::includeModule('socialnetwork');

	$entityList = array();
	foreach(SharingTable::getListOfTypeValues() as $type)
	{
		if(empty($members[$type]))
		{
			continue;
		}
		if($type == SharingTable::TYPE_TO_USER)
		{
			$query = UserTable::getList(array(
				'select' => array('ID', 'PERSONAL_PHOTO', 'NAME', 'LOGIN', 'LAST_NAME', 'SECOND_NAME'),
				'filter' => array('ID' => array_values($members[$type])),
			));
			while($userRow = $query->fetch())
			{
				/** @var User $userModel */
				$userModel = User::buildFromRow($userRow);
				/** @var Sharing $sharing */
				$sharing = $membersToSharing[$type . '|' . $userRow['ID']];
				$entityList[] = array(
					'sharingId' => $sharing->getId(),
					'entityId' => Sharing::CODE_USER . $userRow['ID'],
					'name' => $userModel->getFormattedName(),
					'right' => $sharing->getTaskName(),
					'avatar' => $userModel->getAvatarSrc(),
					'url' => $userModel->getDetailUrl(),
					'type' => 'users',
				);
			}
		}
		elseif($type == SharingTable::TYPE_TO_GROUP && $enabledSocialnetwork)
		{
			$query = CSocNetGroup::getList(array(), array('ID' => array_values($members[$type])), false, false, array(
					'ID',
					'IMAGE_ID',
					'NAME'
				));
			while($query && $groupRow = $query->fetch())
			{
				/** @var Sharing $sharing */
				$sharing = $membersToSharing[$type . '|' . $groupRow['ID']];
				$entityList[] = array(
					'sharingId' => $sharing->getId(),
					'entityId' => Sharing::CODE_SOCNET_GROUP . $groupRow['ID'],
					'name' => Emoji::decode($groupRow['NAME']),
					'right' => $sharing->getTaskName(),
					'avatar' => Avatar::getGroup($groupRow['IMAGE_ID']),
					'type' => 'groups',
				);
			}
		}
		elseif($type == SharingTable::TYPE_TO_DEPARTMENT && $enabledSocialnetwork)
		{
			// intranet structure
			$structure = CSocNetLogDestination::getStucture();
			foreach(array_values($members[$type]) as $departmentId)
			{
				if(empty($structure['department']['DR' . $departmentId]))
				{
					continue;
				}
				/** @var Sharing $sharing */
				$sharing = $membersToSharing[$type . '|' . $departmentId];
				$entityList[] = array(
					'sharingId' => $sharing->getId(),
					'entityId' => Sharing::CODE_DEPARTMENT . $departmentId,
					'name' => $structure['department']['DR' . $departmentId]['name'],
					'right' => $sharing->getTaskName(),
					'avatar' => Avatar::getDefaultGroup(),
					'type' => 'department',
				);
			}
			unset($departmentId);
		}
		elseif($type == SharingTable::TYPE_TO_CHAT)
		{
			$chatNames = $this->getChatNames(array_values($members[$type]));
			foreach ($chatNames as $chat)
			{
				/** @var Sharing $sharing */
				$sharing = $membersToSharing[$type . '|' . $chat['id']];
				$entityList[] = [
					'sharingId' => $sharing->getId(),
					'entityId' => $sharing->getToEntity(),
					'name' => $chat['title'],
					'right' => $sharing->getTaskName(),
					'avatar' => Avatar::getDefaultGroup(),
					'type' => 'chat',
				];
			}
		}
	}

	return $entityList;
}