- Модуль: 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;
}