Page MenuHomePhabricator

Deprecate support for old hook handler formats in 1.41 and discontinue in 1.42
Closed, ResolvedPublic

Description

Hook handlers can be registered in a variety of formats, some of which stem from a time when PHP had no support for closures. Supporting all the different forms is confusing and leads to brittle code.

In the future, acceptable forms for hook handlers should be reduced to:

  • a callable (in the form of a string, an array, or a closure)
  • an object, which is expected to have a public "on" method that matches the hook name.
  • an array containing an object spec in the "handler" key, for use with ExtensionRegistry.

The following forms should be disallowed:

  • False values (used as dummies in testing). Use HookContainer::NOOP instead.
  • Using a qualified method name in a two-element callable array, e.g. [ 'MyClass', 'MyClass::onSomeHook' ].
  • Callable arrays with extra data, e.g. [ 'MyClass', 'MyClass::onSomeHook', 1, 2, 3 ].
  • Objects wrapped in an array, e.g. [ $handlerObject ] instead of just $handlerObject.
  • Callables nexted in arrays, e.g. [ [ 'MyClass', 'MyClass::onSomeHook' ] ].

Event Timeline

Change 930242 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):

[mediawiki/skins/Vector@master] Clean up hook handler registration

https://gerrit.wikimedia.org/r/930242

Change 930243 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):

[mediawiki/extensions/BetaFeatures@master] Clean up hook handler registration

https://gerrit.wikimedia.org/r/930243

Change 930246 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):

[mediawiki/extensions/Translate@master] Clean up hook handler registration

https://gerrit.wikimedia.org/r/930246

Change 903760 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):

[mediawiki/core@master] HookContainer: deprecate old hook handler formats

https://gerrit.wikimedia.org/r/903760

Reedy updated the task description. (Show Details)

Change 930246 merged by jenkins-bot:

[mediawiki/extensions/Translate@master] Clean up hook handler registration

https://gerrit.wikimedia.org/r/930246

Change 930518 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):

[mediawiki/extensions/Translate@master] Clean up hook handler registration (II)

https://gerrit.wikimedia.org/r/930518

Change 930568 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):

[mediawiki/extensions/Wikibase@master] Clean up hook handler registration

https://gerrit.wikimedia.org/r/930568

Change 930568 merged by jenkins-bot:

[mediawiki/extensions/Wikibase@master] Clean up hook handler registration

https://gerrit.wikimedia.org/r/930568

Change 930243 merged by jenkins-bot:

[mediawiki/extensions/BetaFeatures@master] Clean up hook handler registration

https://gerrit.wikimedia.org/r/930243

Change 930242 merged by jenkins-bot:

[mediawiki/skins/Vector@master] Clean up hook handler registration

https://gerrit.wikimedia.org/r/930242

Change 930518 merged by jenkins-bot:

[mediawiki/extensions/Translate@master] Clean up hook handler registration (II)

https://gerrit.wikimedia.org/r/930518

Jdforrester-WMF renamed this task from Discontinue support for old hook handler formats to Deprecate support for old hook handler formats in 1.41 and discontinue in 1.42.Jun 22 2023, 8:48 PM
Jdforrester-WMF moved this task from Blocker to Not a blocker on the MW-1.41-release board.

Change 903760 merged by jenkins-bot:

[mediawiki/core@master] HookContainer: deprecate old hook handler formats

https://gerrit.wikimedia.org/r/903760

daniel claimed this task.