• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/timeline/entity/timelinebinding.php
  • Класс: Bitrix\Crm\Timeline\Entity\TimelineBindingTable
  • Вызов: TimelineBindingTable::attach
static function attach($srcEntityTypeID, $srcEntityID, $targEntityTypeID, $targEntityID,  array $typeIDs)
{
	$srcEntityTypeID = (int)$srcEntityTypeID;
	$srcEntityID = (int)$srcEntityID;
	$targEntityTypeID = (int)$targEntityTypeID;
	$targEntityID = (int)$targEntityID;

	$connection = Main\Application::getConnection();
	$typeIDs = array_filter(array_map('intval', $typeIDs));
	if(!empty($typeIDs))
	{
		$typeSql = implode(',', $typeIDs);
		$dbResult = $connection->query(
			"SELECT b.OWNER_ID FROM b_crm_timeline_bind b INNER JOIN b_crm_timeline t ON b.OWNER_ID = t.ID AND t.TYPE_ID IN ({$typeSql}) AND b.ENTITY_TYPE_ID = {$srcEntityTypeID} AND b.ENTITY_ID = {$srcEntityID}"
		);
	}
	else
	{
		$dbResult = $connection->query(
			"SELECT OWNER_ID FROM b_crm_timeline_bind WHERE ENTITY_TYPE_ID = {$srcEntityTypeID} AND ENTITY_ID = {$srcEntityID}"
		);
	}

	$ownerIDs = array();
	while($fields = $dbResult->fetch())
	{
		$ownerIDs[] = $fields['OWNER_ID'];
	}

	foreach($ownerIDs as $ownerID)
	{
		$fields = array(
			'OWNER_ID' => $ownerID,
			'ENTITY_TYPE_ID' => $targEntityTypeID,
			'ENTITY_ID' => $targEntityID
		);

		$queries = $connection->getSqlHelper()->prepareMerge(
			'b_crm_timeline_bind',
			array('OWNER_ID', 'ENTITY_TYPE_ID', 'ENTITY_ID'),
			$fields,
			$fields
		);

		foreach($queries as $query)
		{
			$connection->queryExecute($query);
		}
	}

	if (\CCrmOwnerType::IsDefined($targEntityTypeID) && $targEntityID > 0)
	{
		Monitor::getInstance()->onTimelineEntryAdd(new ItemIdentifier($targEntityTypeID, $targEntityID));
	}

	self::cleanCache();
}