• Модуль: messageservice
  • Путь к файлу: ~/bitrix/modules/messageservice/lib/internal/entity/restrictiontable.php
  • Класс: BitrixMessageServiceInternalEntityRestrictionTable
  • Вызов: RestrictionTable::updateCounterWithParam
static function updateCounterWithParam(string $code, int $limit, string $additionalParam)
{
	$entity = static::getEntity();
	$table = static::getTableName();
	$encodedAdditionalParam = self::getMap()['ADDITIONAL_PARAMS']->encode([$additionalParam]);

	$filter = Query::filter()
		->where('CODE', $code)
		->where('COUNTER','<=', $limit)
		->where('DATE_CREATE', new Date())
	;

	$where = Query::buildFilterSql($entity, $filter);

	if($where !== '')
	{
		$where = ' where ' . $where;
	}

	$helper = Application::getConnection()->getSqlHelper();
	$tableName = $helper->quote($table);

	$sql = "
		UPDATE {$tableName}
		SET
			COUNTER = IF (
				LOCATE('{$encodedAdditionalParam}', ADDITIONAL_PARAMS) = 0,
				COUNTER + 1,
				COUNTER
			),
			ADDITIONAL_PARAMS = IF (
				LOCATE('{$encodedAdditionalParam}', ADDITIONAL_PARAMS) = 0,
				CONCAT_WS(' ', ADDITIONAL_PARAMS, '{$encodedAdditionalParam}'),
				'{$encodedAdditionalParam}'
				
			)
		{$where}
	";

	Application::getConnection()->queryExecute($sql);

	return Application::getConnection()->getAffectedRowsCount() === 1;
}