• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/controller/status.php
  • Класс: Bitrix\Crm\Controller\Status
  • Вызов: Status::playActions
protected function playActions(string $statusTypeId, array $actions, &$newStatusList): void
{
	$status = new CCrmStatus($statusTypeId);

	$isError = false;

	if (is_array($actions['delete']))
	{
		foreach ($actions['delete'] as $info)
		{
			$deleteResult = StatusTable::delete($info['FIELDS']['ID']);
			if (!$deleteResult->isSuccess())
			{
				$isError = true;
				break;
			}
		}
	}
	if ($isError)
	{
		$this->addError(
			new Error(
				'Unable to delete item.',
				self::ERR_ACTION_SET_DELETED_ITEM
			)
		);
	}

	if (!$this->getErrors() && is_array($actions['add']))
	{
		$addIndex = [];
		$addIds = [];
		foreach ($actions['add'] as $info)
		{
			$id = $status->Add($info['FIELDS']);
			if ($id)
			{
				$addIndex[$id] = $info['INDEX'];
				$addIds[] = $id;
			}
			else
			{
				$isError = true;
				break;
			}
		}
		if (!$isError && !empty($addIds))
		{
			$res = StatusTable::getList(
				[
					'filter' => [
						'=ENTITY_ID' => $statusTypeId,
						'@ID' => $addIds
					],
					'select' => ['ID', 'STATUS_ID'],
				]
			);
			while($row = $res->fetch())
			{
				$newStatusList[$addIndex[$row['ID']]]['ID'] = $row['STATUS_ID'];
			}
		}
	}
	if ($isError)
	{
		$this->addError(
			new Error(
				'Unable to add item.',
				self::ERR_ACTION_SET_ADD_ITEM
			)
		);
	}

	if (!$this->getErrors() && is_array($actions['update']))
	{
		foreach ($actions['update'] as $info)
		{
			if (!$status->Update($info['ID'], $info['FIELDS']))
			{
				$isError = true;
				break;
			}
		}
	}
	if ($isError)
	{
		$this->addError(
			new Error(
				'Unable to update item.',
				self::ERR_ACTION_SET_UPDATE_ITEM
			)
		);
	}
}