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