- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/userfield/dispatcher.php
- Класс: BitrixMainUserFieldDispatcher
- Вызов: Dispatcher::updateFieldEnumValues
protected function updateFieldEnumValues($fieldId, $fieldInfo)
{
if(
array_key_exists('ENUM', $fieldInfo) && is_array($fieldInfo['ENUM']))
{
$currentFieldInfo = $this->getUserFieldInfo($fieldInfo['ENTITY_ID'], $fieldInfo['FIELD']);
$deletedEnum = array();
$storedEnum = array();
$updatedEnum = array();
if(is_array($currentFieldInfo['ENUM']))
{
foreach($currentFieldInfo['ENUM'] as $enumItem)
{
$storedEnum[$enumItem['ID']] = $enumItem;
$deletedEnum[$enumItem['ID']] = true;
}
}
$countAdded = 0;
foreach($fieldInfo['ENUM'] as $enumItem)
{
if(is_array($enumItem))
{
if(array_key_exists('ID', $enumItem))
{
if(empty($enumItem['XML_ID']))
{
$enumItem['XML_ID'] = $storedEnum[$enumItem['ID']]['XML_ID'];
}
unset($deletedEnum[$enumItem['ID']]);
}
$itemKey = $enumItem['ID'] > 0
? $enumItem['ID']
: 'n'.($countAdded++);
$itemDescription = array(
'VALUE' => $enumItem['VALUE'],
'DEF' => $enumItem['DEF'] === 'Y' ? 'Y' : 'N',
'SORT' => $enumItem['SORT'],
);
if($enumItem['XML_ID'] <> '')
{
$itemDescription['XML_ID'] = $enumItem['XML_ID'];
}
if(intval($enumItem['SORT']) > 0)
{
$itemDescription['SORT'] = $enumItem['SORT'];
}
$updatedEnum[$itemKey] = $itemDescription;
}
}
foreach($deletedEnum as $deletedId => $t)
{
$updatedEnum[$deletedId] = array(
'ID' => $deletedId,
'DEL' => 'Y'
);
}
$enumValuesManager = new CUserFieldEnum();
$setEnumResult = $enumValuesManager->setEnumValues($fieldId, $updatedEnum);
if(!$setEnumResult)
{
$this->getErrorFromApplicationException($fieldInfo);
}
}
}