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