• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/controller/workgroup.php
  • Класс: BitrixSocialnetworkControllerWorkgroup
  • Вызов: Workgroup::listAction
public function listAction(
	PageNavigation $pageNavigation,
	array $filter = [],
	array $select = [],
	array $order = [],
	array $params = []
)
{
	if (
		empty($select)
		|| !is_array($select)
	)
	{
		$select = [ 'ID' ];
	}

	if (!in_array('ID', $select, true))
	{
		$select[] = 'ID';
	}

	$originalSelect = $select;

	if (
		$params['IS_ADMIN'] === 'Y'
		&& !CSocNetUser::isCurrentUserModuleAdmin(SITE_ID, false)
	)
	{
		unset($params['IS_ADMIN']);
	}

	if ($params['IS_ADMIN'] !== 'Y')
	{
		$filter['CHECK_PERMISSIONS'] = $this->getCurrentUser()->getId();
	}

	$extranetSiteId = CSocNetLogRestService::getExtranetSiteId();

	if (
		$extranetSiteId
		&& $params['IS_ADMIN'] !== 'Y'
		&& CSocNetLogRestService::getCurrentUserType() === 'extranet'
	)
	{
		$filter['SITE_ID'] = $extranetSiteId;
	}
	else
	{
		$filter['SITE_ID'] = (string)($params['siteId'] ?? SITE_ID);
	}

	if (($key = array_search('AVATAR', $select, true)) !== false)
	{
		$select[] = 'IMAGE_ID';
		$select[] = 'AVATAR_TYPE';
		unset($select[$key]);
	}

	$workgroups = [];
	$count = 0;

	$queryIdFilter = [];

	$res = CSocNetGroup::getList([], $filter, false, false, [ 'ID' ]);
	while ($groupFields = $res->fetch())
	{
		$queryIdFilter[] = (int)$groupFields['ID'];
	}

	if (!empty($queryIdFilter))
	{
		$select = $this->prepareSelect($select);

		$query = WorkgroupTable::query();
		$query
			->setSelect($select)
			->setOrder($order)
			->setOffset($pageNavigation->getOffset())
			->setLimit(($pageNavigation->getLimit()))
			->setFilter([
				'ID' => $queryIdFilter,
			])
			->countTotal(true);

		$res = $query->exec();

		$avatarTypes = HelperWorkgroup::getAvatarTypes();

		while ($groupFields = $res->fetch())
		{
			if (in_array('AVATAR', $originalSelect, true))
			{
				if ((int)$groupFields['IMAGE_ID'] > 0)
				{
					$groupFields['AVATAR'] = File::getFileSource((int)$groupFields['IMAGE_ID'], 100, 100);
				}
				elseif (
					!empty($groupFields['AVATAR_TYPE'])
					&& isset($params['mode'])
					&& $params['mode'] === 'mobile'
				)
				{
					$groupFields['AVATAR'] = $avatarTypes[$groupFields['AVATAR_TYPE']]['mobileUrl'];
				}
				else
				{
					$groupFields['AVATAR'] = '';
				}
			}

			$workgroups[(int)$groupFields['ID']] = $groupFields;
		}

		$count = $res->getCount();
	}

	$ids = array_keys($workgroups);

	if (
		isset($params['mode'])
		&& $params['mode'] === 'mobile'
	)
	{
		$additionalData = HelperWorkgroup::getAdditionalData([
			'ids' => $ids,
			'features' => ($params['features'] ?? []),
			'mandatoryFeatures' => ($params['mandatoryFeatures'] ?? []),
			'currentUserId' => (int)$this->getCurrentUser()->getId(),
		]);

		foreach (array_keys($workgroups) as $id)
		{
			if (!isset($additionalData[$id]))
			{
				continue;
			}

			$workgroups[$id]['ADDITIONAL_DATA'] = ($additionalData[$id] ?? []) ;
		}
	}

	$workgroups = $this->convertKeysToCamelCase($workgroups);

	return new EngineResponseDataTypePage('workgroups', array_values($workgroups), $count);
}