Merge "Use MediaWikiServices to cache commonly used helpers"

This commit is contained in:
jenkins-bot 2019-04-15 19:19:45 +00:00 committed by Gerrit Code Review
commit 13153394a3
4 changed files with 26 additions and 35 deletions

View File

@ -0,0 +1,13 @@
<?php
use MediaWiki\MediaWikiServices;
use MediaWiki\Minerva\SkinUserPageHelper;
return [
'Minerva.ContentHandler' => function ( MediaWikiServices $services ) {
return ContentHandler::getForTitle( RequestContext::getMain()->getTitle() );
},
'Minerva.SkinUserPageHelper' => function ( MediaWikiServices $services ) {
return new SkinUserPageHelper( RequestContext::getMain()->getTitle() );
}
];

View File

@ -20,7 +20,6 @@
use MediaWiki\Minerva\MenuBuilder; use MediaWiki\Minerva\MenuBuilder;
use MediaWiki\MediaWikiServices; use MediaWiki\MediaWikiServices;
use MediaWiki\Minerva\SkinUserPageHelper;
/** /**
* Minerva: Born from the godhead of Jupiter with weapons! * Minerva: Born from the godhead of Jupiter with weapons!
@ -48,12 +47,9 @@ class SkinMinerva extends SkinTemplate {
public $skinname = 'minerva'; public $skinname = 'minerva';
/** @var string $template Name of this used template */ /** @var string $template Name of this used template */
public $template = 'MinervaTemplate'; 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 */ /** @var bool Whether the page is also available in other languages or variants */
protected $doesPageHaveLanguages = false; protected $doesPageHaveLanguages = false;
/** @var SkinUserPageHelper Helper class for UserPage handling */
protected $userPageHelper;
/** /**
* Returns the site name for the footer, either as a text or <img> tag * Returns the site name for the footer, either as a text or <img> tag
@ -310,19 +306,6 @@ class SkinMinerva extends SkinTemplate {
return ''; 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 * Takes a title and returns classes to apply to the body tag
* @param Title $title * @param Title $title
@ -378,10 +361,7 @@ class SkinMinerva extends SkinTemplate {
* @return SkinUserPageHelper * @return SkinUserPageHelper
*/ */
public function getUserPageHelper() { public function getUserPageHelper() {
if ( $this->userPageHelper === null ) { return MediaWikiServices::getInstance()->getService( 'Minerva.SkinUserPageHelper' );
$this->userPageHelper = new SkinUserPageHelper( $this->getContext()->getTitle() );
}
return $this->userPageHelper;
} }
/** /**
@ -1296,7 +1276,8 @@ class SkinMinerva extends SkinTemplate {
* @return bool * @return bool
*/ */
protected function isCurrentPageContentModelEditable() { protected function isCurrentPageContentModelEditable() {
$contentHandler = $this->getContentHandler(); $contentHandler = MediaWikiServices::getInstance()
->getService( 'Minerva.ContentHandler' );
return $contentHandler->supportsDirectEditing() return $contentHandler->supportsDirectEditing()
&& $contentHandler->supportsDirectApiEditing(); && $contentHandler->supportsDirectApiEditing();

View File

@ -548,5 +548,8 @@
] ]
} }
}, },
"ServiceWiringFiles": [
"includes/ServiceWiring.php"
],
"manifest_version": 1 "manifest_version": 1
} }

View File

@ -6,28 +6,21 @@ use SkinMinerva;
use MediaWikiTestCase; use MediaWikiTestCase;
use Title; use Title;
use RequestContext; use RequestContext;
use ContentHandler;
use MediaWiki\Minerva\SkinUserPageHelper; use MediaWiki\Minerva\SkinUserPageHelper;
// FIXME: That this class exists is an indicator that at least SkinMinerva#isAllowedPageAction // FIXME: That this class exists is an indicator that at least SkinMinerva#isAllowedPageAction
// should be extracted from SkinMinerva. // should be extracted from SkinMinerva.
// phpcs:ignore MediaWiki.Files.ClassMatchesFilename.NotMatch // phpcs:ignore MediaWiki.Files.ClassMatchesFilename.NotMatch
class TestSkinMinerva extends SkinMinerva { class TestSkinMinerva extends SkinMinerva {
public function isAllowedPageAction( $action ) { public function isAllowedPageAction( $action ) {
return parent::isAllowedPageAction( $action ); return parent::isAllowedPageAction( $action );
} }
public function setContentHandler( ContentHandler $contentHandler ) {
$this->contentHandler = $contentHandler;
}
public function setDoesPageHaveLanguages( $doesPageHaveLanguages ) { public function setDoesPageHaveLanguages( $doesPageHaveLanguages ) {
$this->doesPageHaveLanguages = $doesPageHaveLanguages; $this->doesPageHaveLanguages = $doesPageHaveLanguages;
} }
public function overWriteUserPageHelper( $helper ) {
$this->userPageHelper = $helper;
}
} }
/** /**
@ -51,7 +44,7 @@ class SkinMinervaPageActionsTest extends MediaWikiTestCase {
* @return TestSkinMinerva * @return TestSkinMinerva
*/ */
private function getSkin( Title $title ) { private function getSkin( Title $title ) {
$requestContext = new RequestContext(); $requestContext = RequestContext::getMain();
$requestContext->setTitle( $title ); $requestContext->setTitle( $title );
$result = new TestSkinMinerva(); $result = new TestSkinMinerva();
@ -122,7 +115,7 @@ class SkinMinervaPageActionsTest extends MediaWikiTestCase {
$contentHandler->method( 'supportsDirectApiEditing' ) $contentHandler->method( 'supportsDirectApiEditing' )
->will( $this->returnValue( $supportsDirectApiEditing ) ); ->will( $this->returnValue( $supportsDirectApiEditing ) );
$this->skin->setContentHandler( $contentHandler ); $this->setService( 'Minerva.ContentHandler', $contentHandler );
$this->assertEquals( $expected, $this->skin->isAllowedPageAction( 'edit' ) ); $this->assertEquals( $expected, $this->skin->isAllowedPageAction( 'edit' ) );
} }
@ -140,7 +133,8 @@ class SkinMinervaPageActionsTest extends MediaWikiTestCase {
->willReturn( true ); ->willReturn( true );
$skin = $this->getSkin( Title::newFromText( 'User:Admin' ) ); $skin = $this->getSkin( Title::newFromText( 'User:Admin' ) );
$skin->overWriteUserPageHelper( $userPageHelper );
$this->setService( 'Minerva.SkinUserPageHelper', $userPageHelper );
$this->assertFalse( $skin->isAllowedPageAction( 'talk' ) ); $this->assertFalse( $skin->isAllowedPageAction( 'talk' ) );
} }
@ -158,7 +152,7 @@ class SkinMinervaPageActionsTest extends MediaWikiTestCase {
->willReturn( false ); ->willReturn( false );
$skin = $this->getSkin( Title::newFromText( 'User:Admin' ) ); $skin = $this->getSkin( Title::newFromText( 'User:Admin' ) );
$skin->overWriteUserPageHelper( $userPageHelper ); $this->setService( 'Minerva.SkinUserPageHelper', $userPageHelper );
$this->assertTrue( $skin->isAllowedPageAction( 'talk' ) ); $this->assertTrue( $skin->isAllowedPageAction( 'talk' ) );
} }