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