• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/scrum/service/itemservice.php
  • Класс: BitrixTasksScrumServiceItemService
  • Вызов: ItemService::sortItems
public function sortItems(array $sortInfo, PushService $pushService = null): void
{
	$itemIds = [];
	$sortWhens = [];
	$entityWhens = [];

	$updatedItems = [];

	foreach($sortInfo as $itemId => $info)
	{
		$itemId = (is_numeric($itemId ?? null) ? (int) $itemId : 0);
		$sort = (is_numeric($info['sort'] ?? null) ? (int) $info['sort'] : 0);
		$entityId = (is_numeric($info['entityId'] ?? null) ? (int) $info['entityId'] : 0);
		$updatedItemId = (is_numeric($info['updatedItemId'] ?? null) ? (int) $info['updatedItemId'] : 0);
		$tmpId = (is_string($info['tmpId'] ?? null) ? $info['tmpId'] : '');

		if ($itemId)
		{
			$itemIds[] = $itemId;
			$sortWhens[] = 'WHEN ID = ' . $itemId . ' THEN ' . $sort;

			if ($updatedItemId)
			{
				$updatedItems[$itemId] = [
					'sort' => $sort,
					'tmpId' => $tmpId,
				];
				if ($entityId)
				{
					$entityWhens[] = 'WHEN ID = ' . $itemId . ' THEN ' . $entityId;
					$updatedItems[$itemId]['entityId'] = $entityId;
				}
			}
		}
	}

	if ($itemIds)
	{
		$data = [];
		if ($sortWhens)
		{
			$data['SORT'] = new SqlExpression('(CASE ' . implode(' ', $sortWhens) . ' END)');
		}
		if ($entityWhens && count($entityWhens) === count($sortWhens))
		{
			$data['ENTITY_ID'] = new SqlExpression('(CASE ' . implode(' ', $entityWhens) . ' END)');
		}

		ItemTable::updateMulti($itemIds, $data);
	}

	if ($updatedItems && $pushService)
	{
		$pushService->sendSortItemEvent($updatedItems);
	}
}