Make Gender normalize usernames

This ensures that if GENDER is fed wfEscapeWikitext()'d version
of a username, it will normalize it.

See discussion on T182800.

Note, we do not need to worry about the case of a user named
"Project:*foo" as such namespace prefixes are illegal in
usernames.

Change-Id: Ic5a8fc76c28dca43ce8e334ef1874c2673433f00
This commit is contained in:
Brian Wolff 2017-12-17 22:12:06 +00:00
parent 7084c1e9f4
commit 5fd1e1abe0
2 changed files with 23 additions and 2 deletions

View file

@ -337,8 +337,8 @@ class CoreParserFunctions {
// default
$gender = User::getDefaultOption( 'gender' );
// allow prefix.
$title = Title::newFromText( $username );
// allow prefix and normalize (e.g. "*foo" -> "*foo" ).
$title = Title::newFromText( $username, NS_USER );
if ( $title && $title->inNamespace( NS_USER ) ) {
$username = $title->getText();

View file

@ -0,0 +1,21 @@
<?php
/**
* @group Database
* @covers CoreParserFunctions
*/
class CoreParserFunctionsTest extends MediaWikiTestCase {
public function testGender() {
$user = User::createNew( '*Female' );
$user->setOption( 'gender', 'female' );
$user->saveSettings();
$msg = ( new RawMessage( '{{GENDER:*Female|m|f|o}}' ) )->parse();
$this->assertEquals( $msg, 'f', 'Works unescaped' );
$escapedName = wfEscapeWikiText( '*Female' );
$msg2 = ( new RawMessage( '{{GENDER:' . $escapedName . '|m|f|o}}' ) )
->parse();
$this->assertEquals( $msg, 'f', 'Works escaped' );
}
}