Page MenuHomePhabricator

Refactor Hooks.php to use HookHandlers
Closed, ResolvedPublic

Description

Correct me if I'm wrong, but I think that placing a hook method in Hooks.php is discouraged, and the more modern way to do this is to use a HookHandler.

Example patch adding a HookHandler to PageTriage: https://github.com/wikimedia/mediawiki-extensions-PageTriage/commit/7b1f0eb1683d12484640983e3a50024c87258d35

If so, PageTriage's 20 or so hook methods located in Hooks.php can be refactored into individual PHP files in the folder includes/HookHandlers.

I believe the main advantage is the ability to dependency inject MediaWiki services/instances.

https://www.mediawiki.org/wiki/Manual:Hooks#Handling_hooks_in_MediaWiki_1.35_and_later

Details

Related Changes in Gerrit:
SubjectRepoBranchLines +/-
mediawiki/extensions/PageTriagemaster+152 -42
mediawiki/extensions/PageTriagemaster+4 -6
mediawiki/extensions/PageTriagemaster+17 -13
mediawiki/extensions/PageTriagemaster+7 -9
mediawiki/extensions/PageTriagemaster+7 -11
mediawiki/extensions/PageTriagemaster+11 -12
mediawiki/extensions/PageTriagemaster+2 -2
mediawiki/extensions/PageTriagemaster+8 -14
mediawiki/extensions/PageTriagemaster+10 -17
mediawiki/extensions/PageTriagemaster+45 -22
mediawiki/extensions/PageTriagemaster+47 -25
mediawiki/extensions/PageTriagemaster+14 -21
mediawiki/extensions/PageTriagemaster+10 -14
mediawiki/extensions/PageTriagemaster+18 -19
mediawiki/extensions/PageTriagemaster+13 -24
mediawiki/extensions/PageTriagemaster+97 -81
mediawiki/extensions/PageTriagemaster+28 -12
Show related patches Customize query in gerrit

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript

You can still call it "Hooks.php", indeed the "main" HookHandler for PageTriage currently points to that file:

"HookHandlers": {
		"undelete": {
			"class": "MediaWiki\\Extension\\PageTriage\\HookHandlers\\UndeleteHookHandler"
		},
		"main": {
			"class": "MediaWiki\\Extension\\PageTriage\\Hooks",
			"services": [
				"MainConfig"
			]
		}
	},

Creating a separate file for each handler seems kind of excessive to me. I would suggest trying to organize the hook handlers by the surface area of the relevant feature that the hook handler is used for. e.g. maybe there is a "curationtoolbar" hook handler, and a "newpagesfeed" hook handler file, that would register hook handlers for those two features specifically.

@Novem_Linguae I'd prioritize this hooks.php -> hookhandlers rewrite if I were you. The static code of hooks is a big reason of why so much of MediaWiki is still static and global, and getting rid of that static entry point into an extension makes lots of things simpler, including writing testcases, and rewriting all the static code that is behind these static entry points. It's also generally relatively easy to do. There are many examples from other extensions, that have recently gone through this rewrite, that can look at for guidance.

Change 862934 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Introduce PageTriageQueueManager

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

Change 867157 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Convert ListDefinedTags, ChangeTagsListActive, ChangeTagsAllowedAdd to Hook Handler

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

Change 867158 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Convert LoadExtensionSchemaUpdates to HookHandler

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

Change 867159 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Convert PageMoveComplete to HookHandler

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

Change 867162 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Convert RevisionFromEditComplete to HookHandler

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

Change 867189 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Convert PageSaveComplete to HookHandler

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

Change 867190 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Convert LinksUpdateComplete to HookHandler

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

Change 867157 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Convert ListDefinedTags, ChangeTagsListActive, ChangeTagsAllowedAdd to Hook Handler

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

Change 867193 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Convert ArticleViewFooter to HookHandler

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

Change 867158 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Convert LoadExtensionSchemaUpdates to HookHandler

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

Change 867577 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Convert ArticleDeleteComplete to HookHandler

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

Change 867578 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Hooks.php: Use PageIdentity for flushUserStatusCache

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

Change 867580 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Hooks.php: Use injected TitleFactory instead of static Title methods

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

Change 867581 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Convert MarkPatrolledComplete to HookHandler

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

Change 867583 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Convert BlockIpCompleteHook to HookHandler

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

Change 867584 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Convert ResourceLoaderGetConfigVarsHook to HookHandler

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

Change 867586 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Convert LocalUserCreated to HookHandler

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

Change 867587 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] Convert ResourceLoaderRegisterModules to HookHandler

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

Change 867590 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/extensions/PageTriage@master] PageSaveComplete: Minor simplifications

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

Change 867159 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Convert PageMoveComplete to HookHandler

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

Change 867162 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Convert RevisionFromEditComplete to HookHandler

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

Change 867189 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Convert PageSaveComplete to HookHandler

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

Change 867190 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Convert LinksUpdateComplete to HookHandler

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

Change 867193 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Convert ArticleViewFooter to HookHandler

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

Change 867577 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Convert ArticleDeleteComplete to HookHandler

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

Really sorry for the noise there... I +2'd from the wrong end(?) of the relation chain...

Change 867578 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Hooks.php: Use PageIdentity for flushUserStatusCache

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

Change 867580 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Hooks.php: Use injected TitleFactory instead of static Title methods

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

Change 867581 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Convert MarkPatrolledComplete to HookHandler

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

Change 867583 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Convert BlockIpCompleteHook to HookHandler

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

Change 867584 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Convert ResourceLoaderGetConfigVars to HookHandler

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

Change 867586 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Convert LocalUserCreated to HookHandler

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

Change 867587 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Convert ResourceLoaderRegisterModules to HookHandler

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

Change 867590 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] PageSaveComplete: Minor simplifications

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

Change 862934 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Introduce PageTriageQueueManager

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

Is this done? The remaining hooks relate to extensions (Echo and ORES).

Is this done? The remaining hooks relate to extensions (Echo and ORES).

Yep!