- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/timeline/timelineentry.php
- Класс: Bitrix\Crm\Timeline\TimelineEntry
- Вызов: TimelineEntry::synchronizeAssociatedEntityBindings
static function synchronizeAssociatedEntityBindings($entityTypeID, $entityID, array $bindings)
{
if(!is_int($entityTypeID))
{
$entityTypeID = (int)$entityTypeID;
}
if($entityTypeID <= 0)
{
throw new Main\ArgumentException('Entity Type ID must be greater than zero.', 'entityTypeID');
}
if(!is_int($entityID))
{
$entityID = (int)$entityID;
}
if($entityID <= 0)
{
throw new Main\ArgumentException('Entity ID must be greater than zero.', 'entityID');
}
$query = new Query(Entity\TimelineTable::getEntity());
$query->addFilter('=ASSOCIATED_ENTITY_ID', $entityID);
$query->addFilter('=ASSOCIATED_ENTITY_TYPE_ID', $entityTypeID);
$query->addSelect('ID');
$dbResult = $query->exec();
$entryIDs = array();
while($entry = $dbResult->fetch())
{
$entryIDs[] = (int)$entry['ID'];
}
if(empty($entryIDs))
{
return;
}
$originalBindings = array();
$query = new Query(Entity\TimelineBindingTable::getEntity());
$query->addFilter('=OWNER_ID', $entryIDs[0]);
$query->addSelect('ENTITY_TYPE_ID');
$query->addSelect('ENTITY_ID');
$dbResult = $query->exec();
while($binding = $dbResult->fetch())
{
$originalBindings[] = $binding;
}
$added = array();
$removed = array();
self::prepareBindingChanges($originalBindings, $bindings, $added, $removed);
foreach($entryIDs as $entryID)
{
foreach($removed as $binding)
{
Entity\TimelineBindingTable::delete(
array(
'OWNER_ID' => $entryID,
'ENTITY_TYPE_ID' => $binding['ENTITY_TYPE_ID'],
'ENTITY_ID' => $binding['ENTITY_ID']
)
);
}
foreach($added as $binding)
{
Entity\TimelineBindingTable::upsert(
array(
'OWNER_ID' => $entryID,
'ENTITY_TYPE_ID' => $binding['ENTITY_TYPE_ID'],
'ENTITY_ID' => $binding['ENTITY_ID']
)
);
}
}
}