• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/internals/task/sorting.php
  • Класс: BitrixTasksInternalsTaskSortingTable
  • Вызов: SortingTable::setTargetSorting
static function setTargetSorting($userId, $groupId, $sourceId, $targetId)
{
	$filterCtrl = CTaskFilterCtrl::getInstance($userId, $groupId > 0);
	$filter = $filterCtrl->getFilterPresetConditionById(CTaskFilterCtrl::STD_PRESET_ALL_MY_TASKS);
	$filter["CHECK_PERMISSIONS"] = "Y";
	$filter["SORTING"] = "N";

	$params = array(
		"USER_ID" => $userId,
		"bIgnoreErrors" => true,
		"nPageTop" => static::MAX_PAGE_TOP
	);

	if ($groupId > 0)
	{
		$filter["GROUP_ID"] = $groupId;
		$params["SORTING_GROUP_ID"] = $groupId;
	}

	//try to avoid a recursion
	$result = CTasks::getList(
		array(),
		array_merge($filter, array("ID" => $targetId)),
		array("ID", "SORTING"),
		$params
	);

	if (!$result->fetch())
	{
		return;
	}

	$order = array (
		"SORTING" => "ASC",
		"STATUS_COMPLETE" => "ASC",
		"DEADLINE" => "ASC,NULLS",
		"ID" => "ASC",
	);

	$result = CTasks::getList($order, $filter, array("ID", "SORTING"), $params);
	$lastSortedItem = static::getMaxSort($userId, $groupId);
	$prevTaskSort = $lastSortedItem ? intval($lastSortedItem["SORT"]) : 0;
	$prevTaskId = $lastSortedItem && $lastSortedItem["TASK_ID"] ? $lastSortedItem["TASK_ID"] : 0;

	[$items, $targetFound] = static::getSortedItems($result, $userId, $groupId, $prevTaskSort, $prevTaskId, $sourceId, $targetId);
	static::insertBatch($items);

	if (count($items) > 0)
	{
		if ($lastSortedItem)
		{
			static::update($lastSortedItem["ID"], array("NEXT_TASK_ID" => $items[0]["TASK_ID"]));
		}

		if (!$targetFound)
		{
			static::setTargetSorting($userId, $groupId, $sourceId, $targetId);
		}
	}
}