• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/Controller/Property/Directory/Action/SaveSettingsAction.php
  • Класс: BitrixIblockControllerPropertyDirectoryActionSaveSettingsAction
  • Вызов: SaveSettingsAction::run
public function run(int $propertyId, array $fields): bool
{
	Loader::requireModule('highloadblock');

	if (!$this->checkWritePermissions($propertyId))
	{
		$this->errorCollection->setError(
			new Error(Loc::getMessage('IBLOCK_CONTROLLER_PROPERTY_DIRECTION_ACTION_SAVE_ERROR_ACCESS_DENIED'))
		);

		return false;
	}

	$fields = $this->cleanEntityFields($fields);
	if (empty($fields))
	{
		$this->errorCollection->setError(
			new Error(Loc::getMessage('IBLOCK_CONTROLLER_PROPERTY_DIRECTION_ACTION_SAVE_ERROR_BAD_REQUEST'))
		);

		return false;
	}

	$name = isset($fields['DIRECTORY_NAME']) && is_scalar($fields['DIRECTORY_NAME']) ? (string)$fields['DIRECTORY_NAME'] : null;
	$tableName = isset($fields['DIRECTORY_TABLE_NAME']) && is_scalar($fields['DIRECTORY_TABLE_NAME']) ? (string)$fields['DIRECTORY_TABLE_NAME'] : null;
	if (!$tableName && !$name)
	{
		$this->errorCollection->setError(
			new Error(Loc::getMessage('IBLOCK_CONTROLLER_PROPERTY_DIRECTION_ACTION_SAVE_ERROR_BAD_REQUEST'))
		);

		return false;
	}

	$db = Application::getConnection();
	try
	{
		$db->startTransaction();

		$result = $this->save($propertyId, $name, $tableName, $fields);
		if ($result->isSuccess())
		{
			$db->commitTransaction();
		}
		else
		{
			$db->rollbackTransaction();
		}
	}
	catch (Throwable $e)
	{
		$db->rollbackTransaction();

		throw $e;
	}

	foreach ($result->getErrors() as $error)
	{
		$this->errorCollection->setError($error);
	}

	return $result->isSuccess();
}