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