diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php new file mode 100644 index 0000000..8253fcb --- /dev/null +++ b/includes/ServiceWiring.php @@ -0,0 +1,13 @@ + function ( MediaWikiServices $services ) { + return ContentHandler::getForTitle( RequestContext::getMain()->getTitle() ); + }, + 'Minerva.SkinUserPageHelper' => function ( MediaWikiServices $services ) { + return new SkinUserPageHelper( RequestContext::getMain()->getTitle() ); + } +]; diff --git a/includes/skins/SkinMinerva.php b/includes/skins/SkinMinerva.php index 268cbc5..9259d6d 100644 --- a/includes/skins/SkinMinerva.php +++ b/includes/skins/SkinMinerva.php @@ -20,7 +20,6 @@ use MediaWiki\Minerva\MenuBuilder; use MediaWiki\MediaWikiServices; -use MediaWiki\Minerva\SkinUserPageHelper; /** * Minerva: Born from the godhead of Jupiter with weapons! @@ -48,12 +47,9 @@ class SkinMinerva extends SkinTemplate { public $skinname = 'minerva'; /** @var string $template Name of this used template */ public $template = 'MinervaTemplate'; - /** @var ContentHandler Content handler of page; only access through getContentHandler */ - protected $contentHandler = null; + /** @var bool Whether the page is also available in other languages or variants */ protected $doesPageHaveLanguages = false; - /** @var SkinUserPageHelper Helper class for UserPage handling */ - protected $userPageHelper; /** * Returns the site name for the footer, either as a text or tag @@ -310,19 +306,6 @@ class SkinMinerva extends SkinTemplate { return ''; } - /** - * Gets content handler of current title - * - * @return ContentHandler - */ - protected function getContentHandler() { - if ( $this->contentHandler === null ) { - $this->contentHandler = ContentHandler::getForTitle( $this->getTitle() ); - } - - return $this->contentHandler; - } - /** * Takes a title and returns classes to apply to the body tag * @param Title $title @@ -378,10 +361,7 @@ class SkinMinerva extends SkinTemplate { * @return SkinUserPageHelper */ public function getUserPageHelper() { - if ( $this->userPageHelper === null ) { - $this->userPageHelper = new SkinUserPageHelper( $this->getContext()->getTitle() ); - } - return $this->userPageHelper; + return MediaWikiServices::getInstance()->getService( 'Minerva.SkinUserPageHelper' ); } /** @@ -1296,7 +1276,8 @@ class SkinMinerva extends SkinTemplate { * @return bool */ protected function isCurrentPageContentModelEditable() { - $contentHandler = $this->getContentHandler(); + $contentHandler = MediaWikiServices::getInstance() + ->getService( 'Minerva.ContentHandler' ); return $contentHandler->supportsDirectEditing() && $contentHandler->supportsDirectApiEditing(); diff --git a/skin.json b/skin.json index 38a0c2f..b9a9810 100644 --- a/skin.json +++ b/skin.json @@ -548,5 +548,8 @@ ] } }, + "ServiceWiringFiles": [ + "includes/ServiceWiring.php" + ], "manifest_version": 1 } diff --git a/tests/phpunit/skins/SkinMinervaPageActionsTest.php b/tests/phpunit/skins/SkinMinervaPageActionsTest.php index 6dcca37..41f175c 100644 --- a/tests/phpunit/skins/SkinMinervaPageActionsTest.php +++ b/tests/phpunit/skins/SkinMinervaPageActionsTest.php @@ -6,28 +6,21 @@ use SkinMinerva; use MediaWikiTestCase; use Title; use RequestContext; -use ContentHandler; use MediaWiki\Minerva\SkinUserPageHelper; // FIXME: That this class exists is an indicator that at least SkinMinerva#isAllowedPageAction // should be extracted from SkinMinerva. // phpcs:ignore MediaWiki.Files.ClassMatchesFilename.NotMatch class TestSkinMinerva extends SkinMinerva { + public function isAllowedPageAction( $action ) { return parent::isAllowedPageAction( $action ); } - public function setContentHandler( ContentHandler $contentHandler ) { - $this->contentHandler = $contentHandler; - } - public function setDoesPageHaveLanguages( $doesPageHaveLanguages ) { $this->doesPageHaveLanguages = $doesPageHaveLanguages; } - public function overWriteUserPageHelper( $helper ) { - $this->userPageHelper = $helper; - } } /** @@ -51,7 +44,7 @@ class SkinMinervaPageActionsTest extends MediaWikiTestCase { * @return TestSkinMinerva */ private function getSkin( Title $title ) { - $requestContext = new RequestContext(); + $requestContext = RequestContext::getMain(); $requestContext->setTitle( $title ); $result = new TestSkinMinerva(); @@ -122,7 +115,7 @@ class SkinMinervaPageActionsTest extends MediaWikiTestCase { $contentHandler->method( 'supportsDirectApiEditing' ) ->will( $this->returnValue( $supportsDirectApiEditing ) ); - $this->skin->setContentHandler( $contentHandler ); + $this->setService( 'Minerva.ContentHandler', $contentHandler ); $this->assertEquals( $expected, $this->skin->isAllowedPageAction( 'edit' ) ); } @@ -140,7 +133,8 @@ class SkinMinervaPageActionsTest extends MediaWikiTestCase { ->willReturn( true ); $skin = $this->getSkin( Title::newFromText( 'User:Admin' ) ); - $skin->overWriteUserPageHelper( $userPageHelper ); + + $this->setService( 'Minerva.SkinUserPageHelper', $userPageHelper ); $this->assertFalse( $skin->isAllowedPageAction( 'talk' ) ); } @@ -158,7 +152,7 @@ class SkinMinervaPageActionsTest extends MediaWikiTestCase { ->willReturn( false ); $skin = $this->getSkin( Title::newFromText( 'User:Admin' ) ); - $skin->overWriteUserPageHelper( $userPageHelper ); + $this->setService( 'Minerva.SkinUserPageHelper', $userPageHelper ); $this->assertTrue( $skin->isAllowedPageAction( 'talk' ) ); }