- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/ui/entityselector/entityusagetable.php
- Класс: BitrixMainUIEntitySelectorEntityUsageTable
- Вызов: EntityUsageTable::merge
static function merge(array $data)
{
$userId = (
isset($data['USER_ID']) && intval($data['USER_ID']) > 0
? intval($data['USER_ID'])
: (is_object($GLOBALS['USER']) ? $GLOBALS['USER']->getId() : 0)
);
if ($userId <= 0)
{
return false;
}
if (empty($data['CONTEXT']) || !is_string($data['CONTEXT']))
{
return false;
}
if (empty($data['ENTITY_ID']) || !is_string($data['ENTITY_ID']))
{
return false;
}
$entityId = strtolower($data['ENTITY_ID']);
if (empty($data['ITEM_ID']) || (!is_string($data['ITEM_ID']) && !is_int($data['ITEM_ID'])))
{
return false;
}
$itemIdInteger = 0;
if (isset($data['ITEM_ID_INT']) && is_int($data['ITEM_ID_INT']))
{
$itemIdInteger = $data['ITEM_ID_INT'];
}
else if (preg_match('/(?[0-9]+)/', (string)$data['ITEM_ID'], $matches))
{
$itemIdInteger = (int)$matches['id'];
}
$prefix = '';
if (!empty($data['PREFIX']) && is_string($data['PREFIX']))
{
$prefix = $data['PREFIX'];
}
else
{
$compatEntities = Converter::getCompatEntities();
if (isset($compatEntities[$entityId]))
{
$prefix = $compatEntities[$entityId]['prefix'];
if (is_callable($prefix))
{
$prefix = $prefix($data['ITEM_ID']);
}
}
}
$sqlHelper = Application::getConnection()->getSqlHelper();
$merge = $sqlHelper->prepareMerge(
static::getTableName(),
['USER_ID', 'ITEM_ID', 'ENTITY_ID', 'CONTEXT'],
[
'USER_ID' => $userId,
'CONTEXT' => mb_strtoupper($data['CONTEXT']),
'ENTITY_ID' => $entityId,
'ITEM_ID' => $data['ITEM_ID'],
'ITEM_ID_INT' => $itemIdInteger,
'PREFIX' => $prefix,
'LAST_USE_DATE' => new MainTypeDateTime(),
],
[
'LAST_USE_DATE' => new MainTypeDateTime()
]
);
if ($merge[0] !== "")
{
Application::getConnection()->query($merge[0]);
}
else
{
return false;
}
return true;
}