- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integration/rest/configuration/entity/field.php
- Класс: Bitrix\Crm\Integration\Rest\Configuration\Entity\Field
- Вызов: Field::import
static function import($import)
{
if(!Helper::checkAccessManifest($import, static::$accessManifest))
{
return null;
}
$result = [];
if(!isset($import['CONTENT']['DATA']))
{
return $result;
}
$data = $import['CONTENT']['DATA'];
if(!empty($data['ITEMS']))
{
$entityList = array_column(CCrmFields::GetEntityTypes(), 'ID');
if(in_array($data['TYPE'], $entityList))
{
global $USER_FIELD_MANAGER;
$entity = new CCrmFields($USER_FIELD_MANAGER, $data['TYPE']);
$langList = array();
$resLang = CLanguage::GetList();
while($lang = $resLang->Fetch())
{
$langList[] = $lang['LID'];
}
$result['OWNER'] = [];
$oldFields = $entity->GetFields();
foreach ($data['ITEMS'] as $field)
{
$saveData = [
'ENTITY_ID' => $data['TYPE'],
'XML_ID' => static::$context.'_'.$field['FIELD_NAME'],
'FIELD_NAME' => $field['FIELD_NAME'],
'SORT' => intVal($field['SORT']),
'MULTIPLE' => $field['MULTIPLE'],
'MANDATORY' => $field['MANDATORY'],
'SHOW_FILTER' => $field['SHOW_FILTER'],
'SHOW_IN_LIST' => $field['SHOW_IN_LIST'],
'EDIT_IN_LIST' => $field['EDIT_IN_LIST'],
'IS_SEARCHABLE' => $field['IS_SEARCHABLE'],
'SETTINGS' => $field['SETTINGS'],
'USER_TYPE_ID' => $field['USER_TYPE']["USER_TYPE_ID"]
];
if(is_array($field['LIST']))
{
foreach ($field['LIST'] as $key => $value)
{
if(isset($value['ID']))
{
unset($value['ID']);
}
$saveData['LIST'][$key] = $value;
}
}
$arLabels = ["EDIT_FORM_LABEL", "LIST_COLUMN_LABEL", "LIST_FILTER_LABEL", "ERROR_MESSAGE", "HELP_MESSAGE"];
foreach($arLabels as $label)
{
foreach ($langList as $lang)
{
$saveData[$label][$lang] = $field[$label];
}
}
if(!empty($oldFields[$saveData['FIELD_NAME']]))
{
if(
$oldFields[$saveData['FIELD_NAME']]['XML_ID'] == $saveData['XML_ID']
&&
$oldFields[$saveData['FIELD_NAME']]['USER_TYPE']['USER_TYPE_ID'] == $saveData['USER_TYPE_ID']
)
{
$entity->UpdateField($oldFields[$saveData['FIELD_NAME']]['ID'], $saveData);
}
else
{
$result['ERROR_MESSAGES'] = Loc::getMessage(
"CRM_ERROR_CONFIGURATION_IMPORT_CONFLICT_FIELDS",
[
'#CODE#' => $saveData['FIELD_NAME']
]
);
}
}
else
{
$entity->AddField($saveData);
$result['OWNER'][] = [
'ENTITY_TYPE' => self::OWNER_ENTITY_TYPE_FIELD_PREFIX.$saveData['ENTITY_ID'],
'ENTITY' => $saveData['FIELD_NAME']
];
}
}
}
}
if(is_array($data['ATTRIBUTE']))
{
foreach ($data['ATTRIBUTE'] as $attribute)
{
if(is_array($attribute['CONFIG']))
{
$entityTypeId = CCrmOwnerType::ResolveID($attribute['ENTITY_TYPE_NAME']);
if($entityTypeId > 0)
{
$dealCategoryId = 0;
if(
!empty($attribute['OPTION']['CATEGORY_ID'])
&& !empty($import['RATIO'][Status::ENTITY_CODE][$attribute['OPTION']['CATEGORY_ID']])
)
{
$dealCategoryId = $import['RATIO'][Status::ENTITY_CODE][$attribute['OPTION']['CATEGORY_ID']];
$attribute['OPTION']['CATEGORY_ID'] = $dealCategoryId;
}
foreach ($attribute['CONFIG'] as $code => $configList)
{
foreach ($configList as $config)
{
if($entityTypeId === CCrmOwnerType::Deal && $dealCategoryId > 0)
{
$config = static::changeDealCategory($config, $dealCategoryId);
}
FieldAttributeManager::saveEntityConfiguration(
$config,
$code,
$entityTypeId,
FieldAttributeManager::resolveEntityScope(
$entityTypeId,
0,
is_array($attribute['OPTION']) ? $attribute['OPTION'] : null
)
);
}
}
}
}
}
}
return $result;
}