mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/CodeEditor
synced 2024-11-23 14:56:43 +00:00
Create HookRunner class and the hook handler interface
Bug: T271013 Change-Id: Ie8e152530599d11da12cb9272a3b757da1cca1ab
This commit is contained in:
parent
024d0332f3
commit
4d6a470aae
|
@ -5,6 +5,7 @@ namespace MediaWiki\Extension\CodeEditor;
|
|||
use ErrorPageError;
|
||||
use ExtensionRegistry;
|
||||
use MediaWiki\EditPage\EditPage;
|
||||
use MediaWiki\Extension\CodeEditor\Hooks\HookRunner;
|
||||
use MediaWiki\Hook\EditPage__showEditForm_initialHook;
|
||||
use MediaWiki\Hook\EditPage__showReadOnlyForm_initialHook;
|
||||
use MediaWiki\HookContainer\HookContainer;
|
||||
|
@ -25,8 +26,8 @@ class Hooks implements
|
|||
/** @var UserOptionsLookup */
|
||||
private $userOptionsLookup;
|
||||
|
||||
/** @var HookContainer */
|
||||
private $hookContainer;
|
||||
/** @var HookRunner */
|
||||
private $hookRunner;
|
||||
|
||||
/**
|
||||
* @param UserOptionsLookup $userOptionsLookup
|
||||
|
@ -37,7 +38,7 @@ class Hooks implements
|
|||
HookContainer $hookContainer
|
||||
) {
|
||||
$this->userOptionsLookup = $userOptionsLookup;
|
||||
$this->hookContainer = $hookContainer;
|
||||
$this->hookRunner = new HookRunner( $hookContainer );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -56,9 +57,8 @@ class Hooks implements
|
|||
}
|
||||
|
||||
// Give extensions a chance
|
||||
// Note: $model and $format were added around the time of MediaWiki 1.28.
|
||||
$lang = null;
|
||||
$this->hookContainer->run( 'CodeEditorGetPageLanguage', [ $title, &$lang, $model, $format ] );
|
||||
$this->hookRunner->onCodeEditorGetPageLanguage( $title, $lang, $model, $format );
|
||||
|
||||
return $lang;
|
||||
}
|
||||
|
|
25
includes/Hooks/CodeEditorGetPageLanguageHook.php
Normal file
25
includes/Hooks/CodeEditorGetPageLanguageHook.php
Normal file
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace MediaWiki\Extension\CodeEditor\Hooks;
|
||||
|
||||
use MediaWiki\Title\Title;
|
||||
|
||||
/**
|
||||
* This is a hook handler interface, see docs/Hooks.md in core.
|
||||
* Use the hook name "CodeEditorGetPageLanguage" to register handlers implementing this interface.
|
||||
*
|
||||
* @stable to implement
|
||||
* @ingroup Hooks
|
||||
*/
|
||||
interface CodeEditorGetPageLanguageHook {
|
||||
/**
|
||||
* Allows to set a code language for extensions content models
|
||||
*
|
||||
* @param Title $title The title the language is for
|
||||
* @param string|null &$lang The language to use
|
||||
* @param string $model The content model of the title
|
||||
* @param string $format The content format of the title
|
||||
* @return bool|void True or no return value to continue or false to abort
|
||||
*/
|
||||
public function onCodeEditorGetPageLanguage( Title $title, ?string &$lang, string $model, string $format );
|
||||
}
|
30
includes/Hooks/HookRunner.php
Normal file
30
includes/Hooks/HookRunner.php
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
namespace MediaWiki\Extension\CodeEditor\Hooks;
|
||||
|
||||
use MediaWiki\HookContainer\HookContainer;
|
||||
use MediaWiki\Title\Title;
|
||||
|
||||
/**
|
||||
* This is a hook runner class, see docs/Hooks.md in core.
|
||||
* @internal
|
||||
*/
|
||||
class HookRunner implements
|
||||
CodeEditorGetPageLanguageHook
|
||||
{
|
||||
private HookContainer $hookContainer;
|
||||
|
||||
public function __construct( HookContainer $hookContainer ) {
|
||||
$this->hookContainer = $hookContainer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function onCodeEditorGetPageLanguage( Title $title, ?string &$lang, string $model, string $format ) {
|
||||
return $this->hookContainer->run(
|
||||
'CodeEditorGetPageLanguage',
|
||||
[ $title, &$lang, $model, $format ]
|
||||
);
|
||||
}
|
||||
}
|
16
tests/phpunit/unit/HookRunnerTest.php
Normal file
16
tests/phpunit/unit/HookRunnerTest.php
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
|
||||
namespace MediaWiki\Extension\CodeEditor\Tests\Unit;
|
||||
|
||||
use MediaWiki\Extension\CodeEditor\Hooks\HookRunner;
|
||||
use MediaWiki\Tests\HookContainer\HookRunnerTestBase;
|
||||
|
||||
/**
|
||||
* @covers \MediaWiki\Extension\CodeEditor\Hooks\HookRunner
|
||||
*/
|
||||
class HookRunnerTest extends HookRunnerTestBase {
|
||||
|
||||
public static function provideHookRunners() {
|
||||
yield HookRunner::class => [ HookRunner::class ];
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue