- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integrity/duplicatecommunicationmatchcode.php
- Класс: Bitrix\Crm\Integrity\DuplicateCommunicationMatchCodeTable
- Вызов: DuplicateCommunicationMatchCodeTable::replaceValues
static function replaceValues($entityTypeID, $entityID, $type, array $values)
{
$connection = \Bitrix\Main\Application::getConnection();
$sqlHelper = $connection->getSqlHelper();
$typeSql = $sqlHelper->forSql($type);
if(empty($values))
{
$connection->queryExecute(
"DELETE FROM b_crm_dp_comm_mcd WHERE ENTITY_TYPE_ID = {$entityTypeID} AND ENTITY_ID = {$entityID} AND TYPE = '{$typeSql}'"
);
return;
}
$items = array();
$result = $connection->query("SELECT ID, VALUE FROM b_crm_dp_comm_mcd WHERE ENTITY_TYPE_ID = {$entityTypeID} AND ENTITY_ID = {$entityID} AND TYPE = '{$typeSql}'");
while($fields = $result->fetch())
{
$items[intval($fields['ID'])] = $fields['VALUE'];
}
$deleteIDs = array();
foreach($items as $itemID => $itemValue)
{
if(!in_array($itemValue, $values, true))
{
$deleteIDs[] = $itemID;
}
}
$insertValues = array();
foreach($values as $value)
{
if(!is_string($value) || $value === '')
{
continue;
}
if(!in_array($value, $items, true))
{
$insertValues[] = $value;
}
}
if(!empty($deleteIDs))
{
$idsSql = implode(',', $deleteIDs);
$connection->queryExecute(
"DELETE FROM b_crm_dp_comm_mcd WHERE ID IN ({$idsSql})"
);
}
if(!empty($insertValues))
{
if($connection instanceof \Bitrix\Main\DB\MysqlCommonConnection)
{
$valueData = array();
foreach($insertValues as $value)
{
$valueSql = $sqlHelper->forSql($value);
$valueData[] = "({$entityTypeID}, {$entityID}, '{$typeSql}', '{$valueSql}')";
}
$valuesSql = implode(', ', $valueData);
$connection->queryExecute(
"INSERT INTO b_crm_dp_comm_mcd(ENTITY_TYPE_ID, ENTITY_ID, TYPE, VALUE) VALUES {$valuesSql}"
);
}
elseif($connection instanceof \Bitrix\Main\DB\MssqlConnection)
{
if(count($insertValues) > 1)
{
$valueData = array();
foreach($insertValues as $value)
{
$valueSql = $sqlHelper->forSql($value);
$valueData[] = "SELECT {$entityTypeID}, {$entityID}, '{$typeSql}', '{$valueSql}'";
}
$valuesSql = implode(' UNION ALL ', $valueData);
if($valuesSql !== '')
{
$connection->queryExecute(
"INSERT INTO b_crm_dp_comm_mcd(ENTITY_TYPE_ID, ENTITY_ID, TYPE, VALUE) {$valuesSql}"
);
}
}
else
{
$valueSql = $sqlHelper->forSql($insertValues[0]);
$valuesSql = "({$entityTypeID}, {$entityID}, '{$typeSql}', '{$valueSql}')";
$connection->queryExecute(
"INSERT INTO b_crm_dp_comm_mcd(ENTITY_TYPE_ID, ENTITY_ID, TYPE, VALUE) VALUES {$valuesSql}"
);
}
}
elseif($connection instanceof \Bitrix\Main\DB\OracleConnection)
{
if(count($insertValues) > 1)
{
$valueData = array();
foreach($insertValues as $value)
{
$valueSql = $sqlHelper->forSql($value);
$valueData[] = "SELECT {$entityTypeID}, {$entityID}, '{$typeSql}', '{$valueSql}' FROM dual";
}
$valuesSql = implode(' UNION ALL ', $valueData);
$connection->queryExecute(
"INSERT INTO b_crm_dp_comm_mcd(ENTITY_TYPE_ID, ENTITY_ID, TYPE, VALUE) {$valuesSql}"
);
}
else
{
$valueSql = $sqlHelper->forSql($insertValues[0]);
$valuesSql = "({$entityTypeID}, {$entityID}, '{$typeSql}', '{$valueSql}')";
$connection->queryExecute(
"INSERT INTO b_crm_dp_comm_mcd(ENTITY_TYPE_ID, ENTITY_ID, TYPE, VALUE) VALUES {$valuesSql}"
);
}
}
else
{
$dbType = $connection->getType();
throw new Main\NotSupportedException("The '{$dbType}' is not supported in current context");
}
}
}