• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_document.php
  • Класс: \CCrmDocument
  • Вызов: CCrmDocument::AddDocumentField
static function AddDocumentField($documentType, $arFields)
{
	if (mb_strpos($documentType, '_') === false)
		$documentType .= '_0';

	$arDocumentID = static::GetDocumentInfo($documentType);
	if (empty($arDocumentID))
		throw new CBPArgumentNullException('documentId');


	$userTypeID = $arFields['type'];
	if(mb_strpos($userTypeID, 'UF:') === 0)
	{
		$userTypeID = mb_substr($userTypeID, 3);
	}

	$fieldName = mb_strtoupper($arFields['code']);
	if(mb_strpos($fieldName, 'UF_CRM_') !== 0)
	{
		$fieldName = "UF_CRM_{$fieldName}";
	}

	$userFieldEntityId = CCrmOwnerType::ResolveUserFieldEntityID(CCrmOwnerType::ResolveID($arDocumentID['TYPE']));
	if ($userFieldEntityId === '')
	{
		$userFieldEntityId = 'CRM_' . $arDocumentID['TYPE'];
	}

	$arFieldsTmp = array(
		'USER_TYPE_ID' => $userTypeID,
		'FIELD_NAME' => $fieldName,
		'ENTITY_ID' => $userFieldEntityId,
		'SORT' => 150,
		'MULTIPLE' => $arFields['multiple'] == 'Y' ? 'Y' : 'N',
		'MANDATORY' => $arFields['required'] == 'Y' ? 'Y' : 'N',
		'SHOW_FILTER' => 'E',
	);

	$arFieldsTmp['EDIT_FORM_LABEL'][LANGUAGE_ID] = $arFields['name'];
	$arFieldsTmp['LIST_COLUMN_LABEL'][LANGUAGE_ID] = $arFields['name'];
	$arFieldsTmp['LIST_FILTER_LABEL'][LANGUAGE_ID] = $arFields['name'];

	if (array_key_exists('additional_type_info', $arFields))
		$arField['SETTINGS']['IBLOCK_ID'] = intval($arFields['additional_type_info']);

	switch ($userTypeID)
	{
		case 'select':
		case 'enumeration':
		{
			$arFieldsTmp['USER_TYPE_ID'] = 'enumeration';

			if(!is_array($arFieldsTmp['LIST']))
				$arFieldsTmp['LIST'] = array();

			$options = isset($arFields['options']) && is_array($arFields['options']) ? $arFields['options'] : array();
			if (empty($options) && !empty($arFields['options']) && is_string($arFields['options']))
			{
				$optionsFromString = explode("\n", $arFields["options"]);
				foreach ($optionsFromString as $option)
				{
					$option = trim(trim($option), "\r\n");
					if (!$option)
						continue;
					$key = $value = $option;
					if (mb_substr($option, 0, 1) == "[" && mb_strpos($option, "]") !== false)
					{
						$key = mb_substr($option, 1, mb_strpos($option, "]") - 1);
						$value = trim(mb_substr($option, mb_strpos($option, "]") + 1));
					}
					$options[$key] = $value;
				}
			}

			if (!empty($options))
			{
				$i = 10;
				foreach ($options as $k => $v)
				{
					$arFieldsTmp['LIST']['n'.$i] = array('XML_ID' => $k, 'VALUE' => $v, 'DEF' => 'N', 'SORT' => $i);
					$i = $i + 10;
				}
			}
			break;
		}
		case 'text':
		{
			$arFieldsTmp['USER_TYPE_ID'] = 'string';
			break;
		}
		case 'bool':
		{
			$arFieldsTmp['USER_TYPE_ID'] = 'boolean';
			break;
		}
		case 'int':
		{
			$arFieldsTmp['USER_TYPE_ID'] = 'integer';
			break;
		}
		case 'double':
		{
			$arFieldsTmp['SETTINGS'] = array('PRECISION' => 2);
			break;
		}
		case 'iblock_section':
		case 'iblock_element':
		{
			$options = isset($arFields['options']) && is_string($arFields['options']) ? $arFields['options'] : '';
			if($options !== '')
			{
				$arFieldsTmp['SETTINGS']['IBLOCK_ID'] = $options;
			}
			break;
		}
		case 'crm_status':
		{
			$options = isset($arFields['options']) && is_string($arFields['options']) ? $arFields['options'] : '';
			if($options !== '')
			{
				$arFieldsTmp['SETTINGS']['ENTITY_TYPE'] = $options;
			}
			break;
		}
		case 'crm':
		{
			$options = isset($arFields['options']) && is_array($arFields['options']) ? $arFields['options'] : array();
			$arFieldsTmp['SETTINGS']['LEAD'] = isset($options['LEAD']) && mb_strtoupper($options['LEAD']) === 'Y' ? 'Y' : 'N';
			$arFieldsTmp['SETTINGS']['CONTACT'] = isset($options['CONTACT']) && mb_strtoupper($options['CONTACT']) === 'Y' ? 'Y' : 'N';
			$arFieldsTmp['SETTINGS']['COMPANY'] = isset($options['COMPANY']) && mb_strtoupper($options['COMPANY']) === 'Y' ? 'Y' : 'N';
			$arFieldsTmp['SETTINGS']['DEAL'] = isset($options['DEAL']) && mb_strtoupper($options['DEAL']) === 'Y' ? 'Y' : 'N';
			break;
		}
		case 'user':
		case 'employee':
		{
			$arFieldsTmp['USER_TYPE_ID'] = 'employee';
			$arFieldsTmp['SHOW_FILTER'] = 'I';
			break;
		}
	}
	$crmFields = new CCrmFields($GLOBALS['USER_FIELD_MANAGER'], 'CRM_'.$arDocumentID['TYPE']);
	$crmFields->AddField($arFieldsTmp);
	$GLOBALS['CACHE_MANAGER']->ClearByTag('crm_fields_list_'.$arFieldsTmp['FIELD_NAME']);

	return $arFieldsTmp['FIELD_NAME'];
}