- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/Configuration/Notification.php
- Класс: BitrixImConfigurationNotification
- Вызов: Notification::filterAllowedUsers
public function filterAllowedUsers(array $userList, string $type): array
{
if (empty($userList))
{
return [];
}
$userList = General::filterAllowedUsersBySimpleNotificationSettings($userList, $type);
if (empty($userList))
{
return [];
}
$encodedSetting = self::encodeName($this->module, $this->name, $type);
$defaultSettings = self::getDefaultSettings();
$defaultSettings = self::encodeSettings($defaultSettings);
if (!array_key_exists($encodedSetting, $defaultSettings))
{
$encodedSetting = self::encodeName('im', 'default', $type);
}
$value = $defaultSettings[$encodedSetting] === 'Y' ? 'Y' : 'N';
$filteredUsers = [];
if (count($userList) < 1000)
{
$filteredUsers = $this->filterChunk($userList, $encodedSetting, $value);
}
else
{
$chunkList = array_chunk($userList, static::CHUNK_LENGTH);
foreach ($chunkList as $chunk)
{
$filteredUsers = array_merge($filteredUsers, $this->filterChunk($chunk, $encodedSetting, $value));
}
}
if ($type !== self::PUSH)
{
return $filteredUsers;
}
//checked push
if (empty($filteredUsers))
{
return $filteredUsers;
}
$rowFilteredPushUsers =
PushTable::query()
->addSelect('USER_ID')
->whereIn('USER_ID', $filteredUsers)
;
$filteredUsers = [];
foreach ($rowFilteredPushUsers->exec() as $user)
{
$filteredUsers[] = (int)$user['USER_ID'];
}
return array_unique($filteredUsers);
}