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