X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fuser%2FUser.php;h=1c894a0f346687767264650763bb952ed20b0c87;hb=5fa4cdf860c79b32ab6ef034c6d9420c2727f695;hp=08f054d286c5e32a9d65fa4b2e03c88272a6fa54;hpb=a8ec960e9d910acbcd0d50efad3bd73e3ae812aa;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/user/User.php b/includes/user/User.php index 08f054d286..1c894a0f34 100644 --- a/includes/user/User.php +++ b/includes/user/User.php @@ -827,6 +827,16 @@ class User implements IDBAccessObject { || IP::isIPv6( $name ); } + /** + * Is the user an IP range? + * + * @since 1.30 + * @return bool + */ + public function isIPRange() { + return IP::isValidRange( $this->mName ); + } + /** * Is the input a valid username? * @@ -1452,15 +1462,17 @@ class User implements IDBAccessObject { } $oldGroups = $this->getGroups(); // previous groups + $oldUGMs = $this->getGroupMemberships(); foreach ( $toPromote as $group ) { $this->addGroup( $group ); } + $newGroups = array_merge( $oldGroups, $toPromote ); // all groups + $newUGMs = $this->getGroupMemberships(); + // update groups in external authentication database - Hooks::run( 'UserGroupsChanged', [ $this, $toPromote, [], false, false ] ); + Hooks::run( 'UserGroupsChanged', [ $this, $toPromote, [], false, false, $oldUGMs, $newUGMs ] ); AuthManager::callLegacyAuthPlugin( 'updateExternalDBGroups', [ $this, $toPromote ] ); - $newGroups = array_merge( $oldGroups, $toPromote ); // all groups - $logEntry = new ManualLogEntry( 'rights', 'autopromote' ); $logEntry->setPerformer( $this ); $logEntry->setTarget( $this->getUserPage() ); @@ -4109,12 +4121,10 @@ class User implements IDBAccessObject { unset( $params['options'] ); } $dbw = wfGetDB( DB_MASTER ); - $seqVal = $dbw->nextSequenceValue( 'user_user_id_seq' ); $noPass = PasswordFactory::newInvalidPassword()->toString(); $fields = [ - 'user_id' => $seqVal, 'user_name' => $name, 'user_password' => $noPass, 'user_newpassword' => $noPass, @@ -4179,10 +4189,8 @@ class User implements IDBAccessObject { $noPass = PasswordFactory::newInvalidPassword()->toString(); $dbw = wfGetDB( DB_MASTER ); - $seqVal = $dbw->nextSequenceValue( 'user_user_id_seq' ); $dbw->insert( 'user', [ - 'user_id' => $seqVal, 'user_name' => $this->mName, 'user_password' => $noPass, 'user_newpassword' => $noPass, @@ -5311,6 +5319,13 @@ class User implements IDBAccessObject { $data[$row->up_property] = $row->up_value; } } + + // Convert the email blacklist from a new line delimited string + // to an array of ids. + if ( isset( $data['email-blacklist'] ) && $data['email-blacklist'] ) { + $data['email-blacklist'] = array_map( 'intval', explode( "\n", $data['email-blacklist'] ) ); + } + foreach ( $data as $property => $value ) { $this->mOptionOverrides[$property] = $value; $this->mOptions[$property] = $value; @@ -5333,6 +5348,26 @@ class User implements IDBAccessObject { // Not using getOptions(), to keep hidden preferences in database $saveOptions = $this->mOptions; + // Convert usernames to ids. + if ( isset( $this->mOptions['email-blacklist'] ) ) { + if ( $this->mOptions['email-blacklist'] ) { + $value = $this->mOptions['email-blacklist']; + // Email Blacklist may be an array of ids or a string of new line + // delimnated user names. + if ( is_array( $value ) ) { + $ids = array_filter( $value, 'is_numeric' ); + } else { + $lookup = CentralIdLookup::factory(); + $ids = $lookup->centralIdsFromNames( explode( "\n", $value ), $this ); + } + $this->mOptions['email-blacklist'] = $ids; + $saveOptions['email-blacklist'] = implode( "\n", $this->mOptions['email-blacklist'] ); + } else { + // If the blacklist is empty, set it to null rather than an empty string. + $this->mOptions['email-blacklist'] = null; + } + } + // Allow hooks to abort, for instance to save to a global profile. // Reset options to default state before saving. if ( !Hooks::run( 'UserSaveOptions', [ $this, &$saveOptions ] ) ) {