• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/integration/tasks/task.php
  • Класс: BitrixSocialnetworkIntegrationTasksTask
  • Вызов: Task::updateUserCounter
static function updateUserCounter(array $params = []): void
{
	$logId = (int)($params['logId'] ?? 0);
	$userId = (int)($params['userId'] ?? 0);
	$siteId = SITE_ID;

	if (
		$logId <= 0
		|| $userId <= 0
	)
	{
		return;
	}

	UserCounterTable::delete([
		'USER_ID' => $userId,
		'SITE_ID' => SITE_ID,
		'CODE' => '**L' . $logId,
	]);

	$query = new BitrixMainEntityQuery(UserCounterTable::getEntity());
	$query->addFilter('=USER_ID', $userId);
	$query->addFilter('=SITE_ID', $siteId);
	$query->addSelect('CODE');

	$query->registerRuntimeField(
		'comment',
		new BitrixMainEntityReferenceField('LC',
			LogCommentTable::getEntity(),
			[
				'=ref.LOG_ID' => new SqlExpression('?i', $logId),
			],
			[ 'join_type' => 'INNER' ]
		)
	);

	$query->whereExpr("%s = CONCAT('**LC', %s)", [ 'CODE', 'comment.ID' ]);
	$res = $query->exec();

	while ($counterFields = $res->fetch())
	{
		UserCounterTable::delete([
			'USER_ID' => $userId,
			'SITE_ID' => $siteId,
			'CODE' => $counterFields['CODE'],
		]);
	}

	// to send pushes only
	UserCounterTable::update([
		'USER_ID' => $userId,
		'SITE_ID' => $siteId,
		'CODE' => '**',
	], [
		'SENT' => 0,
	]);
}