Treat anonymouse user IP pages as UserPages
Ensure SkinUserPageHelper::isUserPage() returns true for user pages that are IP addresses. Also adds the page-action menu to all user pages. Bug: T220114 Change-Id: I3703899bc9ff0042c74260d36f48a388b78b0b6b
This commit is contained in:
parent
3598618390
commit
7af32bc309
|
@ -234,10 +234,7 @@ class SkinMinerva extends SkinTemplate {
|
|||
return $this->skinOptions->get( SkinOptions::OPTION_OVERFLOW_SUBMENU );
|
||||
}
|
||||
|
||||
if (
|
||||
!in_array( $action, $config->get( 'MinervaPageActions' ) )
|
||||
|| ( $this->getUserPageHelper()->isUserPage() && !$title->exists() )
|
||||
) {
|
||||
if ( !in_array( $action, $config->get( 'MinervaPageActions' ) ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -46,33 +46,50 @@ class SkinUserPageHelper {
|
|||
}
|
||||
|
||||
/**
|
||||
* Fetch user data and store locally for perfomance improvement
|
||||
* Fetch user data and store locally for performance improvement
|
||||
* @return User|null
|
||||
*/
|
||||
private function fetchData() {
|
||||
if ( $this->fetchedData === false ) {
|
||||
if ( $this->title->inNamespace( NS_USER ) && !$this->title->isSubpage() ) {
|
||||
$pageUserId = User::idFromName( $this->title->getText() );
|
||||
if ( $pageUserId ) {
|
||||
$this->pageUser = User::newFromId( $pageUserId );
|
||||
}
|
||||
$this->pageUser = $this->buildPageUserObject( $this->title );
|
||||
}
|
||||
$this->fetchedData = true;
|
||||
}
|
||||
return $this->pageUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return new User object based on username or IP address.
|
||||
* @param Title $title
|
||||
* @return User|null
|
||||
*/
|
||||
private function buildPageUserObject( Title $title ) {
|
||||
$titleText = $title->getText();
|
||||
|
||||
if ( User::isIP( $titleText ) ) {
|
||||
return User::newFromAnyId( null, $titleText, null );
|
||||
}
|
||||
|
||||
$pageUserId = User::idFromName( $titleText );
|
||||
if ( $pageUserId ) {
|
||||
return User::newFromId( $pageUserId );
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return User|null
|
||||
*/
|
||||
public function getPageUser() {
|
||||
$this->fetchData();
|
||||
return $this->pageUser;
|
||||
return $this->fetchData();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isUserPage() {
|
||||
$this->fetchData();
|
||||
return $this->pageUser !== null;
|
||||
return $this->fetchData() !== null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -128,15 +128,11 @@ class SkinMinervaPageActionsTest extends MediaWikiTestCase {
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$userPageHelper->expects( $this->once() )
|
||||
->method( 'isUserPage' )
|
||||
->willReturn( true );
|
||||
|
||||
$skin = $this->getSkin( Title::newFromText( 'User:Admin' ) );
|
||||
|
||||
$this->setService( 'Minerva.SkinUserPageHelper', $userPageHelper );
|
||||
|
||||
$this->assertFalse( $skin->isAllowedPageAction( 'talk' ) );
|
||||
$this->assertTrue( $skin->isAllowedPageAction( 'talk' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -147,11 +143,21 @@ class SkinMinervaPageActionsTest extends MediaWikiTestCase {
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$userPageHelper->expects( $this->once() )
|
||||
->method( 'isUserPage' )
|
||||
->willReturn( false );
|
||||
$skin = $this->getSkin( Title::newFromText( 'A_test_page' ) );
|
||||
$this->setService( 'Minerva.SkinUserPageHelper', $userPageHelper );
|
||||
|
||||
$skin = $this->getSkin( Title::newFromText( 'User:Admin' ) );
|
||||
$this->assertTrue( $skin->isAllowedPageAction( 'talk' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers SkinMinerva::isAllowedPageAction
|
||||
*/
|
||||
public function testPageActionsWhenOnAnonUserPage() {
|
||||
$userPageHelper = $this->getMockBuilder( SkinUserPageHelper::class )
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$skin = $this->getSkin( Title::newFromText( 'User:1.1.1.1' ) );
|
||||
$this->setService( 'Minerva.SkinUserPageHelper', $userPageHelper );
|
||||
|
||||
$this->assertTrue( $skin->isAllowedPageAction( 'talk' ) );
|
||||
|
|
|
@ -35,6 +35,42 @@ class SkinUserPageHelperTest extends MediaWikiTestCase {
|
|||
$this->assertEquals( false, $helper->isUserPage() );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::isUserPage
|
||||
* @covers ::fetchData
|
||||
* @covers ::buildPageUserObject
|
||||
*/
|
||||
public function testTitleisAnIP() {
|
||||
$title = Title::newFromText( 'User:127.0.0.1' );
|
||||
|
||||
$helper = new SkinUserPageHelper( $title );
|
||||
$this->assertEquals( true, $helper->isUserPage() );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::isUserPage
|
||||
* @covers ::fetchData
|
||||
* @covers ::buildPageUserObject
|
||||
*/
|
||||
public function testTitleIsIPRange() {
|
||||
$title = Title::newFromText( 'User:127.0.0.1/24' );
|
||||
|
||||
$helper = new SkinUserPageHelper( $title );
|
||||
$this->assertEquals( false, $helper->isUserPage() );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::isUserPage
|
||||
* @covers ::fetchData
|
||||
* @covers ::buildPageUserObject
|
||||
*/
|
||||
public function testTitleIsFakeUserPage() {
|
||||
$title = Title::newFromText( 'User:Fake user' );
|
||||
|
||||
$helper = new SkinUserPageHelper( $title );
|
||||
$this->assertEquals( false, $helper->isUserPage() );
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::fetchData
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue