42 $this->options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS );
61 [ $name, $wikiId ] = $this->parseUserDesignator( $designator );
66 if ( !in_array( $wikiId, $localDatabases ) ) {
67 return Status::newFatal(
'userrights-nodatabase', $wikiId );
72 return Status::newFatal(
'nouserspecified' );
75 if ( IPUtils::isValid( $name ) ) {
79 $userIdentityLookup = $this->actorStoreFactory->getUserIdentityLookup( $wikiId );
80 if ( $name[0] ==
'#' ) {
81 $id = intval( substr( $name, 1 ) );
82 $user = $userIdentityLookup->getUserIdentityByUserId( $id );
84 $user = $userIdentityLookup->getUserIdentityByName( $name );
88 return Status::newFatal(
'nosuchusershort', $designator );
96 $this->userFactory->newFromUserIdentity( $user )->isHidden() &&
97 !$viewer->isAllowed(
'hideuser' )
99 return Status::newFatal(
'nosuchusershort', $designator );
102 return Status::newGood( $user );
110 private function parseUserDesignator(
string $designator ): array {
111 $interwikiSeparator = $this->options->get( MainConfigNames::UserrightsInterwikiDelimiter );
112 $designatorParts = explode( $interwikiSeparator, $designator );
114 $name = trim( $designator );
116 if ( count( $designatorParts ) >= 2 ) {
117 $name = trim( $designatorParts[0] );
118 $wikiId = trim( $designatorParts[1] );
120 if ( WikiMap::isCurrentWikiId( $wikiId ) ) {
124 return [ $name, $wikiId ];
A class containing constants representing the names of configuration variables.
const LocalDatabases
Name constant for the LocalDatabases setting, for use with Config::get()
const UserrightsInterwikiDelimiter
Name constant for the UserrightsInterwikiDelimiter setting, for use with Config::get()