• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/controller/status.php
  • Класс: Bitrix\Crm\Controller\Status
  • Вызов: Status::prepareNewStatusList
protected function prepareNewStatusList($configData): array
{
	$isNewStatusListPresent = is_array($configData['enumeration']);
	$result = [];

	if (!$isNewStatusListPresent)
	{
		$this->addError(
			new Error(
				'There is no data to change the list.',
				self::ERR_ACTION_SET_NO_DATA_TO_CHANGE_LIST
			)
		);
		return $result;
	}

	$listData = $configData['enumeration'];
	$sort = [];
	$index = [];
	$map = [];
	$idMap = [];
	$i = 0;
	$isListHasInvalidId = false;
	foreach ($listData as $key => $itemInfo)
	{
		$isIdPresent = isset($itemInfo['ID']);
		$isValidId = (
			$isIdPresent
			&& is_string($itemInfo['ID'])
			&& mb_strlen($itemInfo['ID']) <= 50
		);
		$isListHasInvalidId = ($isIdPresent && !$isValidId);
		if ($isListHasInvalidId)
		{
			break;
		}
		if (
			(!$isIdPresent || (is_string($itemInfo['ID']) && mb_strlen($itemInfo['ID']) <= 50))
			&& isset($itemInfo['SORT']) && is_string($itemInfo['SORT'])
		)
		{
			if (!$isIdPresent || !isset($idMap[$itemInfo['ID']]))
			{
				$map[$i] = $key;
				$index[] = $i++;
				$sort[] = $itemInfo['SORT'];
				$idMap[$itemInfo['ID']] = true;
			}
		}
	}
	if ($isListHasInvalidId)
	{
		$this->addError(
			new Error(
				'List items contain invalid identifiers.',
				self::ERR_ACTION_SET_LIST_HAS_INVALID_IDENTIFIERS
			)
		);
		return $result;
	}
	if (!array_multisort($sort, SORT_NUMERIC, $index, SORT_NUMERIC))
	{
		$this->addError(new Error('List sorting error.', self::ERR_ACTION_SET_SORT_LIST));
		return $result;
	}
	$isListHasInvalidValue = false;
	foreach ($index as $i)
	{
		$itemInfo = $listData[$map[$i]];
		$isValidValue = (
			isset($itemInfo['VALUE'])
			&& is_string($itemInfo['VALUE'])
			&& mb_strlen($itemInfo['VALUE']) <= 100
		);
		$isListHasInvalidValue = !$isValidValue;
		if ($isListHasInvalidValue)
		{
			break;
		}
		$result[] = $itemInfo;
	}
	if ($isListHasInvalidValue)
	{
		$this->addError(
			new Error(
				'List items contain invalid values.',
				self::ERR_ACTION_SET_LIST_HAS_INVALID_VALUES
			)
		);
		return $result;
	}

	return $result;
}