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