- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/checklist/checklistfacade.php
- Класс: BitrixTasksCheckListCheckListFacade
- Вызов: CheckListFacade::moveItem
static function moveItem(
$entityId,
$userId,
$itemToMove,
$relatedItemId,
$position = self::MOVING_POSITION_AFTER
)
{
$moveResult = new Result();
if (!static::checkAccess($entityId, $userId, ActionDictionary::ACTION_CHECKLIST_EDIT, $itemToMove))
{
$code = 'ACTION_NOT_ALLOWED';
$moveResult = static::addErrorToResult($moveResult, $code, self::ACTION_REORDER);
return $moveResult;
}
/** @var CheckListFacade $facade */
$items = static::getByEntityId($entityId);
$facade = static::class;
$relatedItemFields = static::getList([], ['ID' => $relatedItemId])[$relatedItemId];
$relatedItem = new CheckList(0, $userId, $facade, $relatedItemFields);
$itemToMoveFields = $itemToMove->getFields();
$relatedItemFields = $relatedItem->getFields();
$sortIndex = $relatedItemFields['SORT_INDEX'];
$newParentId = $relatedItemFields['PARENT_ID'];
$previousParentId = $newParentId;
while ($previousParentId !== 0)
{
if ($previousParentId === $itemToMoveFields['ID'])
{
$moveResult = static::addErrorToResult($moveResult, 'NO_LOOPS_AVAILABLE');
return $moveResult;
}
$previousParentId = $items[$previousParentId]['PARENT_ID'];
}
$newFields = [
'SORT_INDEX' => ($position === static::MOVING_POSITION_BEFORE? $sortIndex : $sortIndex + 1)
];
if ($itemToMoveFields['PARENT_ID'] !== $newParentId)
{
$newFields['PARENT_ID'] = $newParentId;
}
$itemToMove->setFields($newFields);
$moveResult = $itemToMove->save();
return $moveResult;
}