- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/lib/Controller/Property/Directory/Action/SaveSettingsAction.php
- Класс: BitrixIblockControllerPropertyDirectoryActionSaveSettingsAction
- Вызов: SaveSettingsAction::saveHighloadValues
private function saveHighloadValues(Entity $entity, array $fields, bool $isNewHighload): Result
{
$result = new Result();
$directoryValues = $fields['DIRECTORY_ITEMS'] ?? null;
if (!is_array($directoryValues))
{
return $result;
}
$entityDataClass = $entity->getDataClass();
$fieldsList = $entityDataClass::getMap();
if (count($fieldsList) === 1 && isset($fieldsList['ID']))
{
$fieldsList = $entity->getFields();
}
$images = $this->getRequestImages();
foreach($directoryValues as $itemKey => $item)
{
if (!is_array($item))
{
continue;
}
$itemId = mb_substr($itemKey, 0, 1) === 'n' ? 0 : (int)$itemKey;
if (isset($item["UF_DELETE"]) && $item["UF_DELETE"] === 'Y')
{
if ($itemId > 0)
{
$entityDataClass::delete($itemId);
}
continue;
}
elseif (!isset($item['UF_NAME']) || empty(trim($item['UF_NAME'])))
{
continue;
}
if (isset($images[$itemKey]) && is_array($images[$itemKey]))
{
$item['UF_FILE'] = $images[$itemKey];
}
elseif (isset($item['UF_FILE']) && $item['UF_FILE'] === 'null')
{
$item['UF_FILE'] = null;
}
else
{
// to prevent deletion
unset($item['UF_FILE']);
}
if (empty($item["UF_XML_ID"]))
{
$item['UF_XML_ID'] = Random::getString(8, true);
}
if (isset($item['UF_DEF']))
{
$value = (string)$item['UF_DEF'];
$item['UF_DEF'] = $value === '1' || $value === 'Y' ? 1 : 0;
}
// clear fields list
$item = array_filter(
$item,
static fn($name) => isset($fieldsList[$name]),
ARRAY_FILTER_USE_KEY
);
if ($isNewHighload)
{
$entityDataClass::add($item);
}
else
{
if ($itemId > 0)
{
$existRow = $entityDataClass::getRowById($itemId);
if ($existRow)
{
$result->addErrors(
$entityDataClass::update($itemId, $item)->getErrors()
);
}
}
else
{
$result->addErrors(
$entityDataClass::add($item)->getErrors()
);
}
}
}
return $result;
}