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