CCrmUserType::ListAddHeaders

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CCrmUserType
  4. ListAddHeaders
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_usertype.php
  • Класс: \CCrmUserType
  • Вызов: CCrmUserType::ListAddHeaders
public function ListAddHeaders(&$arHeaders, $bImport = false)
{
	$arUserFields = $this->GetAbstractFields();
	foreach($arUserFields as $FIELD_NAME => $arUserField)
	{
		//NOTE: SHOW_IN_LIST affect only default fields. All fields are allowed in list.
		//if(!isset($arUserField['SHOW_IN_LIST']) || $arUserField['SHOW_IN_LIST'] !== 'Y')
		//	continue;

		$editable = true;
		$sType = $arUserField['USER_TYPE']['BASE_TYPE'];
		if ($arUserField['EDIT_IN_LIST'] === 'N'
			|| $arUserField['MULTIPLE'] === 'Y'
			||$arUserField['USER_TYPE']['BASE_TYPE'] === 'file'
			|| $arUserField['USER_TYPE']['USER_TYPE_ID'] === 'employee'
			|| $arUserField['USER_TYPE']['USER_TYPE_ID'] === 'crm')
			$editable = false;
		else if (in_array($arUserField['USER_TYPE']['USER_TYPE_ID'], array('enumeration', 'iblock_section', 'iblock_element')))
		{
			$sType = 'list';
			$editable = array(
				'items' => array('' => '')
			);
			if (is_callable(array($arUserField['USER_TYPE']['CLASS_NAME'], 'GetList')))
			{
				$rsEnum = call_user_func_array(array($arUserField['USER_TYPE']['CLASS_NAME'], 'GetList'), array($arUserField));
				if(is_object($rsEnum) && is_subclass_of($rsEnum, 'CAllDBResult'))
				{
					$maxEditableCount = (int)\Bitrix\Main\Config\Option::get('crm', '~enumeration_max_editable_inline_count', 1000);
					if ($rsEnum->SelectedRowsCount() <= $maxEditableCount)
					{
						while ($ar = $rsEnum->GetNext())
						{
							$editable['items'][$ar['ID']] = htmlspecialcharsback($ar['VALUE']);
						}
					}
					else
					{
						$editable = false;
					}
				}
			}
		}
		else if ($arUserField['USER_TYPE']['USER_TYPE_ID'] == 'boolean')
		{
			$sType = 'list';
			//Default value must be placed at first position.
			$defaultValue = isset($arUserField['SETTINGS']['DEFAULT_VALUE']) ? (int)$arUserField['SETTINGS']['DEFAULT_VALUE'] : 0;
			if($defaultValue === 1)
			{
				$editable = array('items' => array('1' => GetMessage('MAIN_YES'), '0' => GetMessage('MAIN_NO')));
			}
			else
			{
				$editable = array('items' => array('0' => GetMessage('MAIN_NO'), '1' => GetMessage('MAIN_YES')));
			}
		}
		else if ($arUserField['USER_TYPE']['BASE_TYPE'] == 'datetime')
			$sType = 'date';
		elseif ($arUserField['USER_TYPE']['USER_TYPE_ID'] == 'crm_status')
		{
			$ar = CCrmStatus::GetStatusList($arUserField['SETTINGS']['ENTITY_TYPE']);
			$sType = 'list';
			$editable = array(
				'items' => Array('' => '') + $ar
			);
		}
		elseif(mb_substr($arUserField['USER_TYPE']['USER_TYPE_ID'], 0, 5) === 'rest_')
		{
			// skip REST type fields here
			continue;
		}

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

		$fieldLabel = $arUserField['LIST_COLUMN_LABEL']
			?? $arUserField['EDIT_FORM_LABEL']
			?? $arUserField['LIST_FILTER_LABEL'];

		$arHeaders[$FIELD_NAME] = array(
			'id' => $FIELD_NAME,
			'name' => htmlspecialcharsbx($fieldLabel),
			'sort' => $arUserField['MULTIPLE'] == 'N' ? $FIELD_NAME : false,
			'default' => $arUserField['SHOW_IN_LIST'] == 'Y',
			'editable' => $editable,
			'type' => $sType
		);

		if ($bImport)
			$arHeaders[$FIELD_NAME]['mandatory'] = $arUserField['MANDATORY'] === 'Y' ? 'Y' : 'N';
	}
}

Добавить комментарий