• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/activity/bindingselector.php
  • Класс: Bitrix\Crm\Activity\BindingSelector
  • Вызов: BindingSelector::sortBindings
static function sortBindings(array $bindings)
{
	$list = [];
	$uniqueList = [];

	$multipleTypes = array(\CCrmOwnerType::Deal, \CCrmOwnerType::Lead, \CCrmOwnerType::Order);
	foreach ($bindings as $binding)
	{
		$ownerTypeId = $binding['OWNER_TYPE_ID'];
		if (!isset($uniqueList[$ownerTypeId]) || !in_array($ownerTypeId, $multipleTypes, true))
		{
			$uniqueList[$ownerTypeId] = [];
		}

		$uniqueList[$ownerTypeId][] = $binding;
	}

	// unique
	foreach ($uniqueList as $ownerTypeId => $bindingList)
	{
		$uniqueList[$ownerTypeId] = array_map(
			function ($ownerId) use ($ownerTypeId)
			{
				return [
					'OWNER_TYPE_ID' => $ownerTypeId,
					'OWNER_ID' => $ownerId,
				];
			},
			array_unique(array_column($bindingList, 'OWNER_ID'))
		);
	}

	// keep order by type
	$orderByTypeId = [\CCrmOwnerType::Deal, \CCrmOwnerType::Lead];
	foreach ($orderByTypeId as $typeId)
	{
		if (!isset($uniqueList[$typeId]))
		{
			continue;
		}

		$list = array_merge($list, $uniqueList[$typeId]);
		unset($uniqueList[$typeId]);
	}

	ksort($uniqueList);
	foreach ($uniqueList as $bindingList)
	{
		$list = array_merge($list, $bindingList);
	}

	return $list;
}