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\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 <img> 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();

View File

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

View File

@ -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' ) );
}