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