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