- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/controller/status.php
- Класс: Bitrix\Crm\Controller\Status
- Вызов: Status::makeActions
protected function makeActions(string $statusTypeId, array $newStatusList): array
{
$actions = [
'add' => [],
'update' => [],
'delete' => [],
];
$statusMap = $this->getStatusMap($statusTypeId);
$newStatusMap = [];
$sort = 0;
foreach ($newStatusList as $index => $statusInfo)
{
if (isset($statusInfo['IS_FAKE']) && $statusInfo['IS_FAKE'] === 'Y')
{
continue;
}
$isIdPresent = isset($statusInfo['ID']);
$sort += 10;
$sortString = (string)$sort;
if ($isIdPresent && isset($statusMap[$statusInfo['ID']]))
{
// update
$newStatusMap[$statusInfo['ID']] = true;
$origFields = $statusMap[$statusInfo['ID']];
$updateFields = [];
if ($origFields['NAME'] !== $statusInfo['VALUE'])
{
$updateFields['NAME'] = $statusInfo['VALUE'];
$updateFields['SORT'] = $sortString;
}
else if ($origFields['SORT'] !== $sortString)
{
$updateFields['SORT'] = $sortString;
}
if (!empty($updateFields))
{
$actions['update'][] = [
'ID' => $origFields['ID'],
'FIELDS' => $updateFields,
];
}
}
else
{
// add
$addFields = [];
if ($isIdPresent)
{
$addFields['ID'] = $statusInfo['ID'];
}
$addFields['NAME'] = $statusInfo['VALUE'];
$addFields['SORT'] = $sortString;
$actions['add'][] = ['INDEX' => $index, 'FIELDS' => $addFields];
}
}
// Determining deleted items
$isSystemItemDeleted = false;
foreach ($statusMap as $statusInfo)
{
if (!isset($newStatusMap[$statusInfo['STATUS_ID']]))
{
if ($statusInfo['SYSTEM'] === 'Y')
{
$isSystemItemDeleted = true;
break;
}
else
{
$actions['delete'][] = ['FIELDS' => ['ID' => $statusInfo['ID']]];
}
}
}
if ($isSystemItemDeleted)
{
$this->addError(
new Error(
'There are deleted system items.',
self::ERR_ACTION_SET_DELETED_SYSTEM_ITEMS
)
);
}
return $actions;
}