In the past, $wgHooks could be manipulated to register and unregister hook handlers dynamically. This greatly complicate the logic in HookContainer. Code that needs to register hooks dynamically should use HookContainer::register or HookContainer::scopedRegister instead.
Description
Details
Status | Subtype | Assigned | Task | ||
---|---|---|---|---|---|
Open | daniel | T331602 Make $wgHooks a regular configuration variable | |||
Resolved | PRODUCTION ERROR | Lucas_Werkmeister_WMDE | T333926 PHP Deprecated: Accessing $wgHooks directly is deprecated, use HookContainer::getHandlers() or HookContainer::register() instead. [Called from {closure}] | ||
Resolved | PRODUCTION ERROR | Reedy | T334005 PHP Deprecated: Use of Hooks::register was deprecated in MediaWiki 1.35. [Called from LdapPrimaryAuthenticationProvider::__construct] |
Event Timeline
Change 850669 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):
[mediawiki/core@master] Make $wgHooks trigger deprecation warnings.
Change 849177 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):
[mediawiki/core@master] Treat $wgHooks as a regular setting
Change 849177 merged by jenkins-bot:
[mediawiki/core@master] Treat $wgHooks as a regular setting
Change 850669 merged by jenkins-bot:
[mediawiki/core@master] Make $wgHooks trigger deprecation warnings.
This has caused CI jobs to fail, in for example, https://gerrit.wikimedia.org/r/c/mediawiki/extensions/MathSearch/+/902490/ with:
2023-03-29 22:36:06 a6088546b491 wikidb: [8cf9bb9c28c17f5756087930]
PHP Deprecated: Accessing $wgHooks directly is deprecated, use HookContainer::getHandlers() or HookContainer::register() instead. [Called from MediaWiki\Extension\CentralAuth\CentralAuthHooks::onRunExtensionFunctions]
Change 904453 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):
[mediawiki/extensions/CentralAuth@master] Use HookContainer to register hooks
Looks like I missed a couple of places. I pushed a patch for CentralAuth. I'll make one for CentralNotice in a bit. Turns out CentralNotice doesn't need fixing.
Access to $wgHooks is still ok in settings files, in Maintenance::finalSetup, and in extension callbacks, because they all execute before MediaWikiServices is initialized. Extension functions are run after, this is why CentralAuth broke.
CodeSearch isn't showing anythign else that needs fixing: https://codesearch.wmcloud.org/deployed/?q=%5E%5Cs*%5C%24wgHooks%5Cb.*%5C%5B%5C%5D&files=&excludeFiles=%5Cbtests%2F%7C%5Cbconfig%5Cb%7CSettings%5C.&repos=
...and once again, we are bitten by the fact that CI is not running all extensions we have in production...
Change 904291 had a related patch set uploaded (by Daniel Kinzler; author: Daniel Kinzler):
[mediawiki/core@REL1_40] Make $wgHooks trigger deprecation warnings.
AFAICT, we do need the CentralAuth patch to be merged in order to unbreak PageTriage's CI.
Change 904453 merged by jenkins-bot:
[mediawiki/extensions/CentralAuth@master] Use HookContainer to register hooks
I had to revert the MediaWiki train (T330209) this morning because MobileFrontend relies on $wgHooks and I have filed that as T333926.
I don't know how CI did not manage to catch the issue when https://gerrit.wikimedia.org/r/c/mediawiki/core/+/850669/ has been proposed given there are at least two jobs testing it with MobileFrontend (PHPUnit extensions testsuite and the Selenium tests).
Change 905980 had a related patch set uploaded (by Jforrester; author: Daniel Kinzler):
[mediawiki/extensions/CentralAuth@REL1_40] Use HookContainer to register hooks
Change 905980 merged by jenkins-bot:
[mediawiki/extensions/CentralAuth@REL1_40] Use HookContainer to register hooks
Change 904291 merged by jenkins-bot:
[mediawiki/core@REL1_40] Make $wgHooks trigger deprecation warnings.
The hooks system doesn't have an owner, but tagging API Platform for visibility of @daniel's work on this particular task.