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