Use MediaWikiServices to cache commonly used helpers
SkinMinerva cached the ContentHandler object for better performance. In the future the ContentHandler will be also used in the Menu, for better readability, store ContentHandler as Service. MediaWikiServices will initialize service on first access and cache it for future needs. Same applies to SkinUserPageHelper, Bug: T216152 Change-Id: Ia98dc860862360a68556272714669f0c3a13eb1e
This commit is contained in:
parent
4a5c719031
commit
572ffdf25a
13
includes/ServiceWiring.php
Normal file
13
includes/ServiceWiring.php
Normal 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() );
|
||||
}
|
||||
];
|
@ -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();
|
||||
|
@ -548,5 +548,8 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"ServiceWiringFiles": [
|
||||
"includes/ServiceWiring.php"
|
||||
],
|
||||
"manifest_version": 1
|
||||
}
|
||||
|
@ -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' ) );
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user