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