- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/binding/dealcontact.php
- Класс: Bitrix\Crm\Binding\DealContactTable
- Вызов: DealContactTable::rebindAllDeals
static function rebindAllDeals($seedContactID, $targContactID)
{
$seedContactID = (int)$seedContactID;
if($seedContactID <= 0)
{
throw new Main\ArgumentException('Must be greater than zero', 'seedContactID');
}
$targContactID = (int)$targContactID;
if($targContactID <= 0)
{
throw new Main\ArgumentException('Must be greater than zero', 'targContactID');
}
if($seedContactID === $targContactID)
{
return;
}
$connection = Main\Application::getConnection();
$dbResult = $connection->query(
/** @lang text */
"SELECT DEAL_ID FROM b_crm_deal_contact WHERE CONTACT_ID = {$seedContactID}"
);
while($fields = $dbResult->fetch())
{
$dealID = (int)$fields['DEAL_ID'];
$bindings = self::getDealBindings($dealID);
$seedIndex = $targIndex = -1;
for($i = 0, $l = count($bindings); $i < $l; $i++)
{
$binding = $bindings[$i];
$contactID = (int)$binding['CONTACT_ID'];
if($contactID === $seedContactID)
{
$seedIndex = $i;
}
elseif($contactID === $targContactID)
{
$targIndex = $i;
}
if($seedIndex >= 0 && $targIndex >= 0)
{
break;
}
}
$seedBinding = $seedIndex >= 0 ? $bindings[$seedIndex] : null;
$targBinding = $targIndex >= 0 ? $bindings[$targIndex] : null;
if(!is_array($seedBinding))
{
continue;
}
self::unbindContactIDs($dealID, array($seedContactID));
$isPrimary = isset($seedBinding['IS_PRIMARY']) && $seedBinding['IS_PRIMARY'] === 'Y';
if(!is_array($targBinding))
{
$seedBinding['CONTACT_ID'] = $targContactID;
self::bindContacts($dealID, array($seedBinding));
}
elseif($isPrimary)
{
$targBinding['IS_PRIMARY'] = 'Y';
self::bindContacts($dealID, array($targBinding));
}
}
}