mirror of
https://gerrit.wikimedia.org/r/mediawiki/skins/MinervaNeue
synced 2024-09-23 10:19:05 +00:00
SkinUserPageHelper: Remove global state from constructor
* Move global state parameters to new methods setContext and setTitle. This change solves the circular dependency error for service 'SkinUserPageHelper'. The service will used in SkinOptions in the follow-up change I014e61c6692adbbe449f1e6aa9c6ae73dbcff925. Change-Id: I80342e5168435c5318c378e2ac8a9a3c7a28eb4c
This commit is contained in:
parent
220bf6ff89
commit
1c26798431
|
@ -94,18 +94,14 @@ return [
|
|||
$title = SpecialPage::getTitleFor( 'Badtitle' );
|
||||
}
|
||||
$user = $context->getUser();
|
||||
$userPageHelper = $services->getService( 'Minerva.SkinUserPageHelper' );
|
||||
$userPageHelper = $services->getService( 'Minerva.SkinUserPageHelper' )
|
||||
->setContext( $context )
|
||||
->setTitle( $title->inNamespace( NS_USER_TALK ) ?
|
||||
$context->getSkin()->getRelevantTitle()->getSubjectPage() :
|
||||
$title
|
||||
);
|
||||
$languagesHelper = $services->getService( 'Minerva.LanguagesHelper' );
|
||||
|
||||
$relevantUserPageHelper = $title->inNamespace( NS_USER_TALK ) ?
|
||||
new SkinUserPageHelper(
|
||||
$services->getUserNameUtils(),
|
||||
$services->getUserFactory(),
|
||||
$context->getSkin()->getRelevantTitle()->getSubjectPage(),
|
||||
$context
|
||||
) :
|
||||
$userPageHelper;
|
||||
|
||||
$permissions = $services->getService( 'Minerva.Permissions' )
|
||||
->setContext( $context );
|
||||
|
||||
|
@ -117,14 +113,14 @@ return [
|
|||
$context,
|
||||
$permissions,
|
||||
$skinOptions,
|
||||
$relevantUserPageHelper,
|
||||
$userPageHelper,
|
||||
$languagesHelper,
|
||||
new ServiceOptions( PageActionsMenu\ToolbarBuilder::CONSTRUCTOR_OPTIONS,
|
||||
$services->getMainConfig() ),
|
||||
$watchlistManager
|
||||
);
|
||||
if ( $skinOptions->get( SkinOptions::TOOLBAR_SUBMENU ) ) {
|
||||
$overflowBuilder = $relevantUserPageHelper->isUserPage() ?
|
||||
$overflowBuilder = $userPageHelper->isUserPage() ?
|
||||
new PageActionsMenu\UserNamespaceOverflowBuilder(
|
||||
$title,
|
||||
$context,
|
||||
|
@ -149,9 +145,7 @@ return [
|
|||
'Minerva.SkinUserPageHelper' => static function ( MediaWikiServices $services ): SkinUserPageHelper {
|
||||
return new SkinUserPageHelper(
|
||||
$services->getUserNameUtils(),
|
||||
$services->getUserFactory(),
|
||||
RequestContext::getMain()->getSkin()->getRelevantTitle(),
|
||||
RequestContext::getMain()
|
||||
$services->getUserFactory()
|
||||
);
|
||||
},
|
||||
'Minerva.LanguagesHelper' => static function ( MediaWikiServices $services ): LanguagesHelper {
|
||||
|
|
|
@ -170,12 +170,14 @@ final class SkinOptions {
|
|||
// For some reason using $services->getService( 'SkinUserPageHelper' )
|
||||
// here results in a circular dependency error which is why
|
||||
// SkinUserPageHelper is being instantiated instead.
|
||||
$relevantUserPageHelper = new SkinUserPageHelper(
|
||||
$relevantUserPageHelper = ( new SkinUserPageHelper(
|
||||
$this->userNameUtils,
|
||||
$this->userFactory,
|
||||
$title->inNamespace( NS_USER_TALK ) ? $title->getSubjectPage() : $title,
|
||||
$mobileContext
|
||||
);
|
||||
$this->userFactory
|
||||
) )
|
||||
->setContext( $mobileContext )
|
||||
->setTitle(
|
||||
$title->inNamespace( NS_USER_TALK ) ? $title->getSubjectPage() : $title
|
||||
);
|
||||
|
||||
$isUserPage = $relevantUserPageHelper->isUserPage();
|
||||
$isUserPageAccessible = $relevantUserPageHelper->isUserPageAccessibleToCurrentUser();
|
||||
|
|
|
@ -701,7 +701,9 @@ class SkinMinerva extends SkinMustache {
|
|||
* @return SkinUserPageHelper
|
||||
*/
|
||||
public function getUserPageHelper() {
|
||||
return MediaWikiServices::getInstance()->getService( 'Minerva.SkinUserPageHelper' );
|
||||
return MediaWikiServices::getInstance()->getService( 'Minerva.SkinUserPageHelper' )
|
||||
->setContext( $this->getContext() )
|
||||
->setTitle( $this->getTitle() );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -30,17 +30,22 @@ class SkinUserPageHelper {
|
|||
/**
|
||||
* @var UserNameUtils
|
||||
*/
|
||||
private $userNameUtils;
|
||||
private UserNameUtils $userNameUtils;
|
||||
|
||||
/**
|
||||
* @var UserFactory
|
||||
*/
|
||||
private $userFactory;
|
||||
private UserFactory $userFactory;
|
||||
|
||||
/**
|
||||
* @var IContextSource
|
||||
*/
|
||||
private IContextSource $context;
|
||||
|
||||
/**
|
||||
* @var Title|null
|
||||
*/
|
||||
private $title;
|
||||
private ?Title $title;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
|
@ -52,27 +57,34 @@ class SkinUserPageHelper {
|
|||
*/
|
||||
private $pageUser;
|
||||
|
||||
/**
|
||||
* @var IContextSource|null
|
||||
*/
|
||||
private $context;
|
||||
|
||||
/**
|
||||
* @param UserNameUtils $userNameUtils
|
||||
* @param UserFactory $userFactory
|
||||
* @param Title|null $title
|
||||
* @param IContextSource|null $context
|
||||
*/
|
||||
public function __construct(
|
||||
UserNameUtils $userNameUtils,
|
||||
UserFactory $userFactory,
|
||||
Title $title = null,
|
||||
IContextSource $context = null
|
||||
UserFactory $userFactory
|
||||
) {
|
||||
$this->userNameUtils = $userNameUtils;
|
||||
$this->userFactory = $userFactory;
|
||||
$this->title = $title;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param IContextSource $context
|
||||
* @return $this
|
||||
*/
|
||||
public function setContext( IContextSource $context ) {
|
||||
$this->context = $context;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Title|null $title
|
||||
* @return $this
|
||||
*/
|
||||
public function setTitle( ?Title $title ) {
|
||||
$this->title = $title;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -24,9 +24,9 @@ class SkinUserPageHelperTest extends MediaWikiIntegrationTestCase {
|
|||
|
||||
$helper = new SkinUserPageHelper(
|
||||
$this->getServiceContainer()->getUserNameUtils(),
|
||||
$this->getServiceContainer()->getUserFactory(),
|
||||
$title
|
||||
$this->getServiceContainer()->getUserFactory()
|
||||
);
|
||||
$helper->setTitle( $title );
|
||||
$this->assertFalse( $helper->isUserPage() );
|
||||
}
|
||||
|
||||
|
@ -40,9 +40,9 @@ class SkinUserPageHelperTest extends MediaWikiIntegrationTestCase {
|
|||
|
||||
$helper = new SkinUserPageHelper(
|
||||
$this->getServiceContainer()->getUserNameUtils(),
|
||||
$this->getServiceContainer()->getUserFactory(),
|
||||
$title
|
||||
$this->getServiceContainer()->getUserFactory()
|
||||
);
|
||||
$helper->setTitle( $title );
|
||||
$this->assertNull( $helper->getPageUser() );
|
||||
$this->assertFalse( $helper->isUserPage() );
|
||||
}
|
||||
|
@ -56,9 +56,9 @@ class SkinUserPageHelperTest extends MediaWikiIntegrationTestCase {
|
|||
|
||||
$helper = new SkinUserPageHelper(
|
||||
$this->getServiceContainer()->getUserNameUtils(),
|
||||
$this->getServiceContainer()->getUserFactory(),
|
||||
$title
|
||||
$this->getServiceContainer()->getUserFactory()
|
||||
);
|
||||
$helper->setTitle( $title );
|
||||
$this->assertFalse( $helper->isUserPage() );
|
||||
}
|
||||
|
||||
|
@ -72,9 +72,9 @@ class SkinUserPageHelperTest extends MediaWikiIntegrationTestCase {
|
|||
|
||||
$helper = new SkinUserPageHelper(
|
||||
$this->getServiceContainer()->getUserNameUtils(),
|
||||
$this->getServiceContainer()->getUserFactory(),
|
||||
$title
|
||||
$this->getServiceContainer()->getUserFactory()
|
||||
);
|
||||
$helper->setTitle( $title );
|
||||
$this->assertTrue( $helper->isUserPage() );
|
||||
}
|
||||
|
||||
|
@ -88,9 +88,9 @@ class SkinUserPageHelperTest extends MediaWikiIntegrationTestCase {
|
|||
|
||||
$helper = new SkinUserPageHelper(
|
||||
$this->getServiceContainer()->getUserNameUtils(),
|
||||
$this->getServiceContainer()->getUserFactory(),
|
||||
$title
|
||||
$this->getServiceContainer()->getUserFactory()
|
||||
);
|
||||
$helper->setTitle( $title );
|
||||
$this->assertFalse( $helper->isUserPage() );
|
||||
}
|
||||
|
||||
|
@ -113,9 +113,9 @@ class SkinUserPageHelperTest extends MediaWikiIntegrationTestCase {
|
|||
|
||||
$helper = new SkinUserPageHelper(
|
||||
$this->getServiceContainer()->getUserNameUtils(),
|
||||
$userFactory,
|
||||
$title
|
||||
$userFactory
|
||||
);
|
||||
$helper->setTitle( $title );
|
||||
$this->assertFalse( $helper->isUserPage() );
|
||||
}
|
||||
|
||||
|
@ -151,9 +151,9 @@ class SkinUserPageHelperTest extends MediaWikiIntegrationTestCase {
|
|||
|
||||
$helper = new SkinUserPageHelper(
|
||||
$this->getServiceContainer()->getUserNameUtils(),
|
||||
$userFactory,
|
||||
$titleMock
|
||||
$userFactory
|
||||
);
|
||||
$helper->setTitle( $titleMock );
|
||||
$helper->isUserPage();
|
||||
$helper->isUserPage();
|
||||
$helper->getPageUser();
|
||||
|
@ -178,9 +178,9 @@ class SkinUserPageHelperTest extends MediaWikiIntegrationTestCase {
|
|||
->willReturn( $user );
|
||||
$helper = new SkinUserPageHelper(
|
||||
$this->getServiceContainer()->getUserNameUtils(),
|
||||
$userFactory,
|
||||
$title
|
||||
$userFactory
|
||||
);
|
||||
$helper->setTitle( $title );
|
||||
$this->assertTrue( $helper->isUserPage() );
|
||||
$this->assertEquals( $user->getId(), $helper->getPageUser()->getId() );
|
||||
}
|
||||
|
@ -209,9 +209,9 @@ class SkinUserPageHelperTest extends MediaWikiIntegrationTestCase {
|
|||
->willReturn( $secondUser );
|
||||
$helper = new SkinUserPageHelper(
|
||||
$this->getServiceContainer()->getUserNameUtils(),
|
||||
$userFactory,
|
||||
$secondUserTitle
|
||||
$userFactory
|
||||
);
|
||||
$helper->setTitle( $secondUserTitle );
|
||||
$this->assertTrue( $helper->isUserPage() );
|
||||
$this->assertNotEquals( $user->getId(), $helper->getPageUser()->getId() );
|
||||
$this->assertNotEquals( $helper->getPageUser()->getUserPage(), $userTitle );
|
||||
|
|
Loading…
Reference in a new issue