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