- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/checklist/checklistfacade.php
- Класс: BitrixTasksCheckListCheckListFacade
- Вызов: CheckListFacade::merge
static function merge($entityId, $userId, $newItems, $parameters = [])
{
$mergeResult = new Result();
static::doMergePreActions($entityId, $userId);
static::enableDeferredActionsMode();
static::$oldItemsToMerge = static::getList([], [static::$entityIdName => $entityId]);
$oldItemsKeys = array_keys(static::$oldItemsToMerge);
if (empty($newItems))
{
static::deleteByCheckListsIds($oldItemsKeys);
static::doDeletePostActions($entityId, $userId, ['ITEMS' => static::$oldItemsToMerge]);
static::doMergePostActions($entityId, $userId, ['PARAMETERS' => $parameters]);
return $mergeResult;
}
$traversedItems = [];
$newItemsTree = static::getObjectStructuredRoots($newItems, $entityId, $userId, 'PARENT_NODE_ID');
foreach ($newItemsTree as $item)
{
/** @var CheckList $item */
$saveResult = $item->save();
if (!$saveResult->isSuccess())
{
$mergeResult->loadErrors($saveResult->getErrors());
return $mergeResult;
}
/** @var CheckList $savedItem */
$savedItem = $saveResult->getData()['ITEM'];
$traversedItems[] = $savedItem->toItemsArray();
}
$traversedItems = array_merge(...$traversedItems);
$mergeResult->setData(['TRAVERSED_ITEMS' => $traversedItems]);
$itemsToRemoveKeys = array_diff($oldItemsKeys, array_column($traversedItems, 'ID'));
$itemsToRemove = array_filter(
static::$oldItemsToMerge,
static function ($item) use ($itemsToRemoveKeys)
{
return in_array((int)$item['ID'], $itemsToRemoveKeys, true);
}
);
static::deleteByCheckListsIds($itemsToRemoveKeys);
static::doDeletePostActions($entityId, $userId, ['ITEMS' => $itemsToRemove]);
static::doMergePostActions($entityId, $userId, ['ITEMS' => $traversedItems, 'PARAMETERS' => $parameters]);
static::disableDeferredActionsMode();
static::onAfterMerge($traversedItems, $userId, $entityId, $parameters);
return $mergeResult;
}