• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/urlpreview/route.php
  • Класс: BitrixMainUrlPreviewRouteTable
  • Вызов: RouteTable::merge
static function merge(array $data)
{
	$result = new AddResult();

	try
	{
		// set fields with default values
		foreach (static::getEntity()->getFields() as $field)
		{
			if ($field instanceof ScalarField && !array_key_exists($field->getName(), $data))
			{
				$defaultValue = $field->getDefaultValue();

				if ($defaultValue !== null)
				{
					$data[$field->getName()] = $field->getDefaultValue();
				}
			}
		}

		static::checkFields($result, null, $data);

		// use save modifiers
		foreach ($data as $fieldName => $value)
		{
			$field = static::getEntity()->getField($fieldName);
			$data[$fieldName] = $field->modifyValueBeforeSave($value, $data);
		}

		$helper = Application::getConnection()->getSqlHelper();
		$insertData = $data;
		$updateData = $data;
		unset($updateData['ROUTE']);
		$merge = $helper->prepareMerge(
			static::getTableName(),
			array("ROUTE"),
			$insertData,
			$updateData
		);

		if ($merge[0] != "")
		{
			Application::getConnection()->query($merge[0]);
			$id = Application::getConnection()->getInsertedId();
			if($id == 0)
			{
				$updatedRecord = static::getByRoute($data['ROUTE']);
				$id = $updatedRecord['ID'];
			}
			$result->setId($id);
			$result->setData($data);
		}
		else
		{
			$result->addError(new MainError('Error constructing query'));
		}
	}
	catch (Exception $e)
	{
		// check result to avoid warning
		$result->isSuccess();

		throw $e;
	}

	return $result;
}