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