• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/compatible/eventcompatibility.php
  • Класс: BitrixCatalogCompatibleEventCompatibility
  • Вызов: EventCompatibility::fillResultData
static function fillResultData(
	CatalogModelEventResult $result,
	$entity,
	array $fields,
	array $externalFields,
	array $handlerFields
)
{
	$unsetFields = [];
	$modifyFields = [];
	$unsetExternalFields = [];
	$modifyExternalFields = [];

	if (!isset(self::$entityClass[$entity]))
	{
		return;
	}
	if (!isset(self::$whiteList[$entity]))
	{
		/** @var CatalogModelEntity $className */
		$className = self::$entityClass[$entity];
		$list = $className::getTabletFieldNames(CatalogModelEntity::FIELDS_ALL);
		self::$whiteList[$entity] = (!empty($list)
			? array_fill_keys($list, true)
			: []
		);
	}
	if (empty(self::$whiteList[$entity]))
	{
		return;
	}

	$handlerExternalFields = array_diff_key($handlerFields, self::$whiteList[$entity]);
	if (!empty($handlerExternalFields))
		$handlerFields = array_intersect_key($handlerFields, self::$whiteList[$entity]);

	foreach ($fields as $key => $value)
	{
		if (!array_key_exists($key, $handlerFields))
		{
			$unsetFields[] = $key;
		}
		else
		{
			if (!is_array($value))
			{
				if ($value !== $handlerFields[$key])
					$modifyFields[$key] = $handlerFields[$key];
			}
			unset($handlerFields[$key]);
		}
	}
	if (!empty($handlerFields))
		$modifyFields = $modifyFields + $handlerFields;

	foreach ($externalFields as $key => $value)
	{
		if (!array_key_exists($key, $handlerExternalFields))
		{
			$unsetExternalFields[] = $key;
		}
		else
		{
			//TODO: add array check
			if (!is_array($value))
			{
				if ($value !== $handlerExternalFields[$key])
					$modifyExternalFields[$key] = $handlerExternalFields[$key];
			}
			unset($handlerExternalFields[$key]);
		}
	}
	if (!empty($handlerExternalFields))
		$modifyExternalFields = $modifyExternalFields + $handlerExternalFields;

	if (!empty($unsetFields))
		$result->unsetFields($unsetFields);
	if (!empty($modifyFields))
		$result->modifyFields($modifyFields);
	if (!empty($unsetExternalFields))
		$result->unsetExternalFields($unsetExternalFields);
	if (!empty($modifyExternalFields))
		$result->modifyExternalFields($modifyExternalFields);
	unset($modifyFields, $unsetFields);
}