• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/controller/usertogroup.php
  • Класс: BitrixSocialnetworkControllerUserToGroup
  • Вызов: UserToGroup::processFilter
private function processFilter(Query $query, array $filter): Query
{
	if (array_key_exists('ID', $filter))
	{
		$ids = (is_array($filter['ID']) ? $filter['ID'] : [$filter['ID']]);
		$ids = array_map('intval', $ids);
		$ids = array_filter($ids);

		if (!empty($ids))
		{
			count($ids) > 1
				? $query->whereIn('ID', $ids)
				: $query->where('ID', $ids[0])
			;
		}
	}

	if (array_key_exists('GROUP_ID', $filter))
	{
		$query->where('GROUP_ID', (int)$filter['GROUP_ID']);
	}

	if (array_key_exists('ROLE', $filter))
	{
		$roles = (is_array($filter['ROLE']) ? $filter['ROLE'] : [$filter['ROLE']]);
		$roles = array_filter($roles);

		if (!empty($roles))
		{
			if (array_key_exists('INVITED_BY_ME', $filter) && $filter['INVITED_BY_ME'] === 'Y')
			{
				$query->where(
					Query::filter()
						->logic('or')
						->whereIn('ROLE', $roles)
						->where(
							Query::filter()
								->where('ROLE', UserToGroupTable::ROLE_REQUEST)
								->where('INITIATED_BY_TYPE', UserToGroupTable::INITIATED_BY_GROUP)
								->where('INITIATED_BY_USER_ID', $this->getCurrentUser()->getId())
						)
				);
			}
			else
			{
				$query->whereIn('ROLE', $roles);
			}
		}
		else if (array_key_exists('INVITED_BY_ME', $filter) && $filter['INVITED_BY_ME'] === 'Y')
		{
			$query->where(
				Query::filter()
					->where('ROLE', UserToGroupTable::ROLE_REQUEST)
					->where('INITIATED_BY_TYPE', UserToGroupTable::INITIATED_BY_GROUP)
					->where('INITIATED_BY_USER_ID', $this->getCurrentUser()->getId())
			);
		}
	}

	if (array_key_exists('INITIATED_BY_TYPE', $filter))
	{
		$query->where('INITIATED_BY_TYPE', $filter['INITIATED_BY_TYPE']);
	}

	if (array_key_exists('INITIATED_BY_USER_ID', $filter))
	{
		$query->where('INITIATED_BY_USER_ID', $filter['INITIATED_BY_USER_ID']);
	}

	if (array_key_exists('SEARCH_INDEX', $filter) && trim($filter['SEARCH_INDEX']) !== '')
	{
		$query->whereMatch(
			'USER.INDEX.SEARCH_ADMIN_CONTENT',
			FilterHelper::matchAgainstWildcard(Content::prepareStringToken(trim($filter['SEARCH_INDEX'])))
		);
	}

	return $query;
}