This will allow us to treat $wgHooks as a normal config variable in 1.41. Note: should be backported to 1.40 Bug: T331602 Change-Id: Iddcb760cf8961316d6527e81b9aa968657d8354c
94 lines
2.1 KiB
PHP
94 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\HookContainer;
|
|
|
|
use InvalidArgumentException;
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
class FauxGlobalHookArray implements \ArrayAccess {
|
|
|
|
private HookContainer $hookContainer;
|
|
|
|
/**
|
|
* The original handler array.
|
|
* @var array
|
|
*/
|
|
private array $originalArray;
|
|
|
|
/**
|
|
* @param HookContainer $hookContainer
|
|
* @param array $originalArray
|
|
*/
|
|
public function __construct( HookContainer $hookContainer, array $originalArray = [] ) {
|
|
$this->hookContainer = $hookContainer;
|
|
$this->originalArray = $originalArray;
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
#[\ReturnTypeWillChange]
|
|
public function offsetExists( $key ) {
|
|
wfDeprecatedMsg(
|
|
'Accessing $wgHooks directly is deprecated, use HookContainer::isRegistered() instead.',
|
|
'1.40'
|
|
);
|
|
return $this->hookContainer->isRegistered( $key );
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
#[\ReturnTypeWillChange]
|
|
public function offsetGet( $key ) {
|
|
wfDeprecatedMsg(
|
|
'Accessing $wgHooks directly is deprecated, use HookContainer::getHandlers() ' .
|
|
'or HookContainer::register() instead.',
|
|
'1.40'
|
|
);
|
|
|
|
return new FauxHookHandlerArray( $this->hookContainer, $key );
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
#[\ReturnTypeWillChange]
|
|
public function offsetSet( $key, $value ) {
|
|
if ( !is_string( $key ) ) {
|
|
throw new InvalidArgumentException( '$key must be a string' );
|
|
}
|
|
if ( !is_array( $value ) ) {
|
|
throw new InvalidArgumentException( '$value must be an array' );
|
|
}
|
|
|
|
wfDeprecatedMsg(
|
|
'Manipulating $wgHooks is deprecated, use HookContainer::clear() and ' .
|
|
'HookContainer::register() instead.',
|
|
'1.40'
|
|
);
|
|
|
|
$this->hookContainer->clear( $key );
|
|
|
|
foreach ( $value as $handler ) {
|
|
$this->hookContainer->register( $key, $handler );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
#[\ReturnTypeWillChange]
|
|
public function offsetUnset( $key ) {
|
|
wfDeprecatedMsg( 'Manipulating $wgHooks is deprecated, use HookContainer::clear() instead.', '1.40' );
|
|
if ( $this->hookContainer->isRegistered( $key ) ) {
|
|
$this->hookContainer->clear( $key );
|
|
}
|
|
}
|
|
|
|
public function getOriginalArray(): array {
|
|
return $this->originalArray;
|
|
}
|
|
}
|