• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/grid/uf/base.php
  • Класс: BitrixMainGridUfBase
  • Вызов: Base::addUFHeaders
public function addUFHeaders(&$gridHeaders, $import = false)
{
	$userUFList = $this->getEntityUFList();

	foreach($userUFList as $FIELD_NAME => $uf)
	{
		if(
			!isset($uf['SHOW_IN_LIST'])
			|| $uf['SHOW_IN_LIST'] !== 'Y'
		)
		{
			continue;
		}

		$editable = true;
		$type = $uf['USER_TYPE']['BASE_TYPE'];

		if (
			$uf['EDIT_IN_LIST'] === 'N'
			|| $uf['MULTIPLE'] === 'Y'
			|| $uf['USER_TYPE']['BASE_TYPE'] === 'file'
			|| $uf['USER_TYPE']['USER_TYPE_ID'] === 'employee'
			|| $uf['USER_TYPE']['USER_TYPE_ID'] === 'crm'
		)
		{
			$editable = false;
		}
		elseif (in_array($uf['USER_TYPE']['USER_TYPE_ID'], ['enumeration', 'iblock_section', 'iblock_element']))
		{
			$type = 'list';
			$editable = [
				'items' => ['' => '']
			];

			if (is_callable([$uf['USER_TYPE']['CLASS_NAME'], 'GetList']))
			{
				$enumRes = call_user_func_array([$uf['USER_TYPE']['CLASS_NAME'], 'GetList'], [$uf]);
				while($enumFields = $enumRes->fetch())
				{
					$editable['items'][$enumFields['ID']] = $enumFields['VALUE'];
				}
			}
		}
		else if ($uf['USER_TYPE']['USER_TYPE_ID'] == 'boolean')
		{
			$type = 'list';

			//Default value must be placed at first position.
			$defaultValue = (
			isset($uf['SETTINGS']['DEFAULT_VALUE'])
				? (int)$uf['SETTINGS']['DEFAULT_VALUE']
				: 0
			);

			if($defaultValue === 1)
			{
				$editable = [
					'items' => [
						'1' => GetMessage('MAIN_YES'),
						'0' => GetMessage('MAIN_NO')
					]
				];
			}
			else
			{
				$editable = [
					'items' => [
						'0' => GetMessage('MAIN_NO'),
						'1' => GetMessage('MAIN_YES')
					]
				];
			}
		}
		elseif ($uf['USER_TYPE']['BASE_TYPE'] == 'datetime')
		{
			$type = 'date';
		}
		elseif (
			$uf['USER_TYPE']['USER_TYPE_ID'] == 'crm_status'
			&& Loader::includeModule('crm')
		)
		{
			$type = 'list';
			$editable = [
				'items' => ['' => ''] + CCrmStatus::getStatusList($uf['SETTINGS']['ENTITY_TYPE'])
			];
		}
		elseif(mb_substr($uf['USER_TYPE']['USER_TYPE_ID'], 0, 5) === 'rest_')
		{
			// skip REST type fields here
			continue;
		}

		if($type === 'string')
		{
			$type = 'text';
		}
		elseif(
			$type === 'int'
			|| $type === 'double'
		)
		{
			//HACK: CMainUIGrid::prepareEditable does not recognize 'number' type
			$type = 'int';
		}

		$gridHeaders[$FIELD_NAME] = array(
			'id' => $FIELD_NAME,
			'name' => htmlspecialcharsbx($uf['LIST_COLUMN_LABEL'] <> '' ? $uf['LIST_COLUMN_LABEL'] : $FIELD_NAME),
			'sort' => $uf['MULTIPLE'] == 'N' ? $FIELD_NAME : false,
			'default' => $uf['SHOW_IN_LIST'] == 'Y',
			'editable' => $editable,
			'type' => $type
		);

		if ($import)
		{
			$gridHeaders[$FIELD_NAME]['mandatory'] = (
				$uf['MANDATORY'] === 'Y'
					? 'Y'
					: 'N'
			);
		}
	}

}