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