3namespace Bitrix\MessageService\Internal\Entity;
5use Bitrix\Main\Application;
6use Bitrix\Main\DB\SqlExpression;
7use Bitrix\Main\ORM\Data\DataManager;
8use Bitrix\Main\ORM\Fields\ArrayField;
9use Bitrix\Main\ORM\Fields\DateField;
10use Bitrix\Main\ORM\Fields\IntegerField;
11use Bitrix\Main\ORM\Fields\StringField;
12use Bitrix\Main\ORM\Fields\Validators\LengthValidator;
13use Bitrix\Main\ORM\Query\Query;
14use Bitrix\Main\Type\Date;
39 return 'b_messageservice_restriction';
51 ->configurePrimary(
true)
52 ->configureAutocomplete(
true)
55 'validation' =>
function()
62 ->configureRequired(
true)
65 'DATE_CREATE' => (
new DateField(
'DATE_CREATE', []))
66 ->configureRequired(
true)
68 'ADDITIONAL_PARAMS' => (
new ArrayField(
'ADDITIONAL_PARAMS', []))
69 ->configureSerializeCallback(
static function($value) {
73 $preparedValue[] =
"|$entity|";
75 $result = implode(
' ', $preparedValue);
79 ->configureUnserializeCallback(
static function($value) {
80 if ((
string)$value ===
'')
86 foreach(explode(
' ', $value) as
$entity)
102 public static function updateCounter(
string $filteringCode,
int $filteringCounter): bool
105 $table = static::getTableName();
108 ->where(
'CODE', $filteringCode)
109 ->where(
'COUNTER',
'<=', $filteringCounter)
110 ->where(
'DATE_CREATE',
new Date())
117 $where =
' WHERE ' . $where;
120 $helper = Application::getConnection()->getSqlHelper();
121 $tableName = $helper->quote(
$table);
122 $updateCounter = (
new SqlExpression(
"?# = ?# + 1",
'COUNTER',
'COUNTER'))->compile();
124 $sql =
"UPDATE {$tableName} SET {$updateCounter} {$where}";
126 Application::getConnection()->queryExecute($sql);
128 return Application::getConnection()->getAffectedRowsCount() === 1;
141 $table = static::getTableName();
142 $encodedAdditionalParam =
self::getMap()[
'ADDITIONAL_PARAMS']->encode([$additionalParam]);
145 ->where(
'CODE',
$code)
146 ->where(
'COUNTER',
'<=', $limit)
147 ->where(
'DATE_CREATE',
new Date())
154 $where =
' WHERE ' . $where;
157 $helper = Application::getConnection()->getSqlHelper();
158 $tableName = $helper->quote(
$table);
166 "?# = (CASE WHEN POSITION(?s IN ?#) = 0 THEN ?# + 1 ELSE ?# END)",
168 $encodedAdditionalParam,
175 "?# = (CASE WHEN POSITION(?s IN ?#) = 0 THEN CONCAT_WS(' ', ?#, ?s) ELSE ?# END)",
177 $encodedAdditionalParam,
180 $encodedAdditionalParam,
184 $sql =
"UPDATE {$tableName} SET {$updateCounter}, {$updateAdditionParams} {$where}";
186 Application::getConnection()->queryExecute($sql);
188 return Application::getConnection()->getAffectedRowsCount() === 1;
197 $helper = Application::getConnection()->getSqlHelper();
198 $table = static::getTableName();
200 $sql = $helper->prepareMerge(
202 [
'CODE',
'DATE_CREATE'],
205 'DATE_CREATE' =>
new Date(),
207 'ADDITIONAL_PARAMS' =>
'',
214 Application::getConnection()->queryExecute($sql);
224 $helper = Application::getConnection()->getSqlHelper();
225 $table = static::getTableName();
226 $additionalParam =
self::getMap()[
'ADDITIONAL_PARAMS']->encode([$additionalParam]);
228 $sql = $helper->prepareMerge(
230 [
'CODE',
'DATE_CREATE'],
233 'DATE_CREATE' =>
new Date(),
235 'ADDITIONAL_PARAMS' => $additionalParam,
239 "(CASE WHEN POSITION(?s IN ?#.?#) = 0 THEN ?#.?# + 1 ELSE ?#.?# END)",
241 $table,
'ADDITIONAL_PARAMS',
246 "(CASE WHEN POSITION(?s IN ?#.?#) = 0 THEN CONCAT_WS(' ', ?#.?#, ?s) ELSE ?#.?# END)",
248 $table,
'ADDITIONAL_PARAMS',
249 $table,
'ADDITIONAL_PARAMS',
251 $table,
'ADDITIONAL_PARAMS'
256 Application::getConnection()->queryExecute($sql);
static updateCounter(string $filteringCode, int $filteringCounter)
static insertCounter(string $code)
static updateCounterWithParam(string $code, int $limit, string $additionalParam)
static insertCounterWithParam(string $code, string $additionalParam)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code