From: Stanislav Malyshev Date: Tue, 31 Jan 2017 05:31:30 +0000 (-0800) Subject: Add GetContentModels hook to allow extensions to enumerate dynamic content models. X-Git-Tag: 1.31.0-rc.0~4127^2 X-Git-Url: https://git.cyclocoop.org/%242?a=commitdiff_plain;h=fb44ca909450e5bfe8de388ad0bd532bbb78096b;p=lhc%2Fweb%2Fwiklou.git Add GetContentModels hook to allow extensions to enumerate dynamic content models. Bug: T155139 Change-Id: Icb41c470dfa4638676eb3ba0e74f437e85acc792 --- diff --git a/docs/hooks.txt b/docs/hooks.txt index 1459b892c1..846a073b62 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -1092,6 +1092,8 @@ $title: the Title in question 'ContentHandlerForModelID': Called when a ContentHandler is requested for a given content model name, but no entry for that model exists in $wgContentHandlers. +Note: if your extension implements additional models via this hook, please +use GetContentModels hook to make them known to core. $modeName: the requested content model name &$handler: set this to a ContentHandler object, if desired. @@ -1562,6 +1564,9 @@ notifications. &$url: string value as output (out parameter, can modify) $query: query options passed to Title::getCanonicalURL() +'GetContentModels': Add content models to the list of available models. +&$models: array containing current model list, as strings. Extensions should add to this list. + 'GetDefaultSortkey': Override the default sortkey for a page. $title: Title object that we need to get a sortkey for &$sortkey: Sortkey to use. diff --git a/includes/content/ContentHandler.php b/includes/content/ContentHandler.php index 119144a550..58665bb2b8 100644 --- a/includes/content/ContentHandler.php +++ b/includes/content/ContentHandler.php @@ -361,7 +361,9 @@ abstract class ContentHandler { public static function getContentModels() { global $wgContentHandlers; - return array_keys( $wgContentHandlers ); + $models = array_keys( $wgContentHandlers ); + Hooks::run( 'GetContentModels', [ &$models ] ); + return $models; } public static function getAllContentFormats() { diff --git a/tests/phpunit/includes/content/ContentHandlerTest.php b/tests/phpunit/includes/content/ContentHandlerTest.php index efd60e5fb8..ae662532d8 100644 --- a/tests/phpunit/includes/content/ContentHandlerTest.php +++ b/tests/phpunit/includes/content/ContentHandlerTest.php @@ -461,4 +461,13 @@ class ContentHandlerTest extends MediaWikiTestCase { $this->assertContains( 'one who smiths', $out->getRawText() ); } + /** + * @covers ContentHandler::getContentModels + */ + public function testGetContentModelsHook() { + $this->setTemporaryHook( 'GetContentModels', function ( &$models ) { + $models[] = 'Ferrari'; + } ); + $this->assertContains( 'Ferrari', ContentHandler::getContentModels() ); + } }