- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integrity/duplicaterequisitematchcode.php
- Класс: Bitrix\Crm\Integrity\DuplicateRequisiteMatchCodeTable
- Вызов: DuplicateRequisiteMatchCodeTable::replaceValues
static function replaceValues($entityTypeID, $entityID, $requsiteCountryId, $requisiteFieldName, array $values)
{
$connection = \Bitrix\Main\Application::getConnection();
$sqlHelper = $connection->getSqlHelper();
$rqCountryIdSql = (int)$requsiteCountryId;
$rqFieldNameSql = $sqlHelper->forSql($requisiteFieldName);
if(empty($values))
{
$connection->queryExecute(
/** @lang MySQL */
"DELETE FROM b_crm_dp_rq_mcd".PHP_EOL.
"\tWHERE ENTITY_TYPE_ID = {$entityTypeID} AND ENTITY_ID = {$entityID}".PHP_EOL.
"\tAND RQ_FIELD_NAME = '{$rqFieldNameSql}' AND RQ_COUNTRY_ID = {$rqCountryIdSql}"
);
return;
}
$items = array();
$result = $connection->query(
/** @lang MySQL */
"SELECT ID, VALUE".PHP_EOL.
"FROM b_crm_dp_rq_mcd".PHP_EOL.
"\tWHERE ENTITY_TYPE_ID = {$entityTypeID} AND ENTITY_ID = {$entityID}".PHP_EOL.
"\tAND RQ_FIELD_NAME = '{$rqFieldNameSql}' AND RQ_COUNTRY_ID = {$rqCountryIdSql}"
);
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(
/** @lang MySQL */
"DELETE FROM b_crm_dp_rq_mcd WHERE ID IN ({$idsSql})"
);
}
if(!empty($insertValues))
{
$valueData = array();
foreach($insertValues as $value)
{
$valueSql = $sqlHelper->forSql($value);
$valueData[] = "({$entityTypeID}, {$entityID}, {$rqCountryIdSql}, '{$rqFieldNameSql}', '{$valueSql}')";
}
$valuesSql = implode(', ', $valueData);
$connection->queryExecute(
/** @lang MySQL */
"INSERT INTO b_crm_dp_rq_mcd".PHP_EOL.
"\t(ENTITY_TYPE_ID, ENTITY_ID, RQ_COUNTRY_ID, RQ_FIELD_NAME, VALUE)".PHP_EOL
."\tVALUES {$valuesSql}"
);
}
}