• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/controller/userfieldconfig.php
  • Класс: BitrixMainControllerUserFieldConfig
  • Вызов: UserFieldConfig::prepareEnums
protected function prepareEnums(array $newEnums, array $currentEnums): array
{
	$deletedEnum = [];
	$storedEnum = [];
	$updatedEnum = [];

	foreach ($currentEnums as $enumItem)
	{
		$storedEnum[$enumItem['ID']] = $enumItem;
		$deletedEnum[$enumItem['ID']] = true;
	}

	$countAdded = 0;
	foreach ($newEnums as $enumItem)
	{
		if (is_array($enumItem))
		{
			if (!empty($enumItem['id']))
			{
				if (empty($enumItem['xmlId']))
				{
					$enumItem['xmlId'] = $storedEnum[$enumItem['id']]['XML_ID'];
				}
				if (empty($enumItem['def']))
				{
					$enumItem['def'] = $storedEnum[$enumItem['id']]['DEF'];
				}

				unset($deletedEnum[$enumItem['id']]);
			}
			$itemKey = ($enumItem['id'] > 0 ? $enumItem['id'] : 'n' . ($countAdded++));

			$itemDescription = [
				'VALUE' => $enumItem['value'],
				'DEF' => $enumItem['def'] === 'Y' ? 'Y' : 'N',
				'SORT' => $enumItem['sort'],
			];

			if (!empty($enumItem['xmlId']))
			{
				$itemDescription['XML_ID'] = $enumItem['xmlId'];
			}

			$enumItem['sort'] = (int)$enumItem['sort'];
			if ($enumItem['sort'] > 0)
			{
				$itemDescription['SORT'] = $enumItem['sort'];
			}

			$updatedEnum[$itemKey] = $itemDescription;
		}
	}

	foreach ($deletedEnum as $deletedId => $t)
	{
		$updatedEnum[$deletedId] = [
			'ID' => $deletedId,
			'DEL' => 'Y',
		];
	}

	return $updatedEnum;
}