use MediaWiki\Auth\AuthManager;
use MediaWiki\Auth\AuthenticationResponse;
use MediaWiki\Auth\AuthenticationRequest;
+use MediaWiki\User\UserIdentity;
use Wikimedia\ScopedCallback;
use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\DBExpectedError;
* for rendering normal pages are set in the cookie to minimize use
* of the database.
*/
-class User implements IDBAccessObject {
+class User implements IDBAccessObject, UserIdentity {
/**
* @const int Number of characters in user_token field.
*/
'reupload-shared',
'rollback',
'sendemail',
+ 'sendemail-new-users',
'siteadmin',
'suppressionlog',
'suppressredirect',
* @deprecated since 1.29
*/
private $mGroups;
- /** @var array Associative array of (group name => UserGroupMembership object) */
+ /** @var UserGroupMembership[] Associative array of (group name => UserGroupMembership object) */
protected $mGroupMemberships;
/** @var array */
protected $mOptionOverrides;
}
$dbr = wfGetDB( DB_REPLICA );
+ $userQuery = self::getQueryInfo();
$row = $dbr->selectRow(
- 'user',
- self::selectFields(),
+ $userQuery['tables'],
+ $userQuery['fields'],
[ 'user_name' => $name ],
- __METHOD__
+ __METHOD__,
+ [],
+ $userQuery['joins']
);
if ( !$row ) {
// Try the master database...
$dbw = wfGetDB( DB_MASTER );
$row = $dbw->selectRow(
- 'user',
- self::selectFields(),
+ $userQuery['tables'],
+ $userQuery['fields'],
[ 'user_name' => $name ],
- __METHOD__
+ __METHOD__,
+ [],
+ $userQuery['joins']
);
}
list( $index, $options ) = DBAccessObjectUtils::getDBOptions( $flags );
$db = wfGetDB( $index );
+ $userQuery = self::getQueryInfo();
$s = $db->selectRow(
- 'user',
- self::selectFields(),
+ $userQuery['tables'],
+ $userQuery['fields'],
[ 'user_id' => $this->mId ],
__METHOD__,
- $options
+ $options,
+ $userQuery['joins']
);
$this->queryFlagsUsed = $flags;
* Get the list of explicit group memberships this user has, stored as
* UserGroupMembership objects. Implicit groups are not included.
*
- * @return array Associative array of (group name as string => UserGroupMembership object)
+ * @return UserGroupMembership[] Associative array of (group name => UserGroupMembership object)
* @since 1.29
*/
public function getGroupMemberships() {
/**
* Return the list of user fields that should be selected to create
* a new user object.
+ * @deprecated since 1.31, use self::getQueryInfo() instead.
* @return array
*/
public static function selectFields() {
+ wfDeprecated( __METHOD__, '1.31' );
return [
'user_id',
'user_name',
];
}
+ /**
+ * Return the tables, fields, and join conditions to be selected to create
+ * a new user object.
+ * @since 1.31
+ * @return array With three keys:
+ * - tables: (string[]) to include in the `$table` to `IDatabase->select()`
+ * - fields: (string[]) to include in the `$vars` to `IDatabase->select()`
+ * - joins: (array) to include in the `$join_conds` to `IDatabase->select()`
+ */
+ public static function getQueryInfo() {
+ return [
+ 'tables' => [ 'user' ],
+ 'fields' => [
+ 'user_id',
+ 'user_name',
+ 'user_real_name',
+ 'user_email',
+ 'user_touched',
+ 'user_token',
+ 'user_email_authenticated',
+ 'user_email_token',
+ 'user_email_token_expires',
+ 'user_registration',
+ 'user_editcount',
+ ],
+ 'joins' => [],
+ ];
+ }
+
/**
* Factory function for fatal permission-denied errors
*