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