25 use InvalidArgumentException;
42 public const AUDIENCE_PUBLIC =
'public';
48 private $userNameUtils;
58 $this->dbProvider = $dbProvider;
59 $this->userNameUtils = $userNameUtils;
73 public function search( $audience,
string $search,
int $limit,
int $offset = 0 ): array {
74 if ( $audience !== self::AUDIENCE_PUBLIC &&
77 throw new InvalidArgumentException(
78 '$audience must be AUDIENCE_PUBLIC or an Authority object'
83 $prefix = $this->userNameUtils->getCanonical( $search ) ?:
'';
85 $dbr = $this->dbProvider->getReplicaDatabase();
86 $queryBuilder =
$dbr->newSelectQueryBuilder()
87 ->select(
'user_name' )
89 ->where( [
'user_name ' .
$dbr->buildLike( $prefix,
$dbr->anyString() ) ] )
90 ->orderBy(
'user_name' )
95 if ( $audience === self::AUDIENCE_PUBLIC || !$audience->isAllowed(
'hideuser' ) ) {
96 $queryBuilder->leftJoin(
'ipblocks',
null,
'user_id=ipb_user' );
97 $queryBuilder->andWhere( [
'ipb_deleted' => [ 0,
null ] ] );
100 return $queryBuilder->caller( __METHOD__ )->fetchFieldValues();
if(!defined('MW_SETUP_CALLBACK'))