- Модуль: rpa
- Путь к файлу: ~/bitrix/modules/rpa/lib/model/itemsorttable.php
- Класс: BitrixRpaModelItemSortTable
- Вызов: ItemSortTable::getSort
static function getSort(int $userId, Type $type, int $stageId, int $previousItemId = null, bool $isResort = true): int
{
$nextSort = $previousSort = null;
$previousItem = $type->getItem($previousItemId);
$typeId = $type->getId();
if($previousItem)
{
$record = static::getList([
'select' => ['SORT'],
'filter' => [
'=ITEM_ID' => $previousItem->getId(),
'=TYPE_ID' => $typeId,
'=USER_ID' => $userId,
],
])->fetch();
if($record)
{
$previousSort = (int)$record['SORT'];
}
else
{
static::fillItemsSortInStageBeforeItem($userId, $previousItem);
$previousSort = static::getMaxSort($userId, $previousItem->getStage());
}
}
$nextItem = static::getList([
'select' => ['ID', 'SORT'],
'order' => [
'SORT' => 'ASC',
],
'filter' => [
'=TYPE_ID' => $typeId,
'=USER_ID' => $userId,
'>=SORT' => $previousSort ?: 0,
'=ITEM.STAGE_ID' => $stageId,
'!=ITEM_ID' => $previousItemId,
],
'runtime' => [
static::getItemReferenceField($type)
],
'limit' => 1,
])->fetch();
if($nextItem)
{
$nextSort = (int)$nextItem['SORT'];
}
if(!$nextSort)
{
$sort = $previousSort + static::DEFAULT_MAX_SORT;
}
else
{
$sort = (int) (floor(($nextSort - $previousSort) / 2) + $previousSort);
}
if($sort === 0 || $previousSort === $sort || $nextSort === $sort)
{
if($isResort)
{
static::resortItems($userId, $type, $stageId);
$sort = static::getSort($userId, $type, $stageId, $previousItemId, false);
}
}
return $sort;
}