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