Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
2192 / 2192
100.00% covered (success)
100.00%
536 / 536
CRAP
100.00% covered (success)
100.00%
1 / 1
HookRunner
100.00% covered (success)
100.00%
2192 / 2192
100.00% covered (success)
100.00%
536 / 536
536
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 onAbortAutoblock
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbortDiffCache
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbortEmailNotification
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAbortTalkPageEmailNotification
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onActionBeforeFormDisplay
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onActionModifyFormFields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAddNewAccount
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAfterBuildFeedLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAfterFinalPageOutput
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onAfterImportPage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAfterParserFetchFileAndTitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAlternateEdit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAlternateEditPreview
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAlternateUserMailer
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAncientPagesQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onApiBeforeMain
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleConfirmDelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleContentOnDiff
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleDelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleDeleteAfterSuccess
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleDeleteComplete
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onArticleEditUpdateNewTalk
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleFromTitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleMergeComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticlePageDataAfter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticlePageDataBefore
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleParserOptions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticlePrepareTextForEdit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleProtect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleProtectComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticlePurge
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleRevisionViewCustom
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleRevisionVisibilitySet
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleShowPatrolFooter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleUndelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleUpdateBeforeRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleViewFooter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleViewHeader
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticleViewRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onArticle__MissingArticleConditions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAuthChangeFormFields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAuthManagerFilterProviders
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onAuthManagerLoginAuthenticateAudit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAuthManagerVerifyAuthentication
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onAuthPreserveQueryParams
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 onAuthenticationAttemptThrottled
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 onAutopromoteCondition
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBacklinkCacheGetConditions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBacklinkCacheGetPrefix
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBadImage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBeforeDisplayNoArticleText
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBeforeInitialize
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBeforePageDisplay
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onBeforePageRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBeforeParserFetchFileAndTitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBeforeParserFetchTemplateRevisionRecord
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBeforeRevertedTagUpdate
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 onBeforeWelcomeCreation
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBitmapHandlerCheckImageArea
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBitmapHandlerTransform
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBlockIp
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBlockIpComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onBookInformation
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCanonicalNamespaces
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCategoryAfterPageAdded
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCategoryAfterPageRemoved
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCategoryPageView
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCategoryViewer__doCategoryQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCategoryViewer__generateLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeAuthenticationDataAudit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangesListInitRows
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangesListInsertArticleLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangesListSpecialPageQuery
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onChangesListSpecialPageStructuredFilters
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeTagAfterDelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeTagCanCreate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeTagCanDelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeTagsAfterUpdateTags
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onChangeTagsAllowedAdd
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeTagsListActive
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onChangeUserGroups
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCollation__factory
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onConfirmEmailComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentAlterParserOutput
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentGetParserOutput
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentHandlerDefaultModelFor
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentHandlerForModelID
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentModelCanBeUsedOn
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentSecurityPolicyDefaultSource
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentSecurityPolicyDirectives
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContentSecurityPolicyScriptSource
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContribsPager__getQueryInfo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContribsPager__reallyDoQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContributeCards
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContributionsLineEnding
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onContributionsToolLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onConvertContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onCustomEditor
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDeletedContribsPager__reallyDoQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDeletedContributionsLineEnding
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDeleteUnknownPreferences
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineAfterLoadNewText
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTextSlotDiffRendererTablePrefix
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineLoadTextAfterNewContentIsLoaded
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineMarkPatrolledLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineMarkPatrolledRCID
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineNewHeader
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineOldHeader
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineOldHeaderNoOldRev
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineRenderRevisionAddParserOutput
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineRenderRevisionShowFinalPatrolLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineShowDiff
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineShowDiffPage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineShowDiffPageMaybeShowMissingRevision
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineShowEmptyOldContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDifferenceEngineViewHeader
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDiffTools
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onDisplayOldSubtitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditFilter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditFilterMergedContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditFormInitialText
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditFormPreloadText
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageBeforeConflictDiff
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageBeforeEditButtons
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageBeforeEditToolbar
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageCopyrightWarning
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageGetCheckboxesDefinition
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageGetDiffContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageGetPreviewContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageNoSuchSection
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPageTosSummary
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__attemptSave
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__attemptSave_after
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__importFormData
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__showEditForm_fields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__showEditForm_initial
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__showReadOnlyForm_initial
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEditPage__showStandardInputs_options
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailConfirmed
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUser
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUserCC
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUserComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUserForm
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUserPermissionsErrors
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUserAuthorizeSend
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEmailUserSendEmail
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEnhancedChangesListModifyBlockLineData
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEnhancedChangesListModifyLineData
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onEnhancedChangesList__getLogText
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onExemptFromAccountCreationThrottle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onExtensionTypes
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onFetchChangesList
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onFileDeleteComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onFileTransformed
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onFileUndeleteComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onFileUpload
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onFormatAutocomments
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGalleryGetModes
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetAllBlockActions
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onGetAutoPromoteGroups
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetActionName
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onGetCacheVaryCookies
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetCanonicalURL
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetContentModels
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetDefaultSortkey
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetDifferenceEngine
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onGetDoubleUnderscoreIDs
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetExtendedMetadata
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetFullURL
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetHumanTimestamp
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetInternalURL
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetIP
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetLangPreferredVariant
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetLinkColours
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetLocalURL
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetLocalURL__Article
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetLocalURL__Internal
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetLogTypesOnUser
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetMagicVariableIDs
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetMetadataVersion
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetNewMessagesAlert
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetPreferences
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetRelativeTimestamp
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetSlotDiffRenderer
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetUserBlock
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPermissionErrorAudit
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onGetUserPermissionsErrors
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetUserPermissionsErrorsExpensive
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGitViewers
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHistoryPageToolLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHistoryTools
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHtmlCacheUpdaterAppendUrls
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHtmlCacheUpdaterVaryUrls
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHTMLFileCache__useFileCache
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHtmlPageLinkRendererBegin
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onHtmlPageLinkRendererEnd
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImageBeforeProduceHTML
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onImageOpenShowImageInlineBefore
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImagePageAfterImageLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImagePageFileHistoryLine
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImagePageFindFile
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImagePageShowTOC
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImgAuthBeforeStream
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImgAuthModifyHeaders
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandleLogItemXMLTag
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandlePageXMLTag
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandleRevisionXMLTag
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandleContentXMLTag
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandleToplevelXMLTag
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandleUnknownUser
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportHandleUploadXMLTag
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportLogInterwikiLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onImportSources
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onInfoAction
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onInitializeArticleMaybeRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onInternalParseBeforeLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onInterwikiLoadPrefix
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onInvalidateEmailComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onIRCLineURL
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onIsFileCacheable
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onIsTrustedProxy
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onIsUploadAllowedFromUrl
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onIsValidEmailAddr
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onIsValidPassword
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onJsonValidateSave
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLanguageGetNamespaces
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLanguageGetTranslatedLanguageNames
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLanguageLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLanguageSelector
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLanguage__getMessagesFileName
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLinkerGenerateRollbackLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLinkerMakeExternalImage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLinkerMakeExternalLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLinkerMakeMediaLinkFile
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLinksUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLinksUpdateComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onListDefinedTags
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLoadExtensionSchemaUpdates
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onLocalFilePurgeThumbnails
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLocalFile__getHistory
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLocalisationCacheRecache
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLocalisationCacheRecacheFallback
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLocalUserCreated
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLogEventsListGetExtraInputs
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLogEventsListLineEnding
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLogEventsListShowLogExtract
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLogException
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLoginFormValidErrorMessages
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLogLine
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onLonelyPagesQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMagicWordwgVariableIDs
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMaintenanceRefreshLinksInit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMaintenanceShellStart
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onMaintenanceUpdateAddParams
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMakeGlobalVariablesScript
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onManualLogEntryBeforePublish
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onMarkPatrolled
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMarkPatrolledComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMediaWikiPerformAction
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMediaWikiServices
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onMessageCacheFetchOverrides
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onMessageCacheReplace
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMessageCache__get
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMessagesPreLoad
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMimeMagicGuessFromContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMimeMagicImproveFromExtension
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMimeMagicInit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetBlockErrorMessageKey
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onModifyExportQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMovePageCheckPermissions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMovePageIsValidMove
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onMultiContentSave
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onNamespaceIsMovable
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onNewDifferenceEngine
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onNewPagesLineEnding
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOldChangesListRecentChangesLine
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOpenSearchUrls
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOpportunisticLinksUpdate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOtherAutoblockLogLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOtherBlockLogLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOutputPageAfterGetHeadLinksArray
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOutputPageBeforeHTML
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOutputPageBodyAttributes
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onOutputPageCheckLastModified
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOutputPageMakeCategoryLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onOutputPageParserOutput
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onOutputPageRenderCategoryLink
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onPageContentLanguage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageContentSave
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onPageDelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageDeleteComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageDeletionDataUpdates
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageUndelete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageUndeleteComplete
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
1
 onPageHistoryBeforeList
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageHistoryLineEnding
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageHistoryPager__doBatchLookups
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageHistoryPager__getQueryInfo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageMoveComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageMoveCompleting
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageRenderingHash
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageSaveComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPageViewUpdates
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserAfterParse
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserAfterTidy
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserBeforeInternalParse
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserBeforePreprocess
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserCacheSaveComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserClearState
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserCloned
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserFetchTemplateData
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserFirstCallInit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserGetVariableValueSwitch
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserGetVariableValueTs
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserLimitReportFormat
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserLimitReportPrepare
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserLogLinterData
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserMakeImageParams
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserModifyImageHTML
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onParserOptionsRegister
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserOutputPostCacheTransform
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onParserOutputStashForEdit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserPreSaveTransformComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onParserTestGlobals
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPasswordPoliciesForUser
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPerformRetroactiveAutoblock
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPingLimiter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPlaceNewSection
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPostLoginRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPreferencesFormPreSave
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPreferencesGetIcon
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPreferencesGetLayout
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPreferencesGetLegend
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPrefixSearchBackend
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPrefixSearchExtractNamespace
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onPrefsEmailAudit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onProtectionForm__buildForm
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onProtectionFormAddFormFields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onProtectionForm__save
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onProtectionForm__showLogExtract
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRandomPageQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRawPageViewBeforeOutput
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRecentChangesPurgeRows
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRecentChange_save
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRedirectSpecialArticleRedirectParams
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRejectParserCacheValue
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRenameUserAbort
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRenameUserComplete
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onRenameUserPreRename
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onRenameUserSQL
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onRenameUserWarning
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onRequestContextCreateSkin
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onResetPasswordExpiration
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRevisionDataUpdates
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRevisionFromEditComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRevisionRecordInserted
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRevisionUndeleted
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onRollbackComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchableNamespaces
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchAfterNoDirectMatch
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchDataForIndex
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchDataForIndex2
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchGetNearMatch
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchGetNearMatchBefore
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchGetNearMatchComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchIndexFields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchResultInitFromTitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchResultProvideDescription
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchResultProvideThumbnail
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSearchResultsAugment
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSecuritySensitiveOperationStatus
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSelfLinkBegin
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSendWatchlistEmailNotification
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSessionCheckInfo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSessionMetadata
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSetupAfterCache
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onShortPagesQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onShowMissingArticle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onShowSearchHit
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onShowSearchHitTitle
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSidebarBeforeOutput
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSiteNoticeAfter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSiteNoticeBefore
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinPageReadyConfig
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSkinAddFooterLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinAfterBottomScripts
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinAfterContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinAfterPortlet
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinBuildSidebar
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinCopyrightFooter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinCopyrightFooterMessage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinEditSectionLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinPreloadExistence
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinSubPageSubtitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinTemplateGetLanguageLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSkinTemplateNavigation__Universal
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSoftwareInfo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialBlockModifyFormFields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialContributionsBeforeMainOutput
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialContributions__formatRow__flags
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialContributions__getForm__filters
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialCreateAccountBenefits
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialExportGetExtraPages
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialListusersDefaultQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialListusersFormatRow
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialListusersHeader
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialListusersHeaderForm
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialListusersQueryInfo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialLogAddLogSearchRelations
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialMovepageAfterMove
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialMuteModifyFormFields
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialNewpagesConditions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialNewPagesFilters
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPageAfterExecute
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPageBeforeExecute
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPageBeforeFormDisplay
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPage_initList
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPasswordResetOnSubmit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPrefixIndexGetFormFilters
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialPrefixIndexQuery
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialRandomGetRandomTitle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialRecentChangesPanel
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialResetTokensTokens
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchCreateLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchGoResult
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchNogomatch
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchPowerBox
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchProfileForm
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchProfiles
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchResults
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchResultsAppend
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchResultsPrepend
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialSearchSetupEngine
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialStatsAddExtra
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialTrackingCategories__generateCatLink
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialTrackingCategories__preprocess
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialUploadComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialVersionVersionUrl
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialWatchlistGetNonRevisionTypes
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpreadAnyEditBlock
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSpecialWhatLinksHereQuery
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onTempUserCreatedRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTestCanonicalRedirect
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onThumbnailBeforeProduceHTML
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleExists
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleGetEditNotices
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleGetRestrictionTypes
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleIsAlwaysKnown
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleIsMovable
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleMove
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleMoveStarting
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleQuickPermissions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleReadWhitelist
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onTitleSquidURLs
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnblockUser
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnblockUserComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUndeleteForm__showHistory
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUndeleteForm__showRevision
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUndeletePageToolLinks
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnitTestsAfterDatabaseSetup
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnitTestsBeforeDatabaseTeardown
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnitTestsList
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnwatchArticle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUnwatchArticleComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUpdateUserMailerFormattedPageStatus
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadCreateFromRequest
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadFormInitDescriptor
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadFormSourceDescriptors
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadForm_BeforeProcessing
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadForm_getInitialPageText
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadForm_initial
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadStashFile
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadVerifyFile
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUploadVerifyUpload
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserAddGroup
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserArrayFromResult
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserCan
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserCanSendEmail
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserClearNewTalkNotification
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserEditCountUpdate
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onUserEffectiveGroups
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetAllRights
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetDefaultOptions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onConditionalDefaultOptionsAddCondition
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetEmail
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetEmailAuthenticationTimestamp
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetLanguageObject
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserPrivilegedGroups
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetReservedNames
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetRights
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGetRightsRemove
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserGroupsChanged
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onUserIsBlockedFrom
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserIsBlockedGlobally
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserIsBot
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserIsEveryoneAllowed
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserIsLocked
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserLoadAfterLoadFromSession
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserLoadDefaults
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onLoadUserOptions
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 onUserLoggedIn
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserLoginComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserLogout
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserLogoutComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserMailerChangeReturnPath
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserMailerSplitTo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserMailerTransformContent
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserMailerTransformMessage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserRemoveGroup
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onSaveUserOptions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserSaveSettings
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserSendConfirmationMail
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserSetEmail
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserSetEmailAuthenticationTimestamp
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUsersPagerDoBatchLookups
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUserToolLinksEdit
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onUser__mailPasswordInternal
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onValidateExtendedMetadataCache
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWantedPages__getQueryInfo
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWatchArticle
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWatchArticleComplete
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWatchedItemQueryServiceExtensions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWatchlistEditorBeforeFormRender
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWatchlistEditorBuildRemoveLine
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWebRequestPathInfoRouter
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWebResponseSetCookie
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWfShellWikiCmd
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWgQueryPages
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWhatLinksHereProps
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWikiExporter__dumpStableQuery
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWikiPageDeletionUpdates
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onWikiPageFactory
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onXmlDumpWriterOpenPage
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onXmlDumpWriterWriteRevision
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace MediaWiki\HookContainer;
4
5use Article;
6use File;
7use MailAddress;
8use ManualLogEntry;
9use MediaWiki\Auth\AuthenticationResponse;
10use MediaWiki\Auth\AuthManager;
11use MediaWiki\Content\ContentHandler;
12use MediaWiki\Content\JsonContent;
13use MediaWiki\Context\IContextSource;
14use MediaWiki\Linker\LinkRenderer;
15use MediaWiki\Linker\LinkTarget;
16use MediaWiki\Mail\UserEmailContact;
17use MediaWiki\Output\OutputPage;
18use MediaWiki\Page\PageIdentity;
19use MediaWiki\Page\ProperPageIdentity;
20use MediaWiki\Parser\Parser;
21use MediaWiki\Parser\ParserOptions;
22use MediaWiki\Parser\ParserOutput;
23use MediaWiki\Permissions\Authority;
24use MediaWiki\RenameUser\RenameuserSQL;
25use MediaWiki\ResourceLoader as RL;
26use MediaWiki\Revision\RevisionRecord;
27use MediaWiki\Session\Session;
28use MediaWiki\SpecialPage\SpecialPage;
29use MediaWiki\Title\Title;
30use MediaWiki\User\UserIdentity;
31use SearchEngine;
32use Skin;
33use StatusValue;
34use Wikimedia\Rdbms\SelectQueryBuilder;
35use WikiPage;
36
37/**
38 * This class provides an implementation of the core hook interfaces,
39 * forwarding hook calls to HookContainer for dispatch to extensions.
40 * It is intended for use within MediaWiki core only. Extensions that
41 * need a hook runner should create one for the hooks they need to run.
42 *
43 * To use it, create a new HookRunner object from a HookContainer obtained
44 * by dependency injection, or as a last resort, from the global service
45 * container. Then call the relevant method on the object:
46 *   ( new HookRunner( $hookContainer ) )->onSomeHook( $param );
47 *
48 * @internal
49 */
50class HookRunner implements
51    \MediaWiki\Actions\Hook\GetActionNameHook,
52    \MediaWiki\Auth\Hook\AuthenticationAttemptThrottledHook,
53    \MediaWiki\Auth\Hook\AuthManagerFilterProvidersHook,
54    \MediaWiki\Auth\Hook\AuthManagerLoginAuthenticateAuditHook,
55    \MediaWiki\Auth\Hook\AuthManagerVerifyAuthenticationHook,
56    \MediaWiki\Auth\Hook\AuthPreserveQueryParamsHook,
57    \MediaWiki\Auth\Hook\ExemptFromAccountCreationThrottleHook,
58    \MediaWiki\Auth\Hook\LocalUserCreatedHook,
59    \MediaWiki\Auth\Hook\ResetPasswordExpirationHook,
60    \MediaWiki\Auth\Hook\SecuritySensitiveOperationStatusHook,
61    \MediaWiki\Auth\Hook\UserLoggedInHook,
62    \MediaWiki\Block\Hook\AbortAutoblockHook,
63    \MediaWiki\Block\Hook\GetAllBlockActionsHook,
64    \MediaWiki\Block\Hook\GetUserBlockHook,
65    \MediaWiki\Block\Hook\PerformRetroactiveAutoblockHook,
66    \MediaWiki\Block\Hook\SpreadAnyEditBlockHook,
67    \MediaWiki\Cache\Hook\BacklinkCacheGetConditionsHook,
68    \MediaWiki\Cache\Hook\BacklinkCacheGetPrefixHook,
69    \MediaWiki\Cache\Hook\HtmlCacheUpdaterAppendUrlsHook,
70    \MediaWiki\Cache\Hook\HtmlCacheUpdaterVaryUrlsHook,
71    \MediaWiki\Cache\Hook\HTMLFileCache__useFileCacheHook,
72    \MediaWiki\Cache\Hook\MessageCacheFetchOverridesHook,
73    \MediaWiki\Cache\Hook\MessageCacheReplaceHook,
74    \MediaWiki\Cache\Hook\MessageCache__getHook,
75    \MediaWiki\Cache\Hook\MessagesPreLoadHook,
76    \MediaWiki\Hook\TitleSquidURLsHook,
77    \MediaWiki\ChangeTags\Hook\ChangeTagAfterDeleteHook,
78    \MediaWiki\ChangeTags\Hook\ChangeTagCanCreateHook,
79    \MediaWiki\ChangeTags\Hook\ChangeTagCanDeleteHook,
80    \MediaWiki\ChangeTags\Hook\ChangeTagsAfterUpdateTagsHook,
81    \MediaWiki\ChangeTags\Hook\ChangeTagsAllowedAddHook,
82    \MediaWiki\ChangeTags\Hook\ChangeTagsListActiveHook,
83    \MediaWiki\ChangeTags\Hook\ListDefinedTagsHook,
84    \MediaWiki\Content\Hook\ContentAlterParserOutputHook,
85    \MediaWiki\Content\Hook\ContentGetParserOutputHook,
86    \MediaWiki\Content\Hook\ContentHandlerForModelIDHook,
87    \MediaWiki\Content\Hook\ContentModelCanBeUsedOnHook,
88    \MediaWiki\Content\Hook\ConvertContentHook,
89    \MediaWiki\Content\Hook\GetContentModelsHook,
90    \MediaWiki\Content\Hook\GetDifferenceEngineHook,
91    \MediaWiki\Content\Hook\GetSlotDiffRendererHook,
92    \MediaWiki\Content\Hook\JsonValidateSaveHook,
93    \MediaWiki\Content\Hook\PageContentLanguageHook,
94    \MediaWiki\Content\Hook\PlaceNewSectionHook,
95    \MediaWiki\Content\Hook\SearchDataForIndexHook,
96    \MediaWiki\Content\Hook\SearchDataForIndex2Hook,
97    \MediaWiki\Specials\Contribute\Hook\ContributeCardsHook,
98    \MediaWiki\Diff\Hook\AbortDiffCacheHook,
99    \MediaWiki\Diff\Hook\ArticleContentOnDiffHook,
100    \MediaWiki\Diff\Hook\DifferenceEngineAfterLoadNewTextHook,
101    \MediaWiki\Diff\Hook\TextSlotDiffRendererTablePrefixHook,
102    \MediaWiki\Diff\Hook\DifferenceEngineLoadTextAfterNewContentIsLoadedHook,
103    \MediaWiki\Diff\Hook\DifferenceEngineMarkPatrolledLinkHook,
104    \MediaWiki\Diff\Hook\DifferenceEngineMarkPatrolledRCIDHook,
105    \MediaWiki\Diff\Hook\DifferenceEngineNewHeaderHook,
106    \MediaWiki\Diff\Hook\DifferenceEngineOldHeaderHook,
107    \MediaWiki\Diff\Hook\DifferenceEngineOldHeaderNoOldRevHook,
108    \MediaWiki\Diff\Hook\DifferenceEngineRenderRevisionAddParserOutputHook,
109    \MediaWiki\Diff\Hook\DifferenceEngineRenderRevisionShowFinalPatrolLinkHook,
110    \MediaWiki\Diff\Hook\DifferenceEngineShowDiffHook,
111    \MediaWiki\Diff\Hook\DifferenceEngineShowDiffPageHook,
112    \MediaWiki\Diff\Hook\DifferenceEngineShowDiffPageMaybeShowMissingRevisionHook,
113    \MediaWiki\Diff\Hook\DifferenceEngineShowEmptyOldContentHook,
114    \MediaWiki\Diff\Hook\DifferenceEngineViewHeaderHook,
115    \MediaWiki\Diff\Hook\DiffToolsHook,
116    \MediaWiki\Diff\Hook\NewDifferenceEngineHook,
117    \MediaWiki\Hook\AbortEmailNotificationHook,
118    \MediaWiki\Hook\AbortTalkPageEmailNotificationHook,
119    \MediaWiki\Hook\ActionBeforeFormDisplayHook,
120    \MediaWiki\Hook\ActionModifyFormFieldsHook,
121    \MediaWiki\Hook\AddNewAccountHook,
122    \MediaWiki\Output\Hook\AfterBuildFeedLinksHook,
123    \MediaWiki\Output\Hook\AfterFinalPageOutputHook,
124    \MediaWiki\Hook\AfterImportPageHook,
125    \MediaWiki\Hook\AfterParserFetchFileAndTitleHook,
126    \MediaWiki\Hook\AlternateEditHook,
127    \MediaWiki\Hook\AlternateEditPreviewHook,
128    \MediaWiki\Hook\AlternateUserMailerHook,
129    \MediaWiki\Hook\AncientPagesQueryHook,
130    \MediaWiki\Hook\ApiBeforeMainHook,
131    \MediaWiki\Hook\ArticleMergeCompleteHook,
132    \MediaWiki\Hook\ArticleRevisionVisibilitySetHook,
133    \MediaWiki\Hook\ArticleUpdateBeforeRedirectHook,
134    \MediaWiki\Hook\BadImageHook,
135    \MediaWiki\Hook\BeforeInitializeHook,
136    \MediaWiki\Output\Hook\BeforePageDisplayHook,
137    \MediaWiki\Output\Hook\BeforePageRedirectHook,
138    \MediaWiki\Hook\BeforeParserFetchFileAndTitleHook,
139    \MediaWiki\Hook\BeforeParserFetchTemplateRevisionRecordHook,
140    \MediaWiki\Hook\BeforeWelcomeCreationHook,
141    \MediaWiki\Hook\BitmapHandlerCheckImageAreaHook,
142    \MediaWiki\Hook\BitmapHandlerTransformHook,
143    \MediaWiki\Hook\BlockIpCompleteHook,
144    \MediaWiki\Hook\BlockIpHook,
145    \MediaWiki\Hook\BookInformationHook,
146    \MediaWiki\Hook\CanonicalNamespacesHook,
147    \MediaWiki\Hook\CategoryViewer__doCategoryQueryHook,
148    \MediaWiki\Hook\CategoryViewer__generateLinkHook,
149    \MediaWiki\Hook\ChangesListInitRowsHook,
150    \MediaWiki\Hook\ChangesListInsertArticleLinkHook,
151    \MediaWiki\Hook\ChangeUserGroupsHook,
152    \MediaWiki\Hook\Collation__factoryHook,
153    \MediaWiki\Hook\ContentSecurityPolicyDefaultSourceHook,
154    \MediaWiki\Hook\ContentSecurityPolicyDirectivesHook,
155    \MediaWiki\Hook\ContentSecurityPolicyScriptSourceHook,
156    \MediaWiki\Hook\ContribsPager__getQueryInfoHook,
157    \MediaWiki\Hook\ContribsPager__reallyDoQueryHook,
158    \MediaWiki\Hook\ContributionsLineEndingHook,
159    \MediaWiki\Hook\ContributionsToolLinksHook,
160    \MediaWiki\Hook\CustomEditorHook,
161    \MediaWiki\Hook\DeletedContribsPager__reallyDoQueryHook,
162    \MediaWiki\Hook\DeletedContributionsLineEndingHook,
163    \MediaWiki\Hook\DeleteUnknownPreferencesHook,
164    \MediaWiki\Hook\EditFilterHook,
165    \MediaWiki\Hook\EditFilterMergedContentHook,
166    \MediaWiki\Hook\EditFormInitialTextHook,
167    \MediaWiki\Hook\EditFormPreloadTextHook,
168    \MediaWiki\Hook\EditPageBeforeConflictDiffHook,
169    \MediaWiki\Hook\EditPageBeforeEditButtonsHook,
170    \MediaWiki\Hook\EditPageBeforeEditToolbarHook,
171    \MediaWiki\Hook\EditPageCopyrightWarningHook,
172    \MediaWiki\Hook\EditPageGetCheckboxesDefinitionHook,
173    \MediaWiki\Hook\EditPageGetDiffContentHook,
174    \MediaWiki\Hook\EditPageGetPreviewContentHook,
175    \MediaWiki\Hook\EditPageNoSuchSectionHook,
176    \MediaWiki\Hook\EditPageTosSummaryHook,
177    \MediaWiki\Hook\EditPage__attemptSaveHook,
178    \MediaWiki\Hook\EditPage__attemptSave_afterHook,
179    \MediaWiki\Hook\EditPage__importFormDataHook,
180    \MediaWiki\Hook\EditPage__showEditForm_fieldsHook,
181    \MediaWiki\Hook\EditPage__showEditForm_initialHook,
182    \MediaWiki\Hook\EditPage__showReadOnlyForm_initialHook,
183    \MediaWiki\Hook\EditPage__showStandardInputs_optionsHook,
184    \MediaWiki\Hook\EmailUserCCHook,
185    \MediaWiki\Hook\EmailUserCompleteHook,
186    \MediaWiki\Hook\EmailUserFormHook,
187    \MediaWiki\Hook\EmailUserHook,
188    \MediaWiki\Hook\EmailUserPermissionsErrorsHook,
189    \MediaWiki\Mail\Hook\EmailUserAuthorizeSendHook,
190    \MediaWiki\Mail\Hook\EmailUserSendEmailHook,
191    \MediaWiki\Hook\EnhancedChangesListModifyBlockLineDataHook,
192    \MediaWiki\Hook\EnhancedChangesListModifyLineDataHook,
193    \MediaWiki\Hook\EnhancedChangesList__getLogTextHook,
194    \MediaWiki\Hook\ExtensionTypesHook,
195    \MediaWiki\Hook\FetchChangesListHook,
196    \MediaWiki\Hook\FileDeleteCompleteHook,
197    \MediaWiki\Hook\FileTransformedHook,
198    \MediaWiki\Hook\FileUndeleteCompleteHook,
199    \MediaWiki\Hook\FileUploadHook,
200    \MediaWiki\Hook\FormatAutocommentsHook,
201    \MediaWiki\Hook\GalleryGetModesHook,
202    \MediaWiki\Hook\GetBlockErrorMessageKeyHook,
203    \MediaWiki\Output\Hook\GetCacheVaryCookiesHook,
204    \MediaWiki\Hook\GetCanonicalURLHook,
205    \MediaWiki\Hook\GetDefaultSortkeyHook,
206    \MediaWiki\Hook\GetDoubleUnderscoreIDsHook,
207    \MediaWiki\Hook\GetExtendedMetadataHook,
208    \MediaWiki\Hook\GetFullURLHook,
209    \MediaWiki\Hook\GetHumanTimestampHook,
210    \MediaWiki\Hook\GetInternalURLHook,
211    \MediaWiki\Hook\GetIPHook,
212    \MediaWiki\Hook\GetLangPreferredVariantHook,
213    \MediaWiki\Hook\GetLinkColoursHook,
214    \MediaWiki\Hook\GetLocalURLHook,
215    \MediaWiki\Hook\GetLocalURL__ArticleHook,
216    \MediaWiki\Hook\GetLocalURL__InternalHook,
217    \MediaWiki\Hook\GetLogTypesOnUserHook,
218    \MediaWiki\Hook\GetMagicVariableIDsHook,
219    \MediaWiki\Hook\GetMetadataVersionHook,
220    \MediaWiki\Hook\GetNewMessagesAlertHook,
221    \MediaWiki\Hook\GetRelativeTimestampHook,
222    \MediaWiki\Hook\GitViewersHook,
223    \MediaWiki\Hook\HistoryPageToolLinksHook,
224    \MediaWiki\Hook\HistoryToolsHook,
225    \MediaWiki\Hook\ImageBeforeProduceHTMLHook,
226    \MediaWiki\Hook\ImgAuthBeforeStreamHook,
227    \MediaWiki\Hook\ImgAuthModifyHeadersHook,
228    \MediaWiki\Hook\ImportHandleContentXMLTagHook,
229    \MediaWiki\Hook\ImportHandleLogItemXMLTagHook,
230    \MediaWiki\Hook\ImportHandlePageXMLTagHook,
231    \MediaWiki\Hook\ImportHandleRevisionXMLTagHook,
232    \MediaWiki\Hook\ImportHandleToplevelXMLTagHook,
233    \MediaWiki\Hook\ImportHandleUnknownUserHook,
234    \MediaWiki\Hook\ImportHandleUploadXMLTagHook,
235    \MediaWiki\Hook\ImportLogInterwikiLinkHook,
236    \MediaWiki\Hook\ImportSourcesHook,
237    \MediaWiki\Hook\InfoActionHook,
238    \MediaWiki\Hook\InitializeArticleMaybeRedirectHook,
239    \MediaWiki\Hook\InternalParseBeforeLinksHook,
240    \MediaWiki\Hook\IRCLineURLHook,
241    \MediaWiki\Hook\IsTrustedProxyHook,
242    \MediaWiki\Hook\IsUploadAllowedFromUrlHook,
243    \MediaWiki\Hook\IsValidEmailAddrHook,
244    \MediaWiki\Hook\LanguageGetNamespacesHook,
245    \MediaWiki\Output\Hook\LanguageLinksHook,
246    \MediaWiki\Hook\LanguageSelectorHook,
247    \MediaWiki\Hook\LinkerMakeExternalImageHook,
248    \MediaWiki\Hook\LinkerMakeExternalLinkHook,
249    \MediaWiki\Hook\LinkerMakeMediaLinkFileHook,
250    \MediaWiki\Hook\LinksUpdateCompleteHook,
251    \MediaWiki\Hook\LinksUpdateHook,
252    \MediaWiki\Hook\LocalFilePurgeThumbnailsHook,
253    \MediaWiki\Hook\LocalFile__getHistoryHook,
254    \MediaWiki\Hook\LocalisationCacheRecacheFallbackHook,
255    \MediaWiki\Hook\LocalisationCacheRecacheHook,
256    \MediaWiki\Hook\LogEventsListGetExtraInputsHook,
257    \MediaWiki\Hook\LogEventsListLineEndingHook,
258    \MediaWiki\Hook\LogEventsListShowLogExtractHook,
259    \MediaWiki\Hook\LogExceptionHook,
260    \MediaWiki\Hook\LoginFormValidErrorMessagesHook,
261    \MediaWiki\Hook\LogLineHook,
262    \MediaWiki\Hook\LonelyPagesQueryHook,
263    \MediaWiki\Hook\MagicWordwgVariableIDsHook,
264    \MediaWiki\Hook\MaintenanceRefreshLinksInitHook,
265    \MediaWiki\Hook\MaintenanceShellStartHook,
266    \MediaWiki\Hook\MaintenanceUpdateAddParamsHook,
267    \MediaWiki\Output\Hook\MakeGlobalVariablesScriptHook,
268    \MediaWiki\Hook\ManualLogEntryBeforePublishHook,
269    \MediaWiki\Hook\MarkPatrolledCompleteHook,
270    \MediaWiki\Hook\MarkPatrolledHook,
271    \MediaWiki\Hook\MediaWikiPerformActionHook,
272    \MediaWiki\Hook\MediaWikiServicesHook,
273    \MediaWiki\Hook\MimeMagicGuessFromContentHook,
274    \MediaWiki\Hook\MimeMagicImproveFromExtensionHook,
275    \MediaWiki\Hook\MimeMagicInitHook,
276    \MediaWiki\Hook\ModifyExportQueryHook,
277    \MediaWiki\Hook\MovePageCheckPermissionsHook,
278    \MediaWiki\Hook\MovePageIsValidMoveHook,
279    \MediaWiki\Hook\NamespaceIsMovableHook,
280    \MediaWiki\Hook\NewPagesLineEndingHook,
281    \MediaWiki\Hook\OldChangesListRecentChangesLineHook,
282    \MediaWiki\Hook\OpenSearchUrlsHook,
283    \MediaWiki\Hook\OtherAutoblockLogLinkHook,
284    \MediaWiki\Hook\OtherBlockLogLinkHook,
285    \MediaWiki\Output\Hook\OutputPageAfterGetHeadLinksArrayHook,
286    \MediaWiki\Output\Hook\OutputPageBeforeHTMLHook,
287    \MediaWiki\Output\Hook\OutputPageBodyAttributesHook,
288    \MediaWiki\Output\Hook\OutputPageCheckLastModifiedHook,
289    \MediaWiki\Output\Hook\OutputPageMakeCategoryLinksHook,
290    \MediaWiki\Output\Hook\OutputPageParserOutputHook,
291    \MediaWiki\Output\Hook\OutputPageRenderCategoryLinkHook,
292    \MediaWiki\Hook\PageHistoryBeforeListHook,
293    \MediaWiki\Hook\PageHistoryLineEndingHook,
294    \MediaWiki\Hook\PageHistoryPager__doBatchLookupsHook,
295    \MediaWiki\Hook\PageHistoryPager__getQueryInfoHook,
296    \MediaWiki\Hook\PageMoveCompleteHook,
297    \MediaWiki\Hook\PageMoveCompletingHook,
298    \MediaWiki\Hook\PageRenderingHashHook,
299    \MediaWiki\Hook\ParserAfterParseHook,
300    \MediaWiki\Hook\ParserAfterTidyHook,
301    \MediaWiki\Hook\ParserBeforeInternalParseHook,
302    \MediaWiki\Hook\ParserBeforePreprocessHook,
303    \MediaWiki\Hook\ParserCacheSaveCompleteHook,
304    \MediaWiki\Hook\ParserClearStateHook,
305    \MediaWiki\Hook\ParserClonedHook,
306    \MediaWiki\Hook\ParserFetchTemplateDataHook,
307    \MediaWiki\Hook\ParserFirstCallInitHook,
308    \MediaWiki\Hook\ParserGetVariableValueSwitchHook,
309    \MediaWiki\Hook\ParserGetVariableValueTsHook,
310    \MediaWiki\Hook\ParserLimitReportFormatHook,
311    \MediaWiki\Hook\ParserLimitReportPrepareHook,
312    \MediaWiki\Hook\ParserLogLinterDataHook,
313    \MediaWiki\Hook\ParserMakeImageParamsHook,
314    \MediaWiki\Hook\ParserModifyImageHTMLHook,
315    \MediaWiki\Hook\ParserOptionsRegisterHook,
316    \MediaWiki\Hook\ParserOutputPostCacheTransformHook,
317    \MediaWiki\Hook\ParserPreSaveTransformCompleteHook,
318    \MediaWiki\Hook\ParserTestGlobalsHook,
319    \MediaWiki\Hook\PasswordPoliciesForUserHook,
320    \MediaWiki\Hook\PostLoginRedirectHook,
321    \MediaWiki\Hook\PreferencesGetIconHook,
322    \MediaWiki\Hook\PreferencesGetLayoutHook,
323    \MediaWiki\Hook\PreferencesGetLegendHook,
324    \MediaWiki\Hook\PrefsEmailAuditHook,
325    \MediaWiki\Hook\ProtectionForm__buildFormHook,
326    \MediaWiki\Hook\ProtectionForm__saveHook,
327    \MediaWiki\Hook\ProtectionForm__showLogExtractHook,
328    \MediaWiki\Hook\ProtectionFormAddFormFieldsHook,
329    \MediaWiki\Hook\RandomPageQueryHook,
330    \MediaWiki\Hook\RawPageViewBeforeOutputHook,
331    \MediaWiki\Hook\RecentChangesPurgeRowsHook,
332    \MediaWiki\Hook\RecentChange_saveHook,
333    \MediaWiki\Hook\RejectParserCacheValueHook,
334    \MediaWiki\Hook\RequestContextCreateSkinHook,
335    \MediaWiki\Hook\SelfLinkBeginHook,
336    \MediaWiki\Hook\SendWatchlistEmailNotificationHook,
337    \MediaWiki\Hook\SetupAfterCacheHook,
338    \MediaWiki\Hook\ShortPagesQueryHook,
339    \MediaWiki\Hook\SidebarBeforeOutputHook,
340    \MediaWiki\Hook\SiteNoticeAfterHook,
341    \MediaWiki\Hook\SiteNoticeBeforeHook,
342    \MediaWiki\Hook\SkinAddFooterLinksHook,
343    \MediaWiki\Hook\SkinAfterBottomScriptsHook,
344    \MediaWiki\Hook\SkinAfterContentHook,
345    \MediaWiki\Hook\SkinBuildSidebarHook,
346    \MediaWiki\Hook\SkinCopyrightFooterHook,
347    \MediaWiki\Hook\SkinCopyrightFooterMessageHook,
348    \MediaWiki\Hook\SkinEditSectionLinksHook,
349    \MediaWiki\Hook\SkinPreloadExistenceHook,
350    \MediaWiki\Hook\SkinSubPageSubtitleHook,
351    \MediaWiki\Hook\SkinTemplateGetLanguageLinkHook,
352    \MediaWiki\Hook\SkinTemplateNavigation__UniversalHook,
353    \MediaWiki\Hook\SoftwareInfoHook,
354    \MediaWiki\Hook\SpecialBlockModifyFormFieldsHook,
355    \MediaWiki\Hook\SpecialContributionsBeforeMainOutputHook,
356    \MediaWiki\Hook\SpecialContributions__formatRow__flagsHook,
357    \MediaWiki\Hook\SpecialCreateAccountBenefitsHook,
358    \MediaWiki\Hook\SpecialExportGetExtraPagesHook,
359    \MediaWiki\Hook\SpecialContributions__getForm__filtersHook,
360    \MediaWiki\Hook\SpecialListusersDefaultQueryHook,
361    \MediaWiki\Hook\SpecialListusersFormatRowHook,
362    \MediaWiki\Hook\SpecialListusersHeaderFormHook,
363    \MediaWiki\Hook\SpecialListusersHeaderHook,
364    \MediaWiki\Hook\SpecialListusersQueryInfoHook,
365    \MediaWiki\Hook\SpecialLogAddLogSearchRelationsHook,
366    \MediaWiki\Hook\SpecialMovepageAfterMoveHook,
367    \MediaWiki\Hook\SpecialMuteModifyFormFieldsHook,
368    \MediaWiki\Hook\SpecialNewpagesConditionsHook,
369    \MediaWiki\Hook\SpecialNewPagesFiltersHook,
370    \MediaWiki\Hook\SpecialPrefixIndexGetFormFiltersHook,
371    \MediaWiki\Hook\SpecialPrefixIndexQueryHook,
372    \MediaWiki\Hook\SpecialRandomGetRandomTitleHook,
373    \MediaWiki\Hook\SpecialRecentChangesPanelHook,
374    \MediaWiki\Hook\SpecialResetTokensTokensHook,
375    \MediaWiki\Hook\SpecialSearchCreateLinkHook,
376    \MediaWiki\Hook\SpecialSearchGoResultHook,
377    \MediaWiki\Hook\SpecialSearchNogomatchHook,
378    \MediaWiki\Hook\SpecialSearchProfilesHook,
379    \MediaWiki\Hook\SpecialSearchResultsAppendHook,
380    \MediaWiki\Hook\SpecialSearchResultsHook,
381    \MediaWiki\Hook\SpecialSearchResultsPrependHook,
382    \MediaWiki\Hook\SpecialSearchSetupEngineHook,
383    \MediaWiki\Hook\SpecialStatsAddExtraHook,
384    \MediaWiki\Hook\SpecialTrackingCategories__generateCatLinkHook,
385    \MediaWiki\Hook\SpecialTrackingCategories__preprocessHook,
386    \MediaWiki\Hook\SpecialUploadCompleteHook,
387    \MediaWiki\Hook\SpecialVersionVersionUrlHook,
388    \MediaWiki\Hook\SpecialWatchlistGetNonRevisionTypesHook,
389    \MediaWiki\Hook\SpecialWhatLinksHereQueryHook,
390    \MediaWiki\Hook\TestCanonicalRedirectHook,
391    \MediaWiki\Hook\ThumbnailBeforeProduceHTMLHook,
392    \MediaWiki\Hook\TempUserCreatedRedirectHook,
393    \MediaWiki\Hook\TitleExistsHook,
394    \MediaWiki\Hook\TitleGetEditNoticesHook,
395    \MediaWiki\Hook\TitleGetRestrictionTypesHook,
396    \MediaWiki\Hook\TitleIsAlwaysKnownHook,
397    \MediaWiki\Hook\TitleIsMovableHook,
398    \MediaWiki\Hook\TitleMoveHook,
399    \MediaWiki\Hook\TitleMoveStartingHook,
400    \MediaWiki\Hook\UnblockUserCompleteHook,
401    \MediaWiki\Hook\UnblockUserHook,
402    \MediaWiki\Hook\UndeleteForm__showHistoryHook,
403    \MediaWiki\Hook\UndeleteForm__showRevisionHook,
404    \MediaWiki\Hook\UndeletePageToolLinksHook,
405    \MediaWiki\Hook\UnitTestsAfterDatabaseSetupHook,
406    \MediaWiki\Hook\UnitTestsBeforeDatabaseTeardownHook,
407    \MediaWiki\Hook\UnitTestsListHook,
408    \MediaWiki\Hook\UnwatchArticleCompleteHook,
409    \MediaWiki\Hook\UnwatchArticleHook,
410    \MediaWiki\Hook\UpdateUserMailerFormattedPageStatusHook,
411    \MediaWiki\Hook\UploadCompleteHook,
412    \MediaWiki\Hook\UploadCreateFromRequestHook,
413    \MediaWiki\Hook\UploadFormInitDescriptorHook,
414    \MediaWiki\Hook\UploadFormSourceDescriptorsHook,
415    \MediaWiki\Hook\UploadForm_BeforeProcessingHook,
416    \MediaWiki\Hook\UploadForm_getInitialPageTextHook,
417    \MediaWiki\Hook\UploadForm_initialHook,
418    \MediaWiki\Hook\UploadStashFileHook,
419    \MediaWiki\Hook\UploadVerifyFileHook,
420    \MediaWiki\Hook\UploadVerifyUploadHook,
421    \MediaWiki\Hook\UserEditCountUpdateHook,
422    \MediaWiki\Hook\UserGetLanguageObjectHook,
423    \MediaWiki\Hook\UserLoginCompleteHook,
424    \MediaWiki\Hook\UserLogoutCompleteHook,
425    \MediaWiki\Hook\UserMailerChangeReturnPathHook,
426    \MediaWiki\Hook\UserMailerSplitToHook,
427    \MediaWiki\Hook\UserMailerTransformContentHook,
428    \MediaWiki\Hook\UserMailerTransformMessageHook,
429    \MediaWiki\Hook\UsersPagerDoBatchLookupsHook,
430    \MediaWiki\Hook\UserToolLinksEditHook,
431    \MediaWiki\Hook\ValidateExtendedMetadataCacheHook,
432    \MediaWiki\Hook\WantedPages__getQueryInfoHook,
433    \MediaWiki\Hook\WatchArticleCompleteHook,
434    \MediaWiki\Hook\WatchArticleHook,
435    \MediaWiki\Hook\WatchedItemQueryServiceExtensionsHook,
436    \MediaWiki\Hook\WatchlistEditorBeforeFormRenderHook,
437    \MediaWiki\Hook\WatchlistEditorBuildRemoveLineHook,
438    \MediaWiki\Hook\WebRequestPathInfoRouterHook,
439    \MediaWiki\Hook\WebResponseSetCookieHook,
440    \MediaWiki\Hook\WhatLinksHerePropsHook,
441    \MediaWiki\Hook\WikiExporter__dumpStableQueryHook,
442    \MediaWiki\Hook\XmlDumpWriterOpenPageHook,
443    \MediaWiki\Hook\XmlDumpWriterWriteRevisionHook,
444    \MediaWiki\Installer\Hook\LoadExtensionSchemaUpdatesHook,
445    \MediaWiki\Interwiki\Hook\InterwikiLoadPrefixHook,
446    \MediaWiki\Languages\Hook\LanguageGetTranslatedLanguageNamesHook,
447    \MediaWiki\Languages\Hook\Language__getMessagesFileNameHook,
448    \MediaWiki\Linker\Hook\LinkerGenerateRollbackLinkHook,
449    \MediaWiki\Linker\Hook\HtmlPageLinkRendererBeginHook,
450    \MediaWiki\Linker\Hook\HtmlPageLinkRendererEndHook,
451    \MediaWiki\Page\Hook\ArticleConfirmDeleteHook,
452    \MediaWiki\Page\Hook\ArticleDeleteAfterSuccessHook,
453    \MediaWiki\Page\Hook\ArticleDeleteCompleteHook,
454    \MediaWiki\Page\Hook\ArticleDeleteHook,
455    \MediaWiki\Page\Hook\ArticleFromTitleHook,
456    \MediaWiki\Page\Hook\ArticlePageDataAfterHook,
457    \MediaWiki\Page\Hook\ArticlePageDataBeforeHook,
458    \MediaWiki\Page\Hook\ArticleParserOptionsHook,
459    \MediaWiki\Page\Hook\ArticleProtectCompleteHook,
460    \MediaWiki\Page\Hook\ArticleProtectHook,
461    \MediaWiki\Page\Hook\ArticlePurgeHook,
462    \MediaWiki\Page\Hook\ArticleRevisionViewCustomHook,
463    \MediaWiki\Page\Hook\ArticleShowPatrolFooterHook,
464    \MediaWiki\Page\Hook\ArticleUndeleteHook,
465    \MediaWiki\Page\Hook\ArticleViewFooterHook,
466    \MediaWiki\Page\Hook\ArticleViewHeaderHook,
467    \MediaWiki\Page\Hook\ArticleViewRedirectHook,
468    \MediaWiki\Page\Hook\Article__MissingArticleConditionsHook,
469    \MediaWiki\Page\Hook\BeforeDisplayNoArticleTextHook,
470    \MediaWiki\Page\Hook\CategoryAfterPageAddedHook,
471    \MediaWiki\Page\Hook\CategoryAfterPageRemovedHook,
472    \MediaWiki\Page\Hook\CategoryPageViewHook,
473    \MediaWiki\Page\Hook\DisplayOldSubtitleHook,
474    \MediaWiki\Page\Hook\ImageOpenShowImageInlineBeforeHook,
475    \MediaWiki\Page\Hook\ImagePageAfterImageLinksHook,
476    \MediaWiki\Page\Hook\ImagePageFileHistoryLineHook,
477    \MediaWiki\Page\Hook\ImagePageFindFileHook,
478    \MediaWiki\Page\Hook\ImagePageShowTOCHook,
479    \MediaWiki\Page\Hook\IsFileCacheableHook,
480    \MediaWiki\Page\Hook\OpportunisticLinksUpdateHook,
481    \MediaWiki\Page\Hook\PageDeleteCompleteHook,
482    \MediaWiki\Page\Hook\PageDeleteHook,
483    \MediaWiki\Page\Hook\PageDeletionDataUpdatesHook,
484    \MediaWiki\Page\Hook\PageUndeleteCompleteHook,
485    \MediaWiki\Page\Hook\PageUndeleteHook,
486    \MediaWiki\Page\Hook\PageViewUpdatesHook,
487    \MediaWiki\Page\Hook\RevisionFromEditCompleteHook,
488    \MediaWiki\Page\Hook\RevisionUndeletedHook,
489    \MediaWiki\Page\Hook\RollbackCompleteHook,
490    \MediaWiki\Page\Hook\ShowMissingArticleHook,
491    \MediaWiki\Page\Hook\WikiPageDeletionUpdatesHook,
492    \MediaWiki\Page\Hook\WikiPageFactoryHook,
493    \MediaWiki\Permissions\Hook\PermissionErrorAuditHook,
494    \MediaWiki\Permissions\Hook\GetUserPermissionsErrorsExpensiveHook,
495    \MediaWiki\Permissions\Hook\GetUserPermissionsErrorsHook,
496    \MediaWiki\Permissions\Hook\TitleQuickPermissionsHook,
497    \MediaWiki\Permissions\Hook\TitleReadWhitelistHook,
498    \MediaWiki\Permissions\Hook\UserCanHook,
499    \MediaWiki\Permissions\Hook\UserGetAllRightsHook,
500    \MediaWiki\Permissions\Hook\UserGetRightsHook,
501    \MediaWiki\Permissions\Hook\UserGetRightsRemoveHook,
502    \MediaWiki\Permissions\Hook\UserIsBlockedFromHook,
503    \MediaWiki\Permissions\Hook\UserIsEveryoneAllowedHook,
504    \MediaWiki\Preferences\Hook\GetPreferencesHook,
505    \MediaWiki\Preferences\Hook\PreferencesFormPreSaveHook,
506    \MediaWiki\RenameUser\Hook\RenameUserAbortHook,
507    \MediaWiki\RenameUser\Hook\RenameUserCompleteHook,
508    \MediaWiki\RenameUser\Hook\RenameUserPreRenameHook,
509    \MediaWiki\RenameUser\Hook\RenameUserSQLHook,
510    \MediaWiki\RenameUser\Hook\RenameUserWarningHook,
511    \MediaWiki\Rest\Hook\SearchResultProvideDescriptionHook,
512    \MediaWiki\Revision\Hook\ContentHandlerDefaultModelForHook,
513    \MediaWiki\Revision\Hook\RevisionRecordInsertedHook,
514    \MediaWiki\Search\Hook\PrefixSearchBackendHook,
515    \MediaWiki\Search\Hook\PrefixSearchExtractNamespaceHook,
516    \MediaWiki\Search\Hook\SearchableNamespacesHook,
517    \MediaWiki\Search\Hook\SearchAfterNoDirectMatchHook,
518    \MediaWiki\Search\Hook\SearchGetNearMatchBeforeHook,
519    \MediaWiki\Search\Hook\SearchGetNearMatchCompleteHook,
520    \MediaWiki\Search\Hook\SearchGetNearMatchHook,
521    \MediaWiki\Search\Hook\SearchIndexFieldsHook,
522    \MediaWiki\Search\Hook\SearchResultInitFromTitleHook,
523    \MediaWiki\Search\Hook\SearchResultProvideThumbnailHook,
524    \MediaWiki\Search\Hook\SearchResultsAugmentHook,
525    \MediaWiki\Search\Hook\ShowSearchHitHook,
526    \MediaWiki\Search\Hook\ShowSearchHitTitleHook,
527    \MediaWiki\Search\Hook\SpecialSearchPowerBoxHook,
528    \MediaWiki\Search\Hook\SpecialSearchProfileFormHook,
529    \MediaWiki\Session\Hook\SessionCheckInfoHook,
530    \MediaWiki\Session\Hook\SessionMetadataHook,
531    \MediaWiki\Shell\Hook\WfShellWikiCmdHook,
532    \MediaWiki\Skins\Hook\SkinAfterPortletHook,
533    \MediaWiki\Skins\Hook\SkinPageReadyConfigHook,
534    \MediaWiki\SpecialPage\Hook\AuthChangeFormFieldsHook,
535    \MediaWiki\SpecialPage\Hook\ChangeAuthenticationDataAuditHook,
536    \MediaWiki\SpecialPage\Hook\ChangesListSpecialPageQueryHook,
537    \MediaWiki\SpecialPage\Hook\ChangesListSpecialPageStructuredFiltersHook,
538    \MediaWiki\SpecialPage\Hook\RedirectSpecialArticleRedirectParamsHook,
539    \MediaWiki\SpecialPage\Hook\SpecialPageAfterExecuteHook,
540    \MediaWiki\SpecialPage\Hook\SpecialPageBeforeExecuteHook,
541    \MediaWiki\SpecialPage\Hook\SpecialPageBeforeFormDisplayHook,
542    \MediaWiki\SpecialPage\Hook\SpecialPage_initListHook,
543    \MediaWiki\SpecialPage\Hook\WgQueryPagesHook,
544    \MediaWiki\Storage\Hook\ArticleEditUpdateNewTalkHook,
545    \MediaWiki\Storage\Hook\ArticlePrepareTextForEditHook,
546    \MediaWiki\Storage\Hook\BeforeRevertedTagUpdateHook,
547    \MediaWiki\Storage\Hook\MultiContentSaveHook,
548    \MediaWiki\Storage\Hook\PageContentSaveHook,
549    \MediaWiki\Storage\Hook\PageSaveCompleteHook,
550    \MediaWiki\Storage\Hook\ParserOutputStashForEditHook,
551    \MediaWiki\Storage\Hook\RevisionDataUpdatesHook,
552    \MediaWiki\User\Hook\AutopromoteConditionHook,
553    \MediaWiki\User\Hook\ConfirmEmailCompleteHook,
554    \MediaWiki\User\Hook\EmailConfirmedHook,
555    \MediaWiki\User\Hook\GetAutoPromoteGroupsHook,
556    \MediaWiki\User\Hook\InvalidateEmailCompleteHook,
557    \MediaWiki\User\Hook\IsValidPasswordHook,
558    \MediaWiki\User\Hook\PingLimiterHook,
559    \MediaWiki\User\Hook\SpecialPasswordResetOnSubmitHook,
560    \MediaWiki\User\Hook\UserAddGroupHook,
561    \MediaWiki\User\Hook\UserArrayFromResultHook,
562    \MediaWiki\User\Hook\UserCanSendEmailHook,
563    \MediaWiki\User\Hook\UserClearNewTalkNotificationHook,
564    \MediaWiki\User\Hook\UserEffectiveGroupsHook,
565    \MediaWiki\User\Hook\UserGetDefaultOptionsHook,
566    \MediaWiki\User\Hook\UserGetEmailAuthenticationTimestampHook,
567    \MediaWiki\User\Hook\UserGetEmailHook,
568    \MediaWiki\User\Hook\UserGetReservedNamesHook,
569    \MediaWiki\User\Hook\UserGroupsChangedHook,
570    \MediaWiki\User\Hook\UserIsBlockedGloballyHook,
571    \MediaWiki\User\Hook\UserIsBotHook,
572    \MediaWiki\User\Hook\UserIsLockedHook,
573    \MediaWiki\User\Hook\UserLoadAfterLoadFromSessionHook,
574    \MediaWiki\User\Hook\UserLoadDefaultsHook,
575    \MediaWiki\User\Hook\UserLogoutHook,
576    \MediaWiki\User\Hook\UserPrivilegedGroupsHook,
577    \MediaWiki\User\Hook\UserRemoveGroupHook,
578    \MediaWiki\User\Hook\UserSaveSettingsHook,
579    \MediaWiki\User\Hook\UserSendConfirmationMailHook,
580    \MediaWiki\User\Hook\UserSetEmailAuthenticationTimestampHook,
581    \MediaWiki\User\Hook\UserSetEmailHook,
582    \MediaWiki\User\Hook\User__mailPasswordInternalHook,
583    \MediaWiki\User\Options\Hook\LoadUserOptionsHook,
584    \MediaWiki\User\Options\Hook\SaveUserOptionsHook,
585    \MediaWiki\User\Options\Hook\ConditionalDefaultOptionsAddConditionHook
586{
587    /** @var HookContainer */
588    private $container;
589
590    public function __construct( HookContainer $container ) {
591        $this->container = $container;
592    }
593
594    public function onAbortAutoblock( $autoblockip, $block ) {
595        return $this->container->run(
596            'AbortAutoblock',
597            [ $autoblockip, $block ]
598        );
599    }
600
601    public function onAbortDiffCache( $diffEngine ) {
602        return $this->container->run(
603            'AbortDiffCache',
604            [ $diffEngine ]
605        );
606    }
607
608    public function onAbortEmailNotification( $editor, $title, $rc ) {
609        return $this->container->run(
610            'AbortEmailNotification',
611            [ $editor, $title, $rc ]
612        );
613    }
614
615    public function onAbortTalkPageEmailNotification( $targetUser, $title ) {
616        return $this->container->run(
617            'AbortTalkPageEmailNotification',
618            [ $targetUser, $title ]
619        );
620    }
621
622    public function onActionBeforeFormDisplay( $name, $form, $article ) {
623        return $this->container->run(
624            'ActionBeforeFormDisplay',
625            [ $name, $form, $article ]
626        );
627    }
628
629    public function onActionModifyFormFields( $name, &$fields, $article ) {
630        return $this->container->run(
631            'ActionModifyFormFields',
632            [ $name, &$fields, $article ]
633        );
634    }
635
636    public function onAddNewAccount( $user, $byEmail ) {
637        return $this->container->run(
638            'AddNewAccount',
639            [ $user, $byEmail ]
640        );
641    }
642
643    public function onAfterBuildFeedLinks( &$feedLinks ) {
644        return $this->container->run(
645            'AfterBuildFeedLinks',
646            [ &$feedLinks ]
647        );
648    }
649
650    public function onAfterFinalPageOutput( $output ): void {
651        $this->container->run(
652            'AfterFinalPageOutput',
653            [ $output ],
654            [ 'abortable' => false ]
655        );
656    }
657
658    public function onAfterImportPage( $title, $foreignTitle, $revCount,
659        $sRevCount, $pageInfo
660    ) {
661        return $this->container->run(
662            'AfterImportPage',
663            [ $title, $foreignTitle, $revCount, $sRevCount, $pageInfo ]
664        );
665    }
666
667    public function onAfterParserFetchFileAndTitle( $parser, $ig, &$html ) {
668        return $this->container->run(
669            'AfterParserFetchFileAndTitle',
670            [ $parser, $ig, &$html ]
671        );
672    }
673
674    public function onAlternateEdit( $editPage ) {
675        return $this->container->run(
676            'AlternateEdit',
677            [ $editPage ]
678        );
679    }
680
681    public function onAlternateEditPreview( $editPage, &$content, &$previewHTML,
682        &$parserOutput
683    ) {
684        return $this->container->run(
685            'AlternateEditPreview',
686            [ $editPage, &$content, &$previewHTML, &$parserOutput ]
687        );
688    }
689
690    public function onAlternateUserMailer( $headers, $to, $from, $subject, $body ) {
691        return $this->container->run(
692            'AlternateUserMailer',
693            [ $headers, $to, $from, $subject, $body ]
694        );
695    }
696
697    public function onAncientPagesQuery( &$tables, &$conds, &$joinConds ) {
698        return $this->container->run(
699            'AncientPagesQuery',
700            [ &$tables, &$conds, &$joinConds ]
701        );
702    }
703
704    public function onApiBeforeMain( &$main ) {
705        return $this->container->run(
706            'ApiBeforeMain',
707            [ &$main ]
708        );
709    }
710
711    public function onArticleConfirmDelete( $article, $output, &$reason ) {
712        return $this->container->run(
713            'ArticleConfirmDelete',
714            [ $article, $output, &$reason ]
715        );
716    }
717
718    public function onArticleContentOnDiff( $diffEngine, $output ) {
719        return $this->container->run(
720            'ArticleContentOnDiff',
721            [ $diffEngine, $output ]
722        );
723    }
724
725    public function onArticleDelete( $wikiPage, $user, &$reason, &$error, &$status,
726        $suppress
727    ) {
728        return $this->container->run(
729            'ArticleDelete',
730            [ $wikiPage, $user, &$reason, &$error, &$status, $suppress ]
731        );
732    }
733
734    public function onArticleDeleteAfterSuccess( $title, $outputPage ) {
735        return $this->container->run(
736            'ArticleDeleteAfterSuccess',
737            [ $title, $outputPage ]
738        );
739    }
740
741    public function onArticleDeleteComplete( $wikiPage, $user, $reason, $id,
742        $content, $logEntry, $archivedRevisionCount
743    ) {
744        return $this->container->run(
745            'ArticleDeleteComplete',
746            [ $wikiPage, $user, $reason, $id, $content, $logEntry,
747                $archivedRevisionCount ]
748        );
749    }
750
751    public function onArticleEditUpdateNewTalk( $wikiPage, $recipient ) {
752        return $this->container->run(
753            'ArticleEditUpdateNewTalk',
754            [ $wikiPage, $recipient ]
755        );
756    }
757
758    public function onArticleFromTitle( $title, &$article, $context ) {
759        return $this->container->run(
760            'ArticleFromTitle',
761            [ $title, &$article, $context ]
762        );
763    }
764
765    public function onArticleMergeComplete( $targetTitle, $destTitle ) {
766        return $this->container->run(
767            'ArticleMergeComplete',
768            [ $targetTitle, $destTitle ]
769        );
770    }
771
772    public function onArticlePageDataAfter( $wikiPage, &$row ) {
773        return $this->container->run(
774            'ArticlePageDataAfter',
775            [ $wikiPage, &$row ]
776        );
777    }
778
779    public function onArticlePageDataBefore( $wikiPage, &$fields, &$tables,
780        &$joinConds
781    ) {
782        return $this->container->run(
783            'ArticlePageDataBefore',
784            [ $wikiPage, &$fields, &$tables, &$joinConds ]
785        );
786    }
787
788    public function onArticleParserOptions( Article $article, ParserOptions $popts ) {
789        return $this->container->run(
790            'ArticleParserOptions',
791            [ $article, $popts ]
792        );
793    }
794
795    public function onArticlePrepareTextForEdit( $wikiPage, $popts ) {
796        return $this->container->run(
797            'ArticlePrepareTextForEdit',
798            [ $wikiPage, $popts ]
799        );
800    }
801
802    public function onArticleProtect( $wikiPage, $user, $protect, $reason ) {
803        return $this->container->run(
804            'ArticleProtect',
805            [ $wikiPage, $user, $protect, $reason ]
806        );
807    }
808
809    public function onArticleProtectComplete( $wikiPage, $user, $protect, $reason ) {
810        return $this->container->run(
811            'ArticleProtectComplete',
812            [ $wikiPage, $user, $protect, $reason ]
813        );
814    }
815
816    public function onArticlePurge( $wikiPage ) {
817        return $this->container->run(
818            'ArticlePurge',
819            [ $wikiPage ]
820        );
821    }
822
823    public function onArticleRevisionViewCustom( $revision, $title, $oldid,
824        $output
825    ) {
826        return $this->container->run(
827            'ArticleRevisionViewCustom',
828            [ $revision, $title, $oldid, $output ]
829        );
830    }
831
832    public function onArticleRevisionVisibilitySet( $title, $ids,
833        $visibilityChangeMap
834    ) {
835        return $this->container->run(
836            'ArticleRevisionVisibilitySet',
837            [ $title, $ids, $visibilityChangeMap ]
838        );
839    }
840
841    public function onArticleShowPatrolFooter( $article ) {
842        return $this->container->run(
843            'ArticleShowPatrolFooter',
844            [ $article ]
845        );
846    }
847
848    public function onArticleUndelete( $title, $create, $comment, $oldPageId,
849        $restoredPages
850    ) {
851        return $this->container->run(
852            'ArticleUndelete',
853            [ $title, $create, $comment, $oldPageId, $restoredPages ]
854        );
855    }
856
857    public function onArticleUpdateBeforeRedirect( $article, &$sectionanchor,
858        &$extraq
859    ) {
860        return $this->container->run(
861            'ArticleUpdateBeforeRedirect',
862            [ $article, &$sectionanchor, &$extraq ]
863        );
864    }
865
866    public function onArticleViewFooter( $article, $patrolFooterShown ) {
867        return $this->container->run(
868            'ArticleViewFooter',
869            [ $article, $patrolFooterShown ]
870        );
871    }
872
873    public function onArticleViewHeader( $article, &$outputDone, &$pcache ) {
874        return $this->container->run(
875            'ArticleViewHeader',
876            [ $article, &$outputDone, &$pcache ]
877        );
878    }
879
880    public function onArticleViewRedirect( $article ) {
881        return $this->container->run(
882            'ArticleViewRedirect',
883            [ $article ]
884        );
885    }
886
887    public function onArticle__MissingArticleConditions( &$conds, $logTypes ) {
888        return $this->container->run(
889            'Article::MissingArticleConditions',
890            [ &$conds, $logTypes ]
891        );
892    }
893
894    public function onAuthChangeFormFields( $requests, $fieldInfo,
895        &$formDescriptor, $action
896    ) {
897        return $this->container->run(
898            'AuthChangeFormFields',
899            [ $requests, $fieldInfo, &$formDescriptor, $action ]
900        );
901    }
902
903    public function onAuthManagerFilterProviders( array &$providers ): void {
904        $this->container->run(
905            'AuthManagerFilterProviders',
906            [ &$providers ],
907            [ 'abortable' => false ]
908        );
909    }
910
911    public function onAuthManagerLoginAuthenticateAudit( $response, $user,
912        $username, $extraData
913    ) {
914        return $this->container->run(
915            'AuthManagerLoginAuthenticateAudit',
916            [ $response, $user, $username, $extraData ]
917        );
918    }
919
920    public function onAuthManagerVerifyAuthentication(
921        ?UserIdentity $user,
922        AuthenticationResponse &$response,
923        AuthManager $authManager,
924        array $info
925    ): bool {
926        return $this->container->run(
927            'AuthManagerVerifyAuthentication',
928            [ $user, &$response, $authManager, $info ],
929        );
930    }
931
932    public function onAuthPreserveQueryParams( &$params, $options ) {
933        return $this->container->run(
934            'AuthPreserveQueryParams', [ &$params, $options ]
935        );
936    }
937
938    public function onAuthenticationAttemptThrottled( string $type, ?string $username, ?string $ip ) {
939        return $this->container->run(
940            'AuthenticationAttemptThrottled', [ $type, $username, $ip ]
941        );
942    }
943
944    public function onAutopromoteCondition( $type, $args, $user, &$result ) {
945        return $this->container->run(
946            'AutopromoteCondition',
947            [ $type, $args, $user, &$result ]
948        );
949    }
950
951    public function onBacklinkCacheGetConditions( $table, $title, &$conds ) {
952        return $this->container->run(
953            'BacklinkCacheGetConditions',
954            [ $table, $title, &$conds ]
955        );
956    }
957
958    public function onBacklinkCacheGetPrefix( $table, &$prefix ) {
959        return $this->container->run(
960            'BacklinkCacheGetPrefix',
961            [ $table, &$prefix ]
962        );
963    }
964
965    public function onBadImage( $name, &$bad ) {
966        return $this->container->run(
967            'BadImage',
968            [ $name, &$bad ]
969        );
970    }
971
972    public function onBeforeDisplayNoArticleText( $article ) {
973        return $this->container->run(
974            'BeforeDisplayNoArticleText',
975            [ $article ]
976        );
977    }
978
979    public function onBeforeInitialize( $title, $unused, $output, $user, $request,
980        $mediaWiki
981    ) {
982        return $this->container->run(
983            'BeforeInitialize',
984            [ $title, $unused, $output, $user, $request, $mediaWiki ]
985        );
986    }
987
988    public function onBeforePageDisplay( $out, $skin ): void {
989        $this->container->run(
990            'BeforePageDisplay',
991            [ $out, $skin ],
992            [ 'abortable' => false ]
993        );
994    }
995
996    public function onBeforePageRedirect( $out, &$redirect, &$code ) {
997        return $this->container->run(
998            'BeforePageRedirect',
999            [ $out, &$redirect, &$code ]
1000        );
1001    }
1002
1003    public function onBeforeParserFetchFileAndTitle( $parser, $nt, &$options,
1004        &$descQuery
1005    ) {
1006        return $this->container->run(
1007            'BeforeParserFetchFileAndTitle',
1008            [ $parser, $nt, &$options, &$descQuery ]
1009        );
1010    }
1011
1012    public function onBeforeParserFetchTemplateRevisionRecord(
1013        ?LinkTarget $contextTitle, LinkTarget $title,
1014        bool &$skip, ?RevisionRecord &$revRecord
1015    ) {
1016        return $this->container->run(
1017            'BeforeParserFetchTemplateRevisionRecord',
1018            [ $contextTitle, $title, &$skip, &$revRecord ]
1019        );
1020    }
1021
1022    public function onBeforeRevertedTagUpdate( $wikiPage, $user,
1023        $summary, $flags, $revisionRecord, $editResult, &$approved
1024    ): void {
1025        $this->container->run(
1026            'BeforeRevertedTagUpdate',
1027            [ $wikiPage, $user, $summary, $flags, $revisionRecord, $editResult,
1028                &$approved ],
1029            [ 'abortable' => false ]
1030        );
1031    }
1032
1033    public function onBeforeWelcomeCreation( &$welcome_creation_msg,
1034        &$injected_html
1035    ) {
1036        return $this->container->run(
1037            'BeforeWelcomeCreation',
1038            [ &$welcome_creation_msg, &$injected_html ]
1039        );
1040    }
1041
1042    public function onBitmapHandlerCheckImageArea( $image, &$params,
1043        &$checkImageAreaHookResult
1044    ) {
1045        return $this->container->run(
1046            'BitmapHandlerCheckImageArea',
1047            [ $image, &$params, &$checkImageAreaHookResult ]
1048        );
1049    }
1050
1051    public function onBitmapHandlerTransform( $handler, $image, &$scalerParams,
1052        &$mto
1053    ) {
1054        return $this->container->run(
1055            'BitmapHandlerTransform',
1056            [ $handler, $image, &$scalerParams, &$mto ]
1057        );
1058    }
1059
1060    public function onBlockIp( $block, $user, &$reason ) {
1061        return $this->container->run(
1062            'BlockIp',
1063            [ $block, $user, &$reason ]
1064        );
1065    }
1066
1067    public function onBlockIpComplete( $block, $user, $priorBlock ) {
1068        return $this->container->run(
1069            'BlockIpComplete',
1070            [ $block, $user, $priorBlock ]
1071        );
1072    }
1073
1074    public function onBookInformation( $isbn, $output ) {
1075        return $this->container->run(
1076            'BookInformation',
1077            [ $isbn, $output ]
1078        );
1079    }
1080
1081    public function onCanonicalNamespaces( &$namespaces ) {
1082        return $this->container->run(
1083            'CanonicalNamespaces',
1084            [ &$namespaces ]
1085        );
1086    }
1087
1088    public function onCategoryAfterPageAdded( $category, $wikiPage ) {
1089        return $this->container->run(
1090            'CategoryAfterPageAdded',
1091            [ $category, $wikiPage ]
1092        );
1093    }
1094
1095    public function onCategoryAfterPageRemoved( $category, $wikiPage, $id ) {
1096        return $this->container->run(
1097            'CategoryAfterPageRemoved',
1098            [ $category, $wikiPage, $id ]
1099        );
1100    }
1101
1102    public function onCategoryPageView( $catpage ) {
1103        return $this->container->run(
1104            'CategoryPageView',
1105            [ $catpage ]
1106        );
1107    }
1108
1109    public function onCategoryViewer__doCategoryQuery( $type, $res ) {
1110        return $this->container->run(
1111            'CategoryViewer::doCategoryQuery',
1112            [ $type, $res ]
1113        );
1114    }
1115
1116    public function onCategoryViewer__generateLink( $type, $title, $html, &$link ) {
1117        return $this->container->run(
1118            'CategoryViewer::generateLink',
1119            [ $type, $title, $html, &$link ]
1120        );
1121    }
1122
1123    public function onChangeAuthenticationDataAudit( $req, $status ) {
1124        return $this->container->run(
1125            'ChangeAuthenticationDataAudit',
1126            [ $req, $status ]
1127        );
1128    }
1129
1130    public function onChangesListInitRows( $changesList, $rows ) {
1131        return $this->container->run(
1132            'ChangesListInitRows',
1133            [ $changesList, $rows ]
1134        );
1135    }
1136
1137    public function onChangesListInsertArticleLink( $changesList, &$articlelink,
1138        &$s, $rc, $unpatrolled, $watched
1139    ) {
1140        return $this->container->run(
1141            'ChangesListInsertArticleLink',
1142            [ $changesList, &$articlelink, &$s, $rc, $unpatrolled, $watched ]
1143        );
1144    }
1145
1146    public function onChangesListSpecialPageQuery( $name, &$tables, &$fields,
1147        &$conds, &$query_options, &$join_conds, $opts
1148    ) {
1149        return $this->container->run(
1150            'ChangesListSpecialPageQuery',
1151            [ $name, &$tables, &$fields, &$conds, &$query_options,
1152                &$join_conds, $opts ]
1153        );
1154    }
1155
1156    public function onChangesListSpecialPageStructuredFilters( $special ) {
1157        return $this->container->run(
1158            'ChangesListSpecialPageStructuredFilters',
1159            [ $special ]
1160        );
1161    }
1162
1163    public function onChangeTagAfterDelete( $tag, &$status ) {
1164        return $this->container->run(
1165            'ChangeTagAfterDelete',
1166            [ $tag, &$status ]
1167        );
1168    }
1169
1170    public function onChangeTagCanCreate( $tag, $user, &$status ) {
1171        return $this->container->run(
1172            'ChangeTagCanCreate',
1173            [ $tag, $user, &$status ]
1174        );
1175    }
1176
1177    public function onChangeTagCanDelete( $tag, $user, &$status ) {
1178        return $this->container->run(
1179            'ChangeTagCanDelete',
1180            [ $tag, $user, &$status ]
1181        );
1182    }
1183
1184    public function onChangeTagsAfterUpdateTags( $addedTags, $removedTags,
1185        $prevTags, $rc_id, $rev_id, $log_id, $params, $rc, $user
1186    ) {
1187        return $this->container->run(
1188            'ChangeTagsAfterUpdateTags',
1189            [ $addedTags, $removedTags, $prevTags, $rc_id, $rev_id, $log_id,
1190                $params, $rc, $user ]
1191        );
1192    }
1193
1194    public function onChangeTagsAllowedAdd( &$allowedTags, $addTags, $user ) {
1195        return $this->container->run(
1196            'ChangeTagsAllowedAdd',
1197            [ &$allowedTags, $addTags, $user ]
1198        );
1199    }
1200
1201    public function onChangeTagsListActive( &$tags ) {
1202        return $this->container->run(
1203            'ChangeTagsListActive',
1204            [ &$tags ]
1205        );
1206    }
1207
1208    public function onChangeUserGroups( $performer, $user, &$add, &$remove ) {
1209        return $this->container->run(
1210            'ChangeUserGroups',
1211            [ $performer, $user, &$add, &$remove ]
1212        );
1213    }
1214
1215    public function onCollation__factory( $collationName, &$collationObject ) {
1216        return $this->container->run(
1217            'Collation::factory',
1218            [ $collationName, &$collationObject ]
1219        );
1220    }
1221
1222    public function onConfirmEmailComplete( $user ) {
1223        return $this->container->run(
1224            'ConfirmEmailComplete',
1225            [ $user ]
1226        );
1227    }
1228
1229    public function onContentAlterParserOutput( $content, $title, $parserOutput ) {
1230        return $this->container->run(
1231            'ContentAlterParserOutput',
1232            [ $content, $title, $parserOutput ]
1233        );
1234    }
1235
1236    public function onContentGetParserOutput( $content, $title, $revId, $options,
1237        $generateHtml, &$parserOutput
1238    ) {
1239        return $this->container->run(
1240            'ContentGetParserOutput',
1241            [ $content, $title, $revId, $options, $generateHtml, &$parserOutput ]
1242        );
1243    }
1244
1245    public function onContentHandlerDefaultModelFor( $title, &$model ) {
1246        return $this->container->run(
1247            'ContentHandlerDefaultModelFor',
1248            [ $title, &$model ]
1249        );
1250    }
1251
1252    public function onContentHandlerForModelID( $modelName, &$handler ) {
1253        return $this->container->run(
1254            'ContentHandlerForModelID',
1255            [ $modelName, &$handler ]
1256        );
1257    }
1258
1259    public function onContentModelCanBeUsedOn( $contentModel, $title, &$ok ) {
1260        return $this->container->run(
1261            'ContentModelCanBeUsedOn',
1262            [ $contentModel, $title, &$ok ]
1263        );
1264    }
1265
1266    public function onContentSecurityPolicyDefaultSource( &$defaultSrc,
1267        $policyConfig, $mode
1268    ) {
1269        return $this->container->run(
1270            'ContentSecurityPolicyDefaultSource',
1271            [ &$defaultSrc, $policyConfig, $mode ]
1272        );
1273    }
1274
1275    public function onContentSecurityPolicyDirectives( &$directives, $policyConfig,
1276        $mode
1277    ) {
1278        return $this->container->run(
1279            'ContentSecurityPolicyDirectives',
1280            [ &$directives, $policyConfig, $mode ]
1281        );
1282    }
1283
1284    public function onContentSecurityPolicyScriptSource( &$scriptSrc,
1285        $policyConfig, $mode
1286    ) {
1287        return $this->container->run(
1288            'ContentSecurityPolicyScriptSource',
1289            [ &$scriptSrc, $policyConfig, $mode ]
1290        );
1291    }
1292
1293    public function onContribsPager__getQueryInfo( $pager, &$queryInfo ) {
1294        return $this->container->run(
1295            'ContribsPager::getQueryInfo',
1296            [ $pager, &$queryInfo ]
1297        );
1298    }
1299
1300    public function onContribsPager__reallyDoQuery( &$data, $pager, $offset,
1301        $limit, $descending
1302    ) {
1303        return $this->container->run(
1304            'ContribsPager::reallyDoQuery',
1305            [ &$data, $pager, $offset, $limit, $descending ]
1306        );
1307    }
1308
1309    public function onContributeCards( &$cards ): void {
1310        $this->container->run(
1311            'ContributeCards',
1312            [ &$cards ]
1313        );
1314    }
1315
1316    public function onContributionsLineEnding( $page, &$ret, $row, &$classes,
1317        &$attribs
1318    ) {
1319        return $this->container->run(
1320            'ContributionsLineEnding',
1321            [ $page, &$ret, $row, &$classes, &$attribs ]
1322        );
1323    }
1324
1325    public function onContributionsToolLinks( $id, Title $title, array &$tools, SpecialPage $specialPage ) {
1326        return $this->container->run(
1327            'ContributionsToolLinks',
1328            [ $id, $title, &$tools, $specialPage ]
1329        );
1330    }
1331
1332    public function onConvertContent( $content, $toModel, $lossy, &$result ) {
1333        return $this->container->run(
1334            'ConvertContent',
1335            [ $content, $toModel, $lossy, &$result ]
1336        );
1337    }
1338
1339    public function onCustomEditor( $article, $user ) {
1340        return $this->container->run(
1341            'CustomEditor',
1342            [ $article, $user ]
1343        );
1344    }
1345
1346    public function onDeletedContribsPager__reallyDoQuery( &$data, $pager, $offset,
1347        $limit, $descending
1348    ) {
1349        return $this->container->run(
1350            'DeletedContribsPager::reallyDoQuery',
1351            [ &$data, $pager, $offset, $limit, $descending ]
1352        );
1353    }
1354
1355    public function onDeletedContributionsLineEnding( $page, &$ret, $row,
1356        &$classes, &$attribs
1357    ) {
1358        return $this->container->run(
1359            'DeletedContributionsLineEnding',
1360            [ $page, &$ret, $row, &$classes, &$attribs ]
1361        );
1362    }
1363
1364    public function onDeleteUnknownPreferences( &$where, $db ) {
1365        return $this->container->run(
1366            'DeleteUnknownPreferences',
1367            [ &$where, $db ]
1368        );
1369    }
1370
1371    public function onDifferenceEngineAfterLoadNewText( $differenceEngine ) {
1372        return $this->container->run(
1373            'DifferenceEngineAfterLoadNewText',
1374            [ $differenceEngine ]
1375        );
1376    }
1377
1378    public function onTextSlotDiffRendererTablePrefix(
1379        \TextSlotDiffRenderer $textSlotDiffRenderer,
1380        IContextSource $context,
1381        array &$parts
1382    ) {
1383        return $this->container->run(
1384            'TextSlotDiffRendererTablePrefix',
1385            [ $textSlotDiffRenderer, $context, &$parts ]
1386        );
1387    }
1388
1389    public function onDifferenceEngineLoadTextAfterNewContentIsLoaded(
1390        $differenceEngine
1391    ) {
1392        return $this->container->run(
1393            'DifferenceEngineLoadTextAfterNewContentIsLoaded',
1394            [ $differenceEngine ]
1395        );
1396    }
1397
1398    public function onDifferenceEngineMarkPatrolledLink( $differenceEngine,
1399        &$markAsPatrolledLink, $rcid
1400    ) {
1401        return $this->container->run(
1402            'DifferenceEngineMarkPatrolledLink',
1403            [ $differenceEngine, &$markAsPatrolledLink, $rcid ]
1404        );
1405    }
1406
1407    public function onDifferenceEngineMarkPatrolledRCID( &$rcid, $differenceEngine,
1408        $change, $user
1409    ) {
1410        return $this->container->run(
1411            'DifferenceEngineMarkPatrolledRCID',
1412            [ &$rcid, $differenceEngine, $change, $user ]
1413        );
1414    }
1415
1416    public function onDifferenceEngineNewHeader( $differenceEngine, &$newHeader,
1417        $formattedRevisionTools, $nextlink, $rollback, $newminor, $diffOnly, $rdel,
1418        $unhide
1419    ) {
1420        return $this->container->run(
1421            'DifferenceEngineNewHeader',
1422            [ $differenceEngine, &$newHeader, $formattedRevisionTools,
1423                $nextlink, $rollback, $newminor, $diffOnly, $rdel, $unhide ]
1424        );
1425    }
1426
1427    public function onDifferenceEngineOldHeader( $differenceEngine, &$oldHeader,
1428        $prevlink, $oldminor, $diffOnly, $ldel, $unhide
1429    ) {
1430        return $this->container->run(
1431            'DifferenceEngineOldHeader',
1432            [ $differenceEngine, &$oldHeader, $prevlink, $oldminor, $diffOnly,
1433                $ldel, $unhide ]
1434        );
1435    }
1436
1437    public function onDifferenceEngineOldHeaderNoOldRev( &$oldHeader ) {
1438        return $this->container->run(
1439            'DifferenceEngineOldHeaderNoOldRev',
1440            [ &$oldHeader ]
1441        );
1442    }
1443
1444    public function onDifferenceEngineRenderRevisionAddParserOutput(
1445        $differenceEngine, $out, $parserOutput, $wikiPage
1446    ) {
1447        return $this->container->run(
1448            'DifferenceEngineRenderRevisionAddParserOutput',
1449            [ $differenceEngine, $out, $parserOutput, $wikiPage ]
1450        );
1451    }
1452
1453    public function onDifferenceEngineRenderRevisionShowFinalPatrolLink() {
1454        return $this->container->run(
1455            'DifferenceEngineRenderRevisionShowFinalPatrolLink',
1456            []
1457        );
1458    }
1459
1460    public function onDifferenceEngineShowDiff( $differenceEngine ) {
1461        return $this->container->run(
1462            'DifferenceEngineShowDiff',
1463            [ $differenceEngine ]
1464        );
1465    }
1466
1467    public function onDifferenceEngineShowDiffPage( $out ) {
1468        return $this->container->run(
1469            'DifferenceEngineShowDiffPage',
1470            [ $out ]
1471        );
1472    }
1473
1474    public function onDifferenceEngineShowDiffPageMaybeShowMissingRevision(
1475        $differenceEngine
1476    ) {
1477        return $this->container->run(
1478            'DifferenceEngineShowDiffPageMaybeShowMissingRevision',
1479            [ $differenceEngine ]
1480        );
1481    }
1482
1483    public function onDifferenceEngineShowEmptyOldContent( $differenceEngine ) {
1484        return $this->container->run(
1485            'DifferenceEngineShowEmptyOldContent',
1486            [ $differenceEngine ]
1487        );
1488    }
1489
1490    public function onDifferenceEngineViewHeader( $differenceEngine ) {
1491        return $this->container->run(
1492            'DifferenceEngineViewHeader',
1493            [ $differenceEngine ]
1494        );
1495    }
1496
1497    public function onDiffTools( $newRevRecord, &$links, $oldRevRecord, $userIdentity ) {
1498        return $this->container->run(
1499            'DiffTools',
1500            [ $newRevRecord, &$links, $oldRevRecord, $userIdentity ]
1501        );
1502    }
1503
1504    public function onDisplayOldSubtitle( $article, &$oldid ) {
1505        return $this->container->run(
1506            'DisplayOldSubtitle',
1507            [ $article, &$oldid ]
1508        );
1509    }
1510
1511    public function onEditFilter( $editor, $text, $section, &$error, $summary ) {
1512        return $this->container->run(
1513            'EditFilter',
1514            [ $editor, $text, $section, &$error, $summary ]
1515        );
1516    }
1517
1518    public function onEditFilterMergedContent( $context, $content, $status,
1519        $summary, $user, $minoredit
1520    ) {
1521        return $this->container->run(
1522            'EditFilterMergedContent',
1523            [ $context, $content, $status, $summary, $user, $minoredit ]
1524        );
1525    }
1526
1527    public function onEditFormInitialText( $editPage ) {
1528        return $this->container->run(
1529            'EditFormInitialText',
1530            [ $editPage ]
1531        );
1532    }
1533
1534    public function onEditFormPreloadText( &$text, $title ) {
1535        return $this->container->run(
1536            'EditFormPreloadText',
1537            [ &$text, $title ]
1538        );
1539    }
1540
1541    public function onEditPageBeforeConflictDiff( $editor, $out ) {
1542        return $this->container->run(
1543            'EditPageBeforeConflictDiff',
1544            [ $editor, $out ]
1545        );
1546    }
1547
1548    public function onEditPageBeforeEditButtons( $editpage, &$buttons, &$tabindex ) {
1549        return $this->container->run(
1550            'EditPageBeforeEditButtons',
1551            [ $editpage, &$buttons, &$tabindex ]
1552        );
1553    }
1554
1555    public function onEditPageBeforeEditToolbar( &$toolbar ) {
1556        return $this->container->run(
1557            'EditPageBeforeEditToolbar',
1558            [ &$toolbar ]
1559        );
1560    }
1561
1562    public function onEditPageCopyrightWarning( $title, &$msg ) {
1563        return $this->container->run(
1564            'EditPageCopyrightWarning',
1565            [ $title, &$msg ]
1566        );
1567    }
1568
1569    public function onEditPageGetCheckboxesDefinition( $editpage, &$checkboxes ) {
1570        return $this->container->run(
1571            'EditPageGetCheckboxesDefinition',
1572            [ $editpage, &$checkboxes ]
1573        );
1574    }
1575
1576    public function onEditPageGetDiffContent( $editPage, &$newtext ) {
1577        return $this->container->run(
1578            'EditPageGetDiffContent',
1579            [ $editPage, &$newtext ]
1580        );
1581    }
1582
1583    public function onEditPageGetPreviewContent( $editPage, &$content ) {
1584        return $this->container->run(
1585            'EditPageGetPreviewContent',
1586            [ $editPage, &$content ]
1587        );
1588    }
1589
1590    public function onEditPageNoSuchSection( $editpage, &$res ) {
1591        return $this->container->run(
1592            'EditPageNoSuchSection',
1593            [ $editpage, &$res ]
1594        );
1595    }
1596
1597    public function onEditPageTosSummary( $title, &$msg ) {
1598        return $this->container->run(
1599            'EditPageTosSummary',
1600            [ $title, &$msg ]
1601        );
1602    }
1603
1604    public function onEditPage__attemptSave( $editpage_Obj ) {
1605        return $this->container->run(
1606            'EditPage::attemptSave',
1607            [ $editpage_Obj ]
1608        );
1609    }
1610
1611    public function onEditPage__attemptSave_after( $editpage_Obj, $status,
1612        $resultDetails
1613    ) {
1614        return $this->container->run(
1615            'EditPage::attemptSave:after',
1616            [ $editpage_Obj, $status, $resultDetails ]
1617        );
1618    }
1619
1620    public function onEditPage__importFormData( $editpage, $request ) {
1621        return $this->container->run(
1622            'EditPage::importFormData',
1623            [ $editpage, $request ]
1624        );
1625    }
1626
1627    public function onEditPage__showEditForm_fields( $editor, $out ) {
1628        return $this->container->run(
1629            'EditPage::showEditForm:fields',
1630            [ $editor, $out ]
1631        );
1632    }
1633
1634    public function onEditPage__showEditForm_initial( $editor, $out ) {
1635        return $this->container->run(
1636            'EditPage::showEditForm:initial',
1637            [ $editor, $out ]
1638        );
1639    }
1640
1641    public function onEditPage__showReadOnlyForm_initial( $editor, $out ) {
1642        return $this->container->run(
1643            'EditPage::showReadOnlyForm:initial',
1644            [ $editor, $out ]
1645        );
1646    }
1647
1648    public function onEditPage__showStandardInputs_options( $editor, $out,
1649        &$tabindex
1650    ) {
1651        return $this->container->run(
1652            'EditPage::showStandardInputs:options',
1653            [ $editor, $out, &$tabindex ]
1654        );
1655    }
1656
1657    public function onEmailConfirmed( $user, &$confirmed ) {
1658        return $this->container->run(
1659            'EmailConfirmed',
1660            [ $user, &$confirmed ]
1661        );
1662    }
1663
1664    public function onEmailUser( &$to, &$from, &$subject, &$text, &$error ) {
1665        return $this->container->run(
1666            'EmailUser',
1667            [ &$to, &$from, &$subject, &$text, &$error ]
1668        );
1669    }
1670
1671    public function onEmailUserCC( &$to, &$from, &$subject, &$text ) {
1672        return $this->container->run(
1673            'EmailUserCC',
1674            [ &$to, &$from, &$subject, &$text ]
1675        );
1676    }
1677
1678    public function onEmailUserComplete( $to, $from, $subject, $text ) {
1679        return $this->container->run(
1680            'EmailUserComplete',
1681            [ $to, $from, $subject, $text ]
1682        );
1683    }
1684
1685    public function onEmailUserForm( &$form ) {
1686        return $this->container->run(
1687            'EmailUserForm',
1688            [ &$form ]
1689        );
1690    }
1691
1692    public function onEmailUserPermissionsErrors( $user, $editToken, &$hookErr ) {
1693        return $this->container->run(
1694            'EmailUserPermissionsErrors',
1695            [ $user, $editToken, &$hookErr ]
1696        );
1697    }
1698
1699    public function onEmailUserAuthorizeSend( Authority $sender, StatusValue $status ) {
1700        return $this->container->run(
1701            'EmailUserAuthorizeSend',
1702            [ $sender, $status ]
1703        );
1704    }
1705
1706    public function onEmailUserSendEmail(
1707        Authority $from,
1708        MailAddress $fromAddress,
1709        UserEmailContact $to,
1710        MailAddress $toAddress,
1711        string $subject,
1712        string $text,
1713        StatusValue $status
1714    ) {
1715        return $this->container->run(
1716            'EmailUserSendEmail',
1717            [ $from, $fromAddress, $to, $toAddress, $subject, $text, $status ]
1718        );
1719    }
1720
1721    public function onEnhancedChangesListModifyBlockLineData( $changesList, &$data,
1722        $rc
1723    ) {
1724        return $this->container->run(
1725            'EnhancedChangesListModifyBlockLineData',
1726            [ $changesList, &$data, $rc ]
1727        );
1728    }
1729
1730    public function onEnhancedChangesListModifyLineData( $changesList, &$data,
1731        $block, $rc, &$classes, &$attribs
1732    ) {
1733        return $this->container->run(
1734            'EnhancedChangesListModifyLineData',
1735            [ $changesList, &$data, $block, $rc, &$classes, &$attribs ]
1736        );
1737    }
1738
1739    public function onEnhancedChangesList__getLogText( $changesList, &$links,
1740        $block
1741    ) {
1742        return $this->container->run(
1743            'EnhancedChangesList::getLogText',
1744            [ $changesList, &$links, $block ]
1745        );
1746    }
1747
1748    public function onExemptFromAccountCreationThrottle( $ip ) {
1749        return $this->container->run(
1750            'ExemptFromAccountCreationThrottle',
1751            [ $ip ]
1752        );
1753    }
1754
1755    public function onExtensionTypes( &$extTypes ) {
1756        return $this->container->run(
1757            'ExtensionTypes',
1758            [ &$extTypes ]
1759        );
1760    }
1761
1762    public function onFetchChangesList( $user, $skin, &$list, $groups ) {
1763        return $this->container->run(
1764            'FetchChangesList',
1765            [ $user, $skin, &$list, $groups ]
1766        );
1767    }
1768
1769    public function onFileDeleteComplete( $file, $oldimage, $article, $user,
1770        $reason
1771    ) {
1772        return $this->container->run(
1773            'FileDeleteComplete',
1774            [ $file, $oldimage, $article, $user, $reason ]
1775        );
1776    }
1777
1778    public function onFileTransformed( $file, $thumb, $tmpThumbPath, $thumbPath ) {
1779        return $this->container->run(
1780            'FileTransformed',
1781            [ $file, $thumb, $tmpThumbPath, $thumbPath ]
1782        );
1783    }
1784
1785    public function onFileUndeleteComplete( $title, $fileVersions, $user, $reason ) {
1786        return $this->container->run(
1787            'FileUndeleteComplete',
1788            [ $title, $fileVersions, $user, $reason ]
1789        );
1790    }
1791
1792    public function onFileUpload( $file, $reupload, $hasDescription ) {
1793        return $this->container->run(
1794            'FileUpload',
1795            [ $file, $reupload, $hasDescription ]
1796        );
1797    }
1798
1799    public function onFormatAutocomments( &$comment, $pre, $auto, $post, $title,
1800        $local, $wikiId
1801    ) {
1802        return $this->container->run(
1803            'FormatAutocomments',
1804            [ &$comment, $pre, $auto, $post, $title, $local, $wikiId ]
1805        );
1806    }
1807
1808    public function onGalleryGetModes( &$modeArray ) {
1809        return $this->container->run(
1810            'GalleryGetModes',
1811            [ &$modeArray ]
1812        );
1813    }
1814
1815    public function onGetAllBlockActions( &$actions ) {
1816        return $this->container->run(
1817            'GetAllBlockActions',
1818            [ &$actions ],
1819            [ 'abortable' => false ]
1820        );
1821    }
1822
1823    public function onGetAutoPromoteGroups( $user, &$promote ) {
1824        return $this->container->run(
1825            'GetAutoPromoteGroups',
1826            [ $user, &$promote ]
1827        );
1828    }
1829
1830    public function onGetActionName( IContextSource $context, string &$action ): void {
1831        $this->container->run(
1832            'GetActionName',
1833            [ $context, &$action ],
1834            [ 'abortable' => false ]
1835        );
1836    }
1837
1838    public function onGetCacheVaryCookies( $out, &$cookies ) {
1839        return $this->container->run(
1840            'GetCacheVaryCookies',
1841            [ $out, &$cookies ]
1842        );
1843    }
1844
1845    public function onGetCanonicalURL( $title, &$url, $query ) {
1846        return $this->container->run(
1847            'GetCanonicalURL',
1848            [ $title, &$url, $query ]
1849        );
1850    }
1851
1852    public function onGetContentModels( &$models ) {
1853        return $this->container->run(
1854            'GetContentModels',
1855            [ &$models ]
1856        );
1857    }
1858
1859    public function onGetDefaultSortkey( $title, &$sortkey ) {
1860        return $this->container->run(
1861            'GetDefaultSortkey',
1862            [ $title, &$sortkey ]
1863        );
1864    }
1865
1866    public function onGetDifferenceEngine( $context, $old, $new, $refreshCache,
1867        $unhide, &$differenceEngine
1868    ) {
1869        return $this->container->run(
1870            'GetDifferenceEngine',
1871            [ $context, $old, $new, $refreshCache, $unhide,
1872                &$differenceEngine ]
1873        );
1874    }
1875
1876    public function onGetDoubleUnderscoreIDs( &$doubleUnderscoreIDs ) {
1877        return $this->container->run(
1878            'GetDoubleUnderscoreIDs',
1879            [ &$doubleUnderscoreIDs ]
1880        );
1881    }
1882
1883    public function onGetExtendedMetadata( &$combinedMeta, $file, $context,
1884        $single, &$maxCacheTime
1885    ) {
1886        return $this->container->run(
1887            'GetExtendedMetadata',
1888            [ &$combinedMeta, $file, $context, $single, &$maxCacheTime ]
1889        );
1890    }
1891
1892    public function onGetFullURL( $title, &$url, $query ) {
1893        return $this->container->run(
1894            'GetFullURL',
1895            [ $title, &$url, $query ]
1896        );
1897    }
1898
1899    public function onGetHumanTimestamp( &$output, $timestamp, $relativeTo, $user,
1900        $lang
1901    ) {
1902        return $this->container->run(
1903            'GetHumanTimestamp',
1904            [ &$output, $timestamp, $relativeTo, $user, $lang ]
1905        );
1906    }
1907
1908    public function onGetInternalURL( $title, &$url, $query ) {
1909        return $this->container->run(
1910            'GetInternalURL',
1911            [ $title, &$url, $query ]
1912        );
1913    }
1914
1915    public function onGetIP( &$ip ) {
1916        return $this->container->run(
1917            'GetIP',
1918            [ &$ip ]
1919        );
1920    }
1921
1922    public function onGetLangPreferredVariant( &$req ) {
1923        return $this->container->run(
1924            'GetLangPreferredVariant',
1925            [ &$req ]
1926        );
1927    }
1928
1929    public function onGetLinkColours( $linkcolour_ids, &$colours, $title ) {
1930        return $this->container->run(
1931            'GetLinkColours',
1932            [ $linkcolour_ids, &$colours, $title ]
1933        );
1934    }
1935
1936    public function onGetLocalURL( $title, &$url, $query ) {
1937        return $this->container->run(
1938            'GetLocalURL',
1939            [ $title, &$url, $query ]
1940        );
1941    }
1942
1943    public function onGetLocalURL__Article( $title, &$url ) {
1944        return $this->container->run(
1945            'GetLocalURL::Article',
1946            [ $title, &$url ]
1947        );
1948    }
1949
1950    public function onGetLocalURL__Internal( $title, &$url, $query ) {
1951        return $this->container->run(
1952            'GetLocalURL::Internal',
1953            [ $title, &$url, $query ]
1954        );
1955    }
1956
1957    public function onGetLogTypesOnUser( &$types ) {
1958        return $this->container->run(
1959            'GetLogTypesOnUser',
1960            [ &$types ]
1961        );
1962    }
1963
1964    public function onGetMagicVariableIDs( &$variableIDs ) {
1965        return $this->container->run(
1966            'GetMagicVariableIDs',
1967            [ &$variableIDs ]
1968        );
1969    }
1970
1971    public function onGetMetadataVersion( &$version ) {
1972        return $this->container->run(
1973            'GetMetadataVersion',
1974            [ &$version ]
1975        );
1976    }
1977
1978    public function onGetNewMessagesAlert( &$newMessagesAlert, $newtalks, $user,
1979        $out
1980    ) {
1981        return $this->container->run(
1982            'GetNewMessagesAlert',
1983            [ &$newMessagesAlert, $newtalks, $user, $out ]
1984        );
1985    }
1986
1987    public function onGetPreferences( $user, &$preferences ) {
1988        return $this->container->run(
1989            'GetPreferences',
1990            [ $user, &$preferences ]
1991        );
1992    }
1993
1994    public function onGetRelativeTimestamp( &$output, &$diff, $timestamp,
1995        $relativeTo, $user, $lang
1996    ) {
1997        return $this->container->run(
1998            'GetRelativeTimestamp',
1999            [ &$output, &$diff, $timestamp, $relativeTo, $user, $lang ]
2000        );
2001    }
2002
2003    public function onGetSlotDiffRenderer( $contentHandler, &$slotDiffRenderer,
2004        $context
2005    ) {
2006        return $this->container->run(
2007            'GetSlotDiffRenderer',
2008            [ $contentHandler, &$slotDiffRenderer, $context ]
2009        );
2010    }
2011
2012    public function onGetUserBlock( $user, $ip, &$block ) {
2013        return $this->container->run(
2014            'GetUserBlock',
2015            [ $user, $ip, &$block ]
2016        );
2017    }
2018
2019    public function onPermissionErrorAudit(
2020        LinkTarget $title,
2021        UserIdentity $user,
2022        string $action,
2023        string $rigor,
2024        array $errors
2025    ): void {
2026        $this->container->run(
2027            'PermissionErrorAudit',
2028            [ $title, $user, $action, $rigor, $errors ],
2029            [ 'abortable' => false ]
2030        );
2031    }
2032
2033    public function onGetUserPermissionsErrors( $title, $user, $action, &$result ) {
2034        return $this->container->run(
2035            'getUserPermissionsErrors',
2036            [ $title, $user, $action, &$result ]
2037        );
2038    }
2039
2040    public function onGetUserPermissionsErrorsExpensive( $title, $user, $action,
2041        &$result
2042    ) {
2043        return $this->container->run(
2044            'getUserPermissionsErrorsExpensive',
2045            [ $title, $user, $action, &$result ]
2046        );
2047    }
2048
2049    public function onGitViewers( &$extTypes ) {
2050        return $this->container->run(
2051            'GitViewers',
2052            [ &$extTypes ]
2053        );
2054    }
2055
2056    public function onHistoryPageToolLinks( IContextSource $context, LinkRenderer $linkRenderer, array &$links ) {
2057        return $this->container->run(
2058            'HistoryPageToolLinks',
2059            [ $context, $linkRenderer, &$links ]
2060        );
2061    }
2062
2063    public function onHistoryTools( $revRecord, &$links, $prevRevRecord, $userIdentity ) {
2064        return $this->container->run(
2065            'HistoryTools',
2066            [ $revRecord, &$links, $prevRevRecord, $userIdentity ]
2067        );
2068    }
2069
2070    public function onHtmlCacheUpdaterAppendUrls( $title, $mode, &$append ) {
2071        return $this->container->run(
2072            'HtmlCacheUpdaterAppendUrls',
2073            [ $title, $mode, &$append ]
2074        );
2075    }
2076
2077    public function onHtmlCacheUpdaterVaryUrls( $urls, &$append ) {
2078        return $this->container->run(
2079            'HtmlCacheUpdaterVaryUrls',
2080            [ $urls, &$append ]
2081        );
2082    }
2083
2084    public function onHTMLFileCache__useFileCache( $context ) {
2085        return $this->container->run(
2086            'HTMLFileCache::useFileCache',
2087            [ $context ]
2088        );
2089    }
2090
2091    public function onHtmlPageLinkRendererBegin( $linkRenderer, $target, &$text,
2092        &$customAttribs, &$query, &$ret
2093    ) {
2094        return $this->container->run(
2095            'HtmlPageLinkRendererBegin',
2096            [ $linkRenderer, $target, &$text, &$customAttribs, &$query, &$ret ]
2097        );
2098    }
2099
2100    public function onHtmlPageLinkRendererEnd( $linkRenderer, $target, $isKnown,
2101        &$text, &$attribs, &$ret
2102    ) {
2103        return $this->container->run(
2104            'HtmlPageLinkRendererEnd',
2105            [ $linkRenderer, $target, $isKnown, &$text, &$attribs, &$ret ]
2106        );
2107    }
2108
2109    public function onImageBeforeProduceHTML( $linker, &$title, &$file,
2110        &$frameParams, &$handlerParams, &$time, &$res, $parser, &$query, &$widthOption
2111    ) {
2112        return $this->container->run(
2113            'ImageBeforeProduceHTML',
2114            [ $linker, &$title, &$file, &$frameParams, &$handlerParams, &$time,
2115                &$res, $parser, &$query, &$widthOption ]
2116        );
2117    }
2118
2119    public function onImageOpenShowImageInlineBefore( $imagePage, $output ) {
2120        return $this->container->run(
2121            'ImageOpenShowImageInlineBefore',
2122            [ $imagePage, $output ]
2123        );
2124    }
2125
2126    public function onImagePageAfterImageLinks( $imagePage, &$html ) {
2127        return $this->container->run(
2128            'ImagePageAfterImageLinks',
2129            [ $imagePage, &$html ]
2130        );
2131    }
2132
2133    public function onImagePageFileHistoryLine( $imageHistoryList, $file, &$line, &$css ) {
2134        return $this->container->run(
2135            'ImagePageFileHistoryLine',
2136            [ $imageHistoryList, $file, &$line, &$css ]
2137        );
2138    }
2139
2140    public function onImagePageFindFile( $page, &$file, &$displayFile ) {
2141        return $this->container->run(
2142            'ImagePageFindFile',
2143            [ $page, &$file, &$displayFile ]
2144        );
2145    }
2146
2147    public function onImagePageShowTOC( $page, &$toc ) {
2148        return $this->container->run(
2149            'ImagePageShowTOC',
2150            [ $page, &$toc ]
2151        );
2152    }
2153
2154    public function onImgAuthBeforeStream( &$title, &$path, &$name, &$result ) {
2155        return $this->container->run(
2156            'ImgAuthBeforeStream',
2157            [ &$title, &$path, &$name, &$result ]
2158        );
2159    }
2160
2161    public function onImgAuthModifyHeaders( $title, &$headers ) {
2162        return $this->container->run(
2163            'ImgAuthModifyHeaders',
2164            [ $title, &$headers ]
2165        );
2166    }
2167
2168    public function onImportHandleLogItemXMLTag( $reader, $logInfo ) {
2169        return $this->container->run(
2170            'ImportHandleLogItemXMLTag',
2171            [ $reader, $logInfo ]
2172        );
2173    }
2174
2175    public function onImportHandlePageXMLTag( $reader, &$pageInfo ) {
2176        return $this->container->run(
2177            'ImportHandlePageXMLTag',
2178            [ $reader, &$pageInfo ]
2179        );
2180    }
2181
2182    public function onImportHandleRevisionXMLTag( $reader, $pageInfo,
2183        $revisionInfo
2184    ) {
2185        return $this->container->run(
2186            'ImportHandleRevisionXMLTag',
2187            [ $reader, $pageInfo, $revisionInfo ]
2188        );
2189    }
2190
2191    public function onImportHandleContentXMLTag( $reader, $contentInfo ) {
2192        return $this->container->run(
2193            'ImportHandleContentXMLTag',
2194            [ $reader, $contentInfo ] );
2195    }
2196
2197    public function onImportHandleToplevelXMLTag( $reader ) {
2198        return $this->container->run(
2199            'ImportHandleToplevelXMLTag',
2200            [ $reader ]
2201        );
2202    }
2203
2204    public function onImportHandleUnknownUser( $name ) {
2205        return $this->container->run(
2206            'ImportHandleUnknownUser',
2207            [ $name ]
2208        );
2209    }
2210
2211    public function onImportHandleUploadXMLTag( $reader, $revisionInfo ) {
2212        return $this->container->run(
2213            'ImportHandleUploadXMLTag',
2214            [ $reader, $revisionInfo ]
2215        );
2216    }
2217
2218    public function onImportLogInterwikiLink( &$fullInterwikiPrefix, &$pageTitle ) {
2219        return $this->container->run(
2220            'ImportLogInterwikiLink',
2221            [ &$fullInterwikiPrefix, &$pageTitle ]
2222        );
2223    }
2224
2225    public function onImportSources( &$importSources ) {
2226        return $this->container->run(
2227            'ImportSources',
2228            [ &$importSources ]
2229        );
2230    }
2231
2232    public function onInfoAction( $context, &$pageInfo ) {
2233        return $this->container->run(
2234            'InfoAction',
2235            [ $context, &$pageInfo ]
2236        );
2237    }
2238
2239    public function onInitializeArticleMaybeRedirect( $title, $request,
2240        &$ignoreRedirect, &$target, &$article
2241    ) {
2242        return $this->container->run(
2243            'InitializeArticleMaybeRedirect',
2244            [ $title, $request, &$ignoreRedirect, &$target, &$article ]
2245        );
2246    }
2247
2248    public function onInternalParseBeforeLinks( $parser, &$text, $stripState ) {
2249        return $this->container->run(
2250            'InternalParseBeforeLinks',
2251            [ $parser, &$text, $stripState ]
2252        );
2253    }
2254
2255    public function onInterwikiLoadPrefix( $prefix, &$iwData ) {
2256        return $this->container->run(
2257            'InterwikiLoadPrefix',
2258            [ $prefix, &$iwData ]
2259        );
2260    }
2261
2262    public function onInvalidateEmailComplete( $user ) {
2263        return $this->container->run(
2264            'InvalidateEmailComplete',
2265            [ $user ]
2266        );
2267    }
2268
2269    public function onIRCLineURL( &$url, &$query, $rc ) {
2270        return $this->container->run(
2271            'IRCLineURL',
2272            [ &$url, &$query, $rc ]
2273        );
2274    }
2275
2276    public function onIsFileCacheable( $article ) {
2277        return $this->container->run(
2278            'IsFileCacheable',
2279            [ $article ]
2280        );
2281    }
2282
2283    public function onIsTrustedProxy( $ip, &$result ) {
2284        return $this->container->run(
2285            'IsTrustedProxy',
2286            [ $ip, &$result ]
2287        );
2288    }
2289
2290    public function onIsUploadAllowedFromUrl( $url, &$allowed ) {
2291        return $this->container->run(
2292            'IsUploadAllowedFromUrl',
2293            [ $url, &$allowed ]
2294        );
2295    }
2296
2297    public function onIsValidEmailAddr( $addr, &$result ) {
2298        return $this->container->run(
2299            'isValidEmailAddr',
2300            [ $addr, &$result ]
2301        );
2302    }
2303
2304    public function onIsValidPassword( $password, &$result, $user ) {
2305        return $this->container->run(
2306            'isValidPassword',
2307            [ $password, &$result, $user ]
2308        );
2309    }
2310
2311    public function onJsonValidateSave( JsonContent $content, PageIdentity $pageIdentity, StatusValue $status ) {
2312        return $this->container->run(
2313            'JsonValidateSave',
2314            [ $content, $pageIdentity, &$status ]
2315        );
2316    }
2317
2318    public function onLanguageGetNamespaces( &$namespaces ) {
2319        return $this->container->run(
2320            'LanguageGetNamespaces',
2321            [ &$namespaces ]
2322        );
2323    }
2324
2325    public function onLanguageGetTranslatedLanguageNames( &$names, $code ) {
2326        return $this->container->run(
2327            'LanguageGetTranslatedLanguageNames',
2328            [ &$names, $code ]
2329        );
2330    }
2331
2332    public function onLanguageLinks( $title, &$links, &$linkFlags ) {
2333        return $this->container->run(
2334            'LanguageLinks',
2335            [ $title, &$links, &$linkFlags ]
2336        );
2337    }
2338
2339    public function onLanguageSelector( $out, $cssClassName ) {
2340        return $this->container->run(
2341            'LanguageSelector',
2342            [ $out, $cssClassName ]
2343        );
2344    }
2345
2346    public function onLanguage__getMessagesFileName( $code, &$file ) {
2347        return $this->container->run(
2348            'Language::getMessagesFileName',
2349            [ $code, &$file ]
2350        );
2351    }
2352
2353    public function onLinkerGenerateRollbackLink( $revRecord, $context, $options, &$inner ) {
2354        return $this->container->run(
2355            'LinkerGenerateRollbackLink',
2356            [ $revRecord, $context, $options, &$inner ]
2357        );
2358    }
2359
2360    public function onLinkerMakeExternalImage( &$url, &$alt, &$img ) {
2361        return $this->container->run(
2362            'LinkerMakeExternalImage',
2363            [ &$url, &$alt, &$img ]
2364        );
2365    }
2366
2367    public function onLinkerMakeExternalLink( &$url, &$text, &$link, &$attribs,
2368        $linkType
2369    ) {
2370        return $this->container->run(
2371            'LinkerMakeExternalLink',
2372            [ &$url, &$text, &$link, &$attribs, $linkType ]
2373        );
2374    }
2375
2376    public function onLinkerMakeMediaLinkFile( $title, $file, &$html, &$attribs,
2377        &$ret
2378    ) {
2379        return $this->container->run(
2380            'LinkerMakeMediaLinkFile',
2381            [ $title, $file, &$html, &$attribs, &$ret ]
2382        );
2383    }
2384
2385    public function onLinksUpdate( $linksUpdate ) {
2386        return $this->container->run(
2387            'LinksUpdate',
2388            [ $linksUpdate ]
2389        );
2390    }
2391
2392    public function onLinksUpdateComplete( $linksUpdate, $ticket ) {
2393        return $this->container->run(
2394            'LinksUpdateComplete',
2395            [ $linksUpdate, $ticket ]
2396        );
2397    }
2398
2399    public function onListDefinedTags( &$tags ) {
2400        return $this->container->run(
2401            'ListDefinedTags',
2402            [ &$tags ]
2403        );
2404    }
2405
2406    public function onLoadExtensionSchemaUpdates( $updater ) {
2407        return $this->container->run(
2408            'LoadExtensionSchemaUpdates',
2409            [ $updater ],
2410            [ 'noServices' => true ]
2411        );
2412    }
2413
2414    public function onLocalFilePurgeThumbnails( $file, $archiveName, $urls ) {
2415        return $this->container->run(
2416            'LocalFilePurgeThumbnails',
2417            [ $file, $archiveName, $urls ]
2418        );
2419    }
2420
2421    public function onLocalFile__getHistory( $file, &$tables, &$fields, &$conds,
2422        &$opts, &$join_conds
2423    ) {
2424        return $this->container->run(
2425            'LocalFile::getHistory',
2426            [ $file, &$tables, &$fields, &$conds, &$opts, &$join_conds ]
2427        );
2428    }
2429
2430    public function onLocalisationCacheRecache( $cache, $code, &$alldata, $unused ) {
2431        return $this->container->run(
2432            'LocalisationCacheRecache',
2433            [ $cache, $code, &$alldata, $unused ]
2434        );
2435    }
2436
2437    public function onLocalisationCacheRecacheFallback( $cache, $code, &$alldata ) {
2438        return $this->container->run(
2439            'LocalisationCacheRecacheFallback',
2440            [ $cache, $code, &$alldata ]
2441        );
2442    }
2443
2444    public function onLocalUserCreated( $user, $autocreated ) {
2445        return $this->container->run(
2446            'LocalUserCreated',
2447            [ $user, $autocreated ]
2448        );
2449    }
2450
2451    public function onLogEventsListGetExtraInputs( $type, $logEventsList, &$input,
2452        &$formDescriptor
2453    ) {
2454        return $this->container->run(
2455            'LogEventsListGetExtraInputs',
2456            [ $type, $logEventsList, &$input, &$formDescriptor ]
2457        );
2458    }
2459
2460    public function onLogEventsListLineEnding( $page, &$ret, $entry, &$classes,
2461        &$attribs
2462    ) {
2463        return $this->container->run(
2464            'LogEventsListLineEnding',
2465            [ $page, &$ret, $entry, &$classes, &$attribs ]
2466        );
2467    }
2468
2469    public function onLogEventsListShowLogExtract( &$s, $types, $page, $user,
2470        $param
2471    ) {
2472        return $this->container->run(
2473            'LogEventsListShowLogExtract',
2474            [ &$s, $types, $page, $user, $param ]
2475        );
2476    }
2477
2478    public function onLogException( $e, $suppressed ) {
2479        return $this->container->run(
2480            'LogException',
2481            [ $e, $suppressed ]
2482        );
2483    }
2484
2485    public function onLoginFormValidErrorMessages( array &$messages ) {
2486        return $this->container->run(
2487            'LoginFormValidErrorMessages',
2488            [ &$messages ]
2489        );
2490    }
2491
2492    public function onLogLine( $log_type, $log_action, $title, $paramArray,
2493        &$comment, &$revert, $time
2494    ) {
2495        return $this->container->run(
2496            'LogLine',
2497            [ $log_type, $log_action, $title, $paramArray, &$comment,
2498                &$revert, $time ]
2499        );
2500    }
2501
2502    public function onLonelyPagesQuery( &$tables, &$conds, &$joinConds ) {
2503        return $this->container->run(
2504            'LonelyPagesQuery',
2505            [ &$tables, &$conds, &$joinConds ]
2506        );
2507    }
2508
2509    public function onMagicWordwgVariableIDs( &$variableIDs ) {
2510        return $this->container->run(
2511            'MagicWordwgVariableIDs',
2512            [ &$variableIDs ]
2513        );
2514    }
2515
2516    public function onMaintenanceRefreshLinksInit( $refreshLinks ) {
2517        return $this->container->run(
2518            'MaintenanceRefreshLinksInit',
2519            [ $refreshLinks ]
2520        );
2521    }
2522
2523    public function onMaintenanceShellStart(): void {
2524        $this->container->run(
2525            'MaintenanceShellStart',
2526            [],
2527            [ 'abortable' => false ]
2528        );
2529    }
2530
2531    public function onMaintenanceUpdateAddParams( &$params ) {
2532        return $this->container->run(
2533            'MaintenanceUpdateAddParams',
2534            [ &$params ]
2535        );
2536    }
2537
2538    public function onMakeGlobalVariablesScript( &$vars, $out ): void {
2539        $this->container->run(
2540            'MakeGlobalVariablesScript',
2541            [ &$vars, $out ],
2542            [ 'abortable' => false ]
2543        );
2544    }
2545
2546    public function onManualLogEntryBeforePublish( $logEntry ): void {
2547        $this->container->run(
2548            'ManualLogEntryBeforePublish',
2549            [ $logEntry ],
2550            [ 'abortable' => false ]
2551        );
2552    }
2553
2554    public function onMarkPatrolled( $rcid, $user, $wcOnlySysopsCanPatrol, $auto,
2555        &$tags
2556    ) {
2557        return $this->container->run(
2558            'MarkPatrolled',
2559            [ $rcid, $user, $wcOnlySysopsCanPatrol, $auto, &$tags ]
2560        );
2561    }
2562
2563    public function onMarkPatrolledComplete( $rcid, $user, $wcOnlySysopsCanPatrol,
2564        $auto
2565    ) {
2566        return $this->container->run(
2567            'MarkPatrolledComplete',
2568            [ $rcid, $user, $wcOnlySysopsCanPatrol, $auto ]
2569        );
2570    }
2571
2572    public function onMediaWikiPerformAction( $output, $article, $title, $user,
2573        $request, $mediaWiki
2574    ) {
2575        return $this->container->run(
2576            'MediaWikiPerformAction',
2577            [ $output, $article, $title, $user, $request, $mediaWiki ]
2578        );
2579    }
2580
2581    public function onMediaWikiServices( $services ) {
2582        return $this->container->run(
2583            'MediaWikiServices',
2584            [ $services ],
2585            [ 'noServices' => true ]
2586        );
2587    }
2588
2589    public function onMessageCacheFetchOverrides( array &$messages ): void {
2590        $this->container->run(
2591            'MessageCacheFetchOverrides',
2592            [ &$messages ],
2593            [ 'abortable' => false ]
2594        );
2595    }
2596
2597    public function onMessageCacheReplace( $title, $text ) {
2598        return $this->container->run(
2599            'MessageCacheReplace',
2600            [ $title, $text ]
2601        );
2602    }
2603
2604    public function onMessageCache__get( &$key ) {
2605        return $this->container->run(
2606            'MessageCache::get',
2607            [ &$key ]
2608        );
2609    }
2610
2611    public function onMessagesPreLoad( $title, &$message, $code ) {
2612        return $this->container->run(
2613            'MessagesPreLoad',
2614            [ $title, &$message, $code ]
2615        );
2616    }
2617
2618    public function onMimeMagicGuessFromContent( $mimeMagic, &$head, &$tail, $file,
2619        &$mime
2620    ) {
2621        return $this->container->run(
2622            'MimeMagicGuessFromContent',
2623            [ $mimeMagic, &$head, &$tail, $file, &$mime ]
2624        );
2625    }
2626
2627    public function onMimeMagicImproveFromExtension( $mimeMagic, $ext, &$mime ) {
2628        return $this->container->run(
2629            'MimeMagicImproveFromExtension',
2630            [ $mimeMagic, $ext, &$mime ]
2631        );
2632    }
2633
2634    public function onMimeMagicInit( $mimeMagic ) {
2635        return $this->container->run(
2636            'MimeMagicInit',
2637            [ $mimeMagic ]
2638        );
2639    }
2640
2641    public function onGetBlockErrorMessageKey( $block, &$key ) {
2642        return $this->container->run(
2643            'GetBlockErrorMessageKey',
2644            [ $block, &$key ]
2645        );
2646    }
2647
2648    public function onModifyExportQuery( $db, &$tables, $cond, &$opts,
2649        &$join_conds, &$conds
2650    ) {
2651        return $this->container->run(
2652            'ModifyExportQuery',
2653            [ $db, &$tables, $cond, &$opts, &$join_conds, &$conds ]
2654        );
2655    }
2656
2657    public function onMovePageCheckPermissions( $oldTitle, $newTitle, $user,
2658        $reason, $status
2659    ) {
2660        return $this->container->run(
2661            'MovePageCheckPermissions',
2662            [ $oldTitle, $newTitle, $user, $reason, $status ]
2663        );
2664    }
2665
2666    public function onMovePageIsValidMove( $oldTitle, $newTitle, $status ) {
2667        return $this->container->run(
2668            'MovePageIsValidMove',
2669            [ $oldTitle, $newTitle, $status ]
2670        );
2671    }
2672
2673    public function onMultiContentSave( $renderedRevision, $user, $summary, $flags,
2674        $status
2675    ) {
2676        return $this->container->run(
2677            'MultiContentSave',
2678            [ $renderedRevision, $user, $summary, $flags, $status ]
2679        );
2680    }
2681
2682    public function onNamespaceIsMovable( $index, &$result ) {
2683        return $this->container->run(
2684            'NamespaceIsMovable',
2685            [ $index, &$result ]
2686        );
2687    }
2688
2689    public function onNewDifferenceEngine( $title, &$oldId, &$newId, $old, $new ) {
2690        return $this->container->run(
2691            'NewDifferenceEngine',
2692            [ $title, &$oldId, &$newId, $old, $new ]
2693        );
2694    }
2695
2696    public function onNewPagesLineEnding( $page, &$ret, $row, &$classes, &$attribs ) {
2697        return $this->container->run(
2698            'NewPagesLineEnding',
2699            [ $page, &$ret, $row, &$classes, &$attribs ]
2700        );
2701    }
2702
2703    public function onOldChangesListRecentChangesLine( $changeslist, &$s, $rc,
2704        &$classes, &$attribs
2705    ) {
2706        return $this->container->run(
2707            'OldChangesListRecentChangesLine',
2708            [ $changeslist, &$s, $rc, &$classes, &$attribs ]
2709        );
2710    }
2711
2712    public function onOpenSearchUrls( &$urls ) {
2713        return $this->container->run(
2714            'OpenSearchUrls',
2715            [ &$urls ]
2716        );
2717    }
2718
2719    public function onOpportunisticLinksUpdate( $page, $title, $parserOutput ) {
2720        return $this->container->run(
2721            'OpportunisticLinksUpdate',
2722            [ $page, $title, $parserOutput ]
2723        );
2724    }
2725
2726    public function onOtherAutoblockLogLink( &$otherBlockLink ) {
2727        return $this->container->run(
2728            'OtherAutoblockLogLink',
2729            [ &$otherBlockLink ]
2730        );
2731    }
2732
2733    public function onOtherBlockLogLink( &$otherBlockLink, $ip ) {
2734        return $this->container->run(
2735            'OtherBlockLogLink',
2736            [ &$otherBlockLink, $ip ]
2737        );
2738    }
2739
2740    public function onOutputPageAfterGetHeadLinksArray( &$tags, $out ) {
2741        return $this->container->run(
2742            'OutputPageAfterGetHeadLinksArray',
2743            [ &$tags, $out ]
2744        );
2745    }
2746
2747    public function onOutputPageBeforeHTML( $out, &$text ) {
2748        return $this->container->run(
2749            'OutputPageBeforeHTML',
2750            [ $out, &$text ]
2751        );
2752    }
2753
2754    public function onOutputPageBodyAttributes( $out, $sk, &$bodyAttrs ): void {
2755        $this->container->run(
2756            'OutputPageBodyAttributes',
2757            [ $out, $sk, &$bodyAttrs ],
2758            [ 'abortable' => false ]
2759        );
2760    }
2761
2762    public function onOutputPageCheckLastModified( &$modifiedTimes, $out ) {
2763        return $this->container->run(
2764            'OutputPageCheckLastModified',
2765            [ &$modifiedTimes, $out ]
2766        );
2767    }
2768
2769    public function onOutputPageMakeCategoryLinks( $out, $categories, &$links ) {
2770        return $this->container->run(
2771            'OutputPageMakeCategoryLinks',
2772            [ $out, $categories, &$links ]
2773        );
2774    }
2775
2776    public function onOutputPageParserOutput( $outputPage, $parserOutput ): void {
2777        $this->container->run(
2778            'OutputPageParserOutput',
2779            [ $outputPage, $parserOutput ],
2780            [ 'abortable' => false ]
2781        );
2782    }
2783
2784    public function onOutputPageRenderCategoryLink(
2785        OutputPage $outputPage,
2786        ProperPageIdentity $categoryTitle,
2787        string $text,
2788        ?string &$link
2789    ): void {
2790        $this->container->run(
2791            'OutputPageRenderCategoryLink',
2792            [ $outputPage, $categoryTitle, $text, &$link ],
2793            [ 'abortable' => false ]
2794        );
2795    }
2796
2797    public function onPageContentLanguage( $title, &$pageLang, $userLang ) {
2798        return $this->container->run(
2799            'PageContentLanguage',
2800            [ $title, &$pageLang, $userLang ]
2801        );
2802    }
2803
2804    public function onPageContentSave( $wikiPage, $user, $content, &$summary,
2805        $isminor, $iswatch, $section, $flags, $status
2806    ) {
2807        return $this->container->run(
2808            'PageContentSave',
2809            [ $wikiPage, $user, $content, &$summary, $isminor, $iswatch,
2810                $section, $flags, $status ]
2811        );
2812    }
2813
2814    public function onPageDelete(
2815        ProperPageIdentity $page,
2816        Authority $deleter,
2817        string $reason,
2818        StatusValue $status,
2819        bool $suppress
2820    ) {
2821        return $this->container->run(
2822            'PageDelete',
2823            [ $page, $deleter, $reason, $status, $suppress ]
2824        );
2825    }
2826
2827    public function onPageDeleteComplete(
2828        ProperPageIdentity $page,
2829        Authority $deleter,
2830        string $reason,
2831        int $pageID,
2832        RevisionRecord $deletedRev,
2833        ManualLogEntry $logEntry,
2834        int $archivedRevisionCount
2835    ) {
2836        return $this->container->run(
2837            'PageDeleteComplete',
2838            [ $page, $deleter, $reason, $pageID, $deletedRev, $logEntry, $archivedRevisionCount ]
2839        );
2840    }
2841
2842    public function onPageDeletionDataUpdates( $title, $revision, &$updates ) {
2843        return $this->container->run(
2844            'PageDeletionDataUpdates',
2845            [ $title, $revision, &$updates ]
2846        );
2847    }
2848
2849    public function onPageUndelete(
2850        ProperPageIdentity $page,
2851        Authority $performer,
2852        string $reason,
2853        bool $unsuppress,
2854        array $timestamps,
2855        array $fileVersions,
2856        StatusValue $status
2857    ) {
2858        return $this->container->run(
2859            'PageUndelete',
2860            [ $page, $performer, $reason, $unsuppress, $timestamps, $fileVersions, $status ]
2861        );
2862    }
2863
2864    public function onPageUndeleteComplete(
2865        ProperPageIdentity $page,
2866        Authority $restorer,
2867        string $reason,
2868        RevisionRecord $restoredRev,
2869        ManualLogEntry $logEntry,
2870        int $restoredRevisionCount,
2871        bool $created,
2872        array $restoredPageIds
2873    ): void {
2874        $this->container->run(
2875            'PageUndeleteComplete',
2876            [
2877                $page,
2878                $restorer,
2879                $reason,
2880                $restoredRev,
2881                $logEntry,
2882                $restoredRevisionCount,
2883                $created,
2884                $restoredPageIds
2885            ],
2886            [ 'abortable' => false ]
2887        );
2888    }
2889
2890    public function onPageHistoryBeforeList( $article, $context ) {
2891        return $this->container->run(
2892            'PageHistoryBeforeList',
2893            [ $article, $context ]
2894        );
2895    }
2896
2897    public function onPageHistoryLineEnding( $historyAction, &$row, &$s, &$classes,
2898        &$attribs
2899    ) {
2900        return $this->container->run(
2901            'PageHistoryLineEnding',
2902            [ $historyAction, &$row, &$s, &$classes, &$attribs ]
2903        );
2904    }
2905
2906    public function onPageHistoryPager__doBatchLookups( $pager, $result ) {
2907        return $this->container->run(
2908            'PageHistoryPager::doBatchLookups',
2909            [ $pager, $result ]
2910        );
2911    }
2912
2913    public function onPageHistoryPager__getQueryInfo( $pager, &$queryInfo ) {
2914        return $this->container->run(
2915            'PageHistoryPager::getQueryInfo',
2916            [ $pager, &$queryInfo ]
2917        );
2918    }
2919
2920    public function onPageMoveComplete( $old, $new, $user, $pageid, $redirid, $reason, $revision ) {
2921        return $this->container->run(
2922            'PageMoveComplete',
2923            [ $old, $new, $user, $pageid, $redirid, $reason, $revision ]
2924        );
2925    }
2926
2927    public function onPageMoveCompleting( $old, $new, $user, $pageid, $redirid, $reason, $revision ) {
2928        return $this->container->run(
2929            'PageMoveCompleting',
2930            [ $old, $new, $user, $pageid, $redirid, $reason, $revision ]
2931        );
2932    }
2933
2934    public function onPageRenderingHash( &$confstr, $user, &$forOptions ) {
2935        return $this->container->run(
2936            'PageRenderingHash',
2937            [ &$confstr, $user, &$forOptions ]
2938        );
2939    }
2940
2941    public function onPageSaveComplete( $wikiPage, $user, $summary, $flags,
2942        $revisionRecord, $editResult
2943    ) {
2944        return $this->container->run(
2945            'PageSaveComplete',
2946            [ $wikiPage, $user, $summary, $flags, $revisionRecord, $editResult ]
2947        );
2948    }
2949
2950    public function onPageViewUpdates( $wikipage, $user ) {
2951        return $this->container->run(
2952            'PageViewUpdates',
2953            [ $wikipage, $user ]
2954        );
2955    }
2956
2957    public function onParserAfterParse( $parser, &$text, $stripState ) {
2958        return $this->container->run(
2959            'ParserAfterParse',
2960            [ $parser, &$text, $stripState ]
2961        );
2962    }
2963
2964    public function onParserAfterTidy( $parser, &$text ) {
2965        return $this->container->run(
2966            'ParserAfterTidy',
2967            [ $parser, &$text ]
2968        );
2969    }
2970
2971    public function onParserBeforeInternalParse( $parser, &$text, $stripState ) {
2972        return $this->container->run(
2973            'ParserBeforeInternalParse',
2974            [ $parser, &$text, $stripState ]
2975        );
2976    }
2977
2978    public function onParserBeforePreprocess( $parser, &$text, $stripState ) {
2979        return $this->container->run(
2980            'ParserBeforePreprocess',
2981            [ $parser, &$text, $stripState ]
2982        );
2983    }
2984
2985    public function onParserCacheSaveComplete( $parserCache, $parserOutput, $title,
2986        $popts, $revId
2987    ) {
2988        return $this->container->run(
2989            'ParserCacheSaveComplete',
2990            [ $parserCache, $parserOutput, $title, $popts, $revId ]
2991        );
2992    }
2993
2994    public function onParserClearState( $parser ) {
2995        return $this->container->run(
2996            'ParserClearState',
2997            [ $parser ]
2998        );
2999    }
3000
3001    public function onParserCloned( $parser ) {
3002        return $this->container->run(
3003            'ParserCloned',
3004            [ $parser ]
3005        );
3006    }
3007
3008    public function onParserFetchTemplateData( array $titles, array &$tplData ): bool {
3009        return $this->container->run(
3010            'ParserFetchTemplateData',
3011            [ $titles, &$tplData ]
3012        );
3013    }
3014
3015    public function onParserFirstCallInit( $parser ) {
3016        return $this->container->run(
3017            'ParserFirstCallInit',
3018            [ $parser ]
3019        );
3020    }
3021
3022    public function onParserGetVariableValueSwitch( $parser, &$variableCache,
3023        $magicWordId, &$ret, $frame
3024    ) {
3025        return $this->container->run(
3026            'ParserGetVariableValueSwitch',
3027            [ $parser, &$variableCache, $magicWordId, &$ret, $frame ]
3028        );
3029    }
3030
3031    public function onParserGetVariableValueTs( $parser, &$time ) {
3032        return $this->container->run(
3033            'ParserGetVariableValueTs',
3034            [ $parser, &$time ]
3035        );
3036    }
3037
3038    public function onParserLimitReportFormat( $key, &$value, &$report, $isHTML,
3039        $localize
3040    ) {
3041        return $this->container->run(
3042            'ParserLimitReportFormat',
3043            [ $key, &$value, &$report, $isHTML, $localize ]
3044        );
3045    }
3046
3047    public function onParserLimitReportPrepare( $parser, $output ) {
3048        return $this->container->run(
3049            'ParserLimitReportPrepare',
3050            [ $parser, $output ]
3051        );
3052    }
3053
3054    public function onParserLogLinterData( string $title, int $revId, array $lints ): bool {
3055        return $this->container->run(
3056            'ParserLogLinterData',
3057            [ $title, $revId, $lints ]
3058        );
3059    }
3060
3061    public function onParserMakeImageParams( $title, $file, &$params, $parser ) {
3062        return $this->container->run(
3063            'ParserMakeImageParams',
3064            [ $title, $file, &$params, $parser ]
3065        );
3066    }
3067
3068    public function onParserModifyImageHTML( Parser $parser, File $file,
3069        array $params, string &$html
3070    ): void {
3071        $this->container->run(
3072            'ParserModifyImageHTML',
3073            [ $parser, $file, $params, &$html ],
3074            [ 'abortable' => false ]
3075        );
3076    }
3077
3078    public function onParserOptionsRegister( &$defaults, &$inCacheKey, &$lazyLoad ) {
3079        return $this->container->run(
3080            'ParserOptionsRegister',
3081            [ &$defaults, &$inCacheKey, &$lazyLoad ]
3082        );
3083    }
3084
3085    public function onParserOutputPostCacheTransform( $parserOutput, &$text,
3086        &$options
3087    ): void {
3088        $this->container->run(
3089            'ParserOutputPostCacheTransform',
3090            [ $parserOutput, &$text, &$options ],
3091            [ 'abortable' => false ]
3092        );
3093    }
3094
3095    public function onParserOutputStashForEdit( $page, $content, $output, $summary,
3096        $user
3097    ) {
3098        return $this->container->run(
3099            'ParserOutputStashForEdit',
3100            [ $page, $content, $output, $summary, $user ]
3101        );
3102    }
3103
3104    public function onParserPreSaveTransformComplete( $parser, &$text ) {
3105        return $this->container->run(
3106            'ParserPreSaveTransformComplete',
3107            [ $parser, &$text ]
3108        );
3109    }
3110
3111    public function onParserTestGlobals( &$globals ) {
3112        return $this->container->run(
3113            'ParserTestGlobals',
3114            [ &$globals ]
3115        );
3116    }
3117
3118    public function onPasswordPoliciesForUser( $user, &$effectivePolicy ) {
3119        return $this->container->run(
3120            'PasswordPoliciesForUser',
3121            [ $user, &$effectivePolicy ]
3122        );
3123    }
3124
3125    public function onPerformRetroactiveAutoblock( $block, &$blockIds ) {
3126        return $this->container->run(
3127            'PerformRetroactiveAutoblock',
3128            [ $block, &$blockIds ]
3129        );
3130    }
3131
3132    public function onPingLimiter( $user, $action, &$result, $incrBy ) {
3133        return $this->container->run(
3134            'PingLimiter',
3135            [ $user, $action, &$result, $incrBy ]
3136        );
3137    }
3138
3139    public function onPlaceNewSection( $content, $oldtext, $subject, &$text ) {
3140        return $this->container->run(
3141            'PlaceNewSection',
3142            [ $content, $oldtext, $subject, &$text ]
3143        );
3144    }
3145
3146    public function onPostLoginRedirect( &$returnTo, &$returnToQuery, &$type ) {
3147        return $this->container->run(
3148            'PostLoginRedirect',
3149            [ &$returnTo, &$returnToQuery, &$type ]
3150        );
3151    }
3152
3153    public function onPreferencesFormPreSave( $formData, $form, $user, &$result,
3154        $oldUserOptions
3155    ) {
3156        return $this->container->run(
3157            'PreferencesFormPreSave',
3158            [ $formData, $form, $user, &$result, $oldUserOptions ]
3159        );
3160    }
3161
3162    public function onPreferencesGetIcon( &$iconNames ) {
3163        return $this->container->run(
3164            'PreferencesGetIcon',
3165            [ &$iconNames ]
3166        );
3167    }
3168
3169    public function onPreferencesGetLayout( &$useMobileLayout, $skinName,
3170        $skinProperties = []
3171    ) {
3172        return $this->container->run(
3173            'PreferencesGetLayout',
3174            [ &$useMobileLayout, $skinName, $skinProperties ]
3175        );
3176    }
3177
3178    public function onPreferencesGetLegend( $form, $key, &$legend ) {
3179        return $this->container->run(
3180            'PreferencesGetLegend',
3181            [ $form, $key, &$legend ]
3182        );
3183    }
3184
3185    public function onPrefixSearchBackend( $ns, $search, $limit, &$results,
3186        $offset
3187    ) {
3188        return $this->container->run(
3189            'PrefixSearchBackend',
3190            [ $ns, $search, $limit, &$results, $offset ]
3191        );
3192    }
3193
3194    public function onPrefixSearchExtractNamespace( &$namespaces, &$search ) {
3195        return $this->container->run(
3196            'PrefixSearchExtractNamespace',
3197            [ &$namespaces, &$search ]
3198        );
3199    }
3200
3201    public function onPrefsEmailAudit( $user, $oldaddr, $newaddr ) {
3202        return $this->container->run(
3203            'PrefsEmailAudit',
3204            [ $user, $oldaddr, $newaddr ]
3205        );
3206    }
3207
3208    public function onProtectionForm__buildForm( $article, &$output ) {
3209        return $this->container->run(
3210            'ProtectionForm::buildForm',
3211            [ $article, &$output ]
3212        );
3213    }
3214
3215    public function onProtectionFormAddFormFields( $article, &$hookFormOptions ) {
3216        return $this->container->run(
3217            'ProtectionFormAddFormFields',
3218            [ $article, &$hookFormOptions ]
3219        );
3220    }
3221
3222    public function onProtectionForm__save( $article, &$errorMsg, $reasonstr ) {
3223        return $this->container->run(
3224            'ProtectionForm::save',
3225            [ $article, &$errorMsg, $reasonstr ]
3226        );
3227    }
3228
3229    public function onProtectionForm__showLogExtract( $article, $out ) {
3230        return $this->container->run(
3231            'ProtectionForm::showLogExtract',
3232            [ $article, $out ]
3233        );
3234    }
3235
3236    public function onRandomPageQuery( &$tables, &$conds, &$joinConds ) {
3237        return $this->container->run(
3238            'RandomPageQuery',
3239            [ &$tables, &$conds, &$joinConds ]
3240        );
3241    }
3242
3243    public function onRawPageViewBeforeOutput( $obj, &$text ) {
3244        return $this->container->run(
3245            'RawPageViewBeforeOutput',
3246            [ $obj, &$text ]
3247        );
3248    }
3249
3250    public function onRecentChangesPurgeRows( $rows ): void {
3251        $this->container->run(
3252            'RecentChangesPurgeRows',
3253            [ $rows ]
3254        );
3255    }
3256
3257    public function onRecentChange_save( $recentChange ) {
3258        return $this->container->run(
3259            'RecentChange_save',
3260            [ $recentChange ]
3261        );
3262    }
3263
3264    public function onRedirectSpecialArticleRedirectParams( &$redirectParams ) {
3265        return $this->container->run(
3266            'RedirectSpecialArticleRedirectParams',
3267            [ &$redirectParams ]
3268        );
3269    }
3270
3271    public function onRejectParserCacheValue( $parserOutput, $wikiPage,
3272        $parserOptions
3273    ) {
3274        return $this->container->run(
3275            'RejectParserCacheValue',
3276            [ $parserOutput, $wikiPage, $parserOptions ]
3277        );
3278    }
3279
3280    public function onRenameUserAbort( int $uid, string $old, string $new ) {
3281        return $this->container->run(
3282            'RenameUserAbort',
3283            [ $uid, $old, $new ]
3284        );
3285    }
3286
3287    public function onRenameUserComplete( int $uid, string $old, string $new ): void {
3288        $this->container->run(
3289            'RenameUserComplete',
3290            [ $uid, $old, $new ],
3291            [ 'abortable' => false ]
3292        );
3293    }
3294
3295    public function onRenameUserPreRename( int $uid, string $old, string $new ): void {
3296        $this->container->run(
3297            'RenameUserPreRename',
3298            [ $uid, $old, $new ],
3299            [ 'abortable' => false ]
3300        );
3301    }
3302
3303    public function onRenameUserSQL( RenameuserSQL $renameUserSql ): void {
3304        $this->container->run(
3305            'RenameUserSQL',
3306            [ $renameUserSql ],
3307            [ 'abortable' => false ]
3308        );
3309    }
3310
3311    public function onRenameUserWarning( string $oldUsername, string $newUsername, array &$warnings ): void {
3312        $this->container->run(
3313            'RenameUserWarning',
3314            [ $oldUsername, $newUsername, &$warnings ],
3315            [ 'abortable' => false ]
3316        );
3317    }
3318
3319    public function onRequestContextCreateSkin( $context, &$skin ) {
3320        return $this->container->run(
3321            'RequestContextCreateSkin',
3322            [ $context, &$skin ]
3323        );
3324    }
3325
3326    public function onResetPasswordExpiration( $user, &$newExpire ) {
3327        return $this->container->run(
3328            'ResetPasswordExpiration',
3329            [ $user, &$newExpire ]
3330        );
3331    }
3332
3333    public function onRevisionDataUpdates( $title, $renderedRevision, &$updates ) {
3334        return $this->container->run(
3335            'RevisionDataUpdates',
3336            [ $title, $renderedRevision, &$updates ]
3337        );
3338    }
3339
3340    public function onRevisionFromEditComplete( $wikiPage, $rev, $originalRevId, $user, &$tags ) {
3341        return $this->container->run(
3342            'RevisionFromEditComplete',
3343            [ $wikiPage, $rev, $originalRevId, $user, &$tags ]
3344        );
3345    }
3346
3347    public function onRevisionRecordInserted( $revisionRecord ) {
3348        return $this->container->run(
3349            'RevisionRecordInserted',
3350            [ $revisionRecord ]
3351        );
3352    }
3353
3354    public function onRevisionUndeleted( $revisionRecord, $oldPageID ) {
3355        return $this->container->run(
3356            'RevisionUndeleted',
3357            [ $revisionRecord, $oldPageID ]
3358        );
3359    }
3360
3361    public function onRollbackComplete( $wikiPage, $user, $revision, $current ) {
3362        return $this->container->run(
3363            'RollbackComplete',
3364            [ $wikiPage, $user, $revision, $current ]
3365        );
3366    }
3367
3368    public function onSearchableNamespaces( &$arr ) {
3369        return $this->container->run(
3370            'SearchableNamespaces',
3371            [ &$arr ]
3372        );
3373    }
3374
3375    public function onSearchAfterNoDirectMatch( $term, &$title ) {
3376        return $this->container->run(
3377            'SearchAfterNoDirectMatch',
3378            [ $term, &$title ]
3379        );
3380    }
3381
3382    public function onSearchDataForIndex( &$fields, $handler, $page, $output, $engine ) {
3383        return $this->container->run(
3384            'SearchDataForIndex',
3385            [ &$fields, $handler, $page, $output, $engine ]
3386        );
3387    }
3388
3389    public function onSearchDataForIndex2( array &$fields, ContentHandler $handler,
3390        WikiPage $page, ParserOutput $output, SearchEngine $engine, RevisionRecord $revision
3391    ) {
3392        return $this->container->run(
3393            'SearchDataForIndex2',
3394            [ &$fields, $handler, $page, $output, $engine, $revision ]
3395        );
3396    }
3397
3398    public function onSearchGetNearMatch( $term, &$title ) {
3399        return $this->container->run(
3400            'SearchGetNearMatch',
3401            [ $term, &$title ]
3402        );
3403    }
3404
3405    public function onSearchGetNearMatchBefore( $allSearchTerms, &$titleResult ) {
3406        return $this->container->run(
3407            'SearchGetNearMatchBefore',
3408            [ $allSearchTerms, &$titleResult ]
3409        );
3410    }
3411
3412    public function onSearchGetNearMatchComplete( $term, &$title ) {
3413        return $this->container->run(
3414            'SearchGetNearMatchComplete',
3415            [ $term, &$title ]
3416        );
3417    }
3418
3419    public function onSearchIndexFields( &$fields, $engine ) {
3420        return $this->container->run(
3421            'SearchIndexFields',
3422            [ &$fields, $engine ]
3423        );
3424    }
3425
3426    public function onSearchResultInitFromTitle( $title, &$id ) {
3427        return $this->container->run(
3428            'SearchResultInitFromTitle',
3429            [ $title, &$id ]
3430        );
3431    }
3432
3433    public function onSearchResultProvideDescription( array $pageIdentities, &$descriptions ) {
3434        return $this->container->run(
3435            'SearchResultProvideDescription',
3436            [ $pageIdentities, &$descriptions ]
3437        );
3438    }
3439
3440    public function onSearchResultProvideThumbnail( array $pageIdentities, &$thumbnails, ?int $size = null ) {
3441        return $this->container->run(
3442            'SearchResultProvideThumbnail',
3443            [ $pageIdentities, &$thumbnails, $size ]
3444        );
3445    }
3446
3447    public function onSearchResultsAugment( &$setAugmentors, &$rowAugmentors ) {
3448        return $this->container->run(
3449            'SearchResultsAugment',
3450            [ &$setAugmentors, &$rowAugmentors ]
3451        );
3452    }
3453
3454    public function onSecuritySensitiveOperationStatus( &$status, $operation,
3455        $session, $timeSinceAuth
3456    ) {
3457        return $this->container->run(
3458            'SecuritySensitiveOperationStatus',
3459            [ &$status, $operation, $session, $timeSinceAuth ]
3460        );
3461    }
3462
3463    public function onSelfLinkBegin( $nt, &$html, &$trail, &$prefix, &$ret ) {
3464        return $this->container->run(
3465            'SelfLinkBegin',
3466            [ $nt, &$html, &$trail, &$prefix, &$ret ]
3467        );
3468    }
3469
3470    public function onSendWatchlistEmailNotification( $targetUser, $title, $enotif ) {
3471        return $this->container->run(
3472            'SendWatchlistEmailNotification',
3473            [ $targetUser, $title, $enotif ]
3474        );
3475    }
3476
3477    public function onSessionCheckInfo( &$reason, $info, $request, $metadata,
3478        $data
3479    ) {
3480        return $this->container->run(
3481            'SessionCheckInfo',
3482            [ &$reason, $info, $request, $metadata, $data ]
3483        );
3484    }
3485
3486    public function onSessionMetadata( $backend, &$metadata, $requests ) {
3487        return $this->container->run(
3488            'SessionMetadata',
3489            [ $backend, &$metadata, $requests ]
3490        );
3491    }
3492
3493    public function onSetupAfterCache() {
3494        return $this->container->run(
3495            'SetupAfterCache',
3496            []
3497        );
3498    }
3499
3500    public function onShortPagesQuery( &$tables, &$conds, &$joinConds, &$options ) {
3501        return $this->container->run(
3502            'ShortPagesQuery',
3503            [ &$tables, &$conds, &$joinConds, &$options ]
3504        );
3505    }
3506
3507    public function onShowMissingArticle( $article ) {
3508        return $this->container->run(
3509            'ShowMissingArticle',
3510            [ $article ]
3511        );
3512    }
3513
3514    public function onShowSearchHit( $searchPage, $result, $terms, &$link,
3515        &$redirect, &$section, &$extract, &$score, &$size, &$date, &$related, &$html
3516    ) {
3517        return $this->container->run(
3518            'ShowSearchHit',
3519            [ $searchPage, $result, $terms, &$link, &$redirect, &$section,
3520                &$extract, &$score, &$size, &$date, &$related, &$html ]
3521        );
3522    }
3523
3524    public function onShowSearchHitTitle( &$title, &$titleSnippet, $result, $terms,
3525        $specialSearch, &$query, &$attributes
3526    ) {
3527        return $this->container->run(
3528            'ShowSearchHitTitle',
3529            [ &$title, &$titleSnippet, $result, $terms, $specialSearch,
3530                &$query, &$attributes ]
3531        );
3532    }
3533
3534    public function onSidebarBeforeOutput( $skin, &$sidebar ): void {
3535        $this->container->run(
3536            'SidebarBeforeOutput',
3537            [ $skin, &$sidebar ],
3538            [ 'abortable' => false ]
3539        );
3540    }
3541
3542    public function onSiteNoticeAfter( &$siteNotice, $skin ) {
3543        return $this->container->run(
3544            'SiteNoticeAfter',
3545            [ &$siteNotice, $skin ]
3546        );
3547    }
3548
3549    public function onSiteNoticeBefore( &$siteNotice, $skin ) {
3550        return $this->container->run(
3551            'SiteNoticeBefore',
3552            [ &$siteNotice, $skin ]
3553        );
3554    }
3555
3556    public function onSkinPageReadyConfig( RL\Context $context,
3557        array &$config
3558    ): void {
3559        $this->container->run(
3560            'SkinPageReadyConfig',
3561            [ $context, &$config ],
3562            [ 'abortable' => false ]
3563        );
3564    }
3565
3566    public function onSkinAddFooterLinks( Skin $skin, string $key, array &$footerItems ) {
3567        $this->container->run(
3568            'SkinAddFooterLinks',
3569            [ $skin, $key, &$footerItems ]
3570        );
3571    }
3572
3573    public function onSkinAfterBottomScripts( $skin, &$text ) {
3574        return $this->container->run(
3575            'SkinAfterBottomScripts',
3576            [ $skin, &$text ]
3577        );
3578    }
3579
3580    public function onSkinAfterContent( &$data, $skin ) {
3581        return $this->container->run(
3582            'SkinAfterContent',
3583            [ &$data, $skin ]
3584        );
3585    }
3586
3587    public function onSkinAfterPortlet( $skin, $portlet, &$html ) {
3588        return $this->container->run(
3589            'SkinAfterPortlet',
3590            [ $skin, $portlet, &$html ]
3591        );
3592    }
3593
3594    public function onSkinBuildSidebar( $skin, &$bar ) {
3595        return $this->container->run(
3596            'SkinBuildSidebar',
3597            [ $skin, &$bar ]
3598        );
3599    }
3600
3601    public function onSkinCopyrightFooter( $title, $type, &$msg, &$link ) {
3602        return $this->container->run(
3603            'SkinCopyrightFooter',
3604            [ $title, $type, &$msg, &$link ]
3605        );
3606    }
3607
3608    public function onSkinCopyrightFooterMessage( $title, $type, &$msg ) {
3609        return $this->container->run(
3610            'SkinCopyrightFooterMessage',
3611            [ $title, $type, &$msg ]
3612        );
3613    }
3614
3615    public function onSkinEditSectionLinks( $skin, $title, $section, $tooltip,
3616        &$result, $lang
3617    ) {
3618        return $this->container->run(
3619            'SkinEditSectionLinks',
3620            [ $skin, $title, $section, $tooltip, &$result, $lang ]
3621        );
3622    }
3623
3624    public function onSkinPreloadExistence( &$titles, $skin ) {
3625        return $this->container->run(
3626            'SkinPreloadExistence',
3627            [ &$titles, $skin ]
3628        );
3629    }
3630
3631    public function onSkinSubPageSubtitle( &$subpages, $skin, $out ) {
3632        return $this->container->run(
3633            'SkinSubPageSubtitle',
3634            [ &$subpages, $skin, $out ]
3635        );
3636    }
3637
3638    public function onSkinTemplateGetLanguageLink( &$languageLink,
3639        $languageLinkTitle, $title, $outputPage
3640    ) {
3641        return $this->container->run(
3642            'SkinTemplateGetLanguageLink',
3643            [ &$languageLink, $languageLinkTitle, $title, $outputPage ]
3644        );
3645    }
3646
3647    public function onSkinTemplateNavigation__Universal( $sktemplate, &$links ): void {
3648        $this->container->run(
3649            'SkinTemplateNavigation::Universal',
3650            [ $sktemplate, &$links ],
3651            [ 'abortable' => false ]
3652        );
3653    }
3654
3655    public function onSoftwareInfo( &$software ) {
3656        return $this->container->run(
3657            'SoftwareInfo',
3658            [ &$software ]
3659        );
3660    }
3661
3662    public function onSpecialBlockModifyFormFields( $sp, &$fields ) {
3663        return $this->container->run(
3664            'SpecialBlockModifyFormFields',
3665            [ $sp, &$fields ]
3666        );
3667    }
3668
3669    public function onSpecialContributionsBeforeMainOutput( $id, $user, $sp ) {
3670        return $this->container->run(
3671            'SpecialContributionsBeforeMainOutput',
3672            [ $id, $user, $sp ]
3673        );
3674    }
3675
3676    public function onSpecialContributions__formatRow__flags( $context, $row,
3677        &$flags
3678    ) {
3679        return $this->container->run(
3680            'SpecialContributions::formatRow::flags',
3681            [ $context, $row, &$flags ]
3682        );
3683    }
3684
3685    public function onSpecialContributions__getForm__filters( $sp, &$filters ) {
3686        return $this->container->run(
3687            'SpecialContributions::getForm::filters',
3688            [ $sp, &$filters ]
3689        );
3690    }
3691
3692    public function onSpecialCreateAccountBenefits( ?string &$html, array $info, array &$options ) {
3693        return $this->container->run(
3694            'SpecialCreateAccountBenefits',
3695            [ &$html, $info, &$options ]
3696        );
3697    }
3698
3699    public function onSpecialExportGetExtraPages( $inputPages, &$extraPages ) {
3700        return $this->container->run(
3701            'SpecialExportGetExtraPages',
3702            [ $inputPages, &$extraPages ]
3703        );
3704    }
3705
3706    public function onSpecialListusersDefaultQuery( $pager, &$query ) {
3707        return $this->container->run(
3708            'SpecialListusersDefaultQuery',
3709            [ $pager, &$query ]
3710        );
3711    }
3712
3713    public function onSpecialListusersFormatRow( &$item, $row ) {
3714        return $this->container->run(
3715            'SpecialListusersFormatRow',
3716            [ &$item, $row ]
3717        );
3718    }
3719
3720    public function onSpecialListusersHeader( $pager, &$out ) {
3721        return $this->container->run(
3722            'SpecialListusersHeader',
3723            [ $pager, &$out ]
3724        );
3725    }
3726
3727    public function onSpecialListusersHeaderForm( $pager, &$out ) {
3728        return $this->container->run(
3729            'SpecialListusersHeaderForm',
3730            [ $pager, &$out ]
3731        );
3732    }
3733
3734    public function onSpecialListusersQueryInfo( $pager, &$query ) {
3735        return $this->container->run(
3736            'SpecialListusersQueryInfo',
3737            [ $pager, &$query ]
3738        );
3739    }
3740
3741    public function onSpecialLogAddLogSearchRelations( $type, $request, &$qc ) {
3742        return $this->container->run(
3743            'SpecialLogAddLogSearchRelations',
3744            [ $type, $request, &$qc ]
3745        );
3746    }
3747
3748    public function onSpecialMovepageAfterMove( $movePage, $oldTitle, $newTitle ) {
3749        return $this->container->run(
3750            'SpecialMovepageAfterMove',
3751            [ $movePage, $oldTitle, $newTitle ]
3752        );
3753    }
3754
3755    public function onSpecialMuteModifyFormFields( $target, $user, &$fields ) {
3756        return $this->container->run(
3757            'SpecialMuteModifyFormFields',
3758            [ $target, $user, &$fields ]
3759        );
3760    }
3761
3762    public function onSpecialNewpagesConditions( $special, $opts, &$conds,
3763        &$tables, &$fields, &$join_conds
3764    ) {
3765        return $this->container->run(
3766            'SpecialNewpagesConditions',
3767            [ $special, $opts, &$conds, &$tables, &$fields, &$join_conds ]
3768        );
3769    }
3770
3771    public function onSpecialNewPagesFilters( $special, &$filters ) {
3772        return $this->container->run(
3773            'SpecialNewPagesFilters',
3774            [ $special, &$filters ]
3775        );
3776    }
3777
3778    public function onSpecialPageAfterExecute( $special, $subPage ) {
3779        return $this->container->run(
3780            'SpecialPageAfterExecute',
3781            [ $special, $subPage ]
3782        );
3783    }
3784
3785    public function onSpecialPageBeforeExecute( $special, $subPage ) {
3786        return $this->container->run(
3787            'SpecialPageBeforeExecute',
3788            [ $special, $subPage ]
3789        );
3790    }
3791
3792    public function onSpecialPageBeforeFormDisplay( $name, $form ) {
3793        return $this->container->run(
3794            'SpecialPageBeforeFormDisplay',
3795            [ $name, $form ]
3796        );
3797    }
3798
3799    public function onSpecialPage_initList( &$list ) {
3800        return $this->container->run(
3801            'SpecialPage_initList',
3802            [ &$list ]
3803        );
3804    }
3805
3806    public function onSpecialPasswordResetOnSubmit( &$users, $data, &$error ) {
3807        return $this->container->run(
3808            'SpecialPasswordResetOnSubmit',
3809            [ &$users, $data, &$error ]
3810        );
3811    }
3812
3813    public function onSpecialPrefixIndexGetFormFilters( IContextSource $contextSource, array &$filters ) {
3814        $this->container->run(
3815            'SpecialPrefixIndexGetFormFilters',
3816            [ $contextSource, &$filters ],
3817            [ 'abortable' => false ]
3818        );
3819    }
3820
3821    public function onSpecialPrefixIndexQuery( array $fieldData, SelectQueryBuilder $queryBuilder ) {
3822        $this->container->run(
3823            'SpecialPrefixIndexQuery',
3824            [ $fieldData, $queryBuilder ],
3825            [ 'abortable' => false ]
3826        );
3827    }
3828
3829    public function onSpecialRandomGetRandomTitle( &$randstr, &$isRedir,
3830        &$namespaces, &$extra, &$title
3831    ) {
3832        return $this->container->run(
3833            'SpecialRandomGetRandomTitle',
3834            [ &$randstr, &$isRedir, &$namespaces, &$extra, &$title ]
3835        );
3836    }
3837
3838    public function onSpecialRecentChangesPanel( &$extraOpts, $opts ) {
3839        return $this->container->run(
3840            'SpecialRecentChangesPanel',
3841            [ &$extraOpts, $opts ]
3842        );
3843    }
3844
3845    public function onSpecialResetTokensTokens( &$tokens ) {
3846        return $this->container->run(
3847            'SpecialResetTokensTokens',
3848            [ &$tokens ]
3849        );
3850    }
3851
3852    public function onSpecialSearchCreateLink( $t, &$params ) {
3853        return $this->container->run(
3854            'SpecialSearchCreateLink',
3855            [ $t, &$params ]
3856        );
3857    }
3858
3859    public function onSpecialSearchGoResult( $term, $title, &$url ) {
3860        return $this->container->run(
3861            'SpecialSearchGoResult',
3862            [ $term, $title, &$url ]
3863        );
3864    }
3865
3866    public function onSpecialSearchNogomatch( &$title ) {
3867        return $this->container->run(
3868            'SpecialSearchNogomatch',
3869            [ &$title ]
3870        );
3871    }
3872
3873    public function onSpecialSearchPowerBox( &$showSections, $term, &$opts ) {
3874        return $this->container->run(
3875            'SpecialSearchPowerBox',
3876            [ &$showSections, $term, &$opts ]
3877        );
3878    }
3879
3880    public function onSpecialSearchProfileForm( $search, &$form, $profile, $term,
3881        $opts
3882    ) {
3883        return $this->container->run(
3884            'SpecialSearchProfileForm',
3885            [ $search, &$form, $profile, $term, $opts ]
3886        );
3887    }
3888
3889    public function onSpecialSearchProfiles( &$profiles ) {
3890        return $this->container->run(
3891            'SpecialSearchProfiles',
3892            [ &$profiles ]
3893        );
3894    }
3895
3896    public function onSpecialSearchResults( $term, &$titleMatches, &$textMatches ) {
3897        return $this->container->run(
3898            'SpecialSearchResults',
3899            [ $term, &$titleMatches, &$textMatches ]
3900        );
3901    }
3902
3903    public function onSpecialSearchResultsAppend( $specialSearch, $output, $term ) {
3904        return $this->container->run(
3905            'SpecialSearchResultsAppend',
3906            [ $specialSearch, $output, $term ]
3907        );
3908    }
3909
3910    public function onSpecialSearchResultsPrepend( $specialSearch, $output, $term ) {
3911        return $this->container->run(
3912            'SpecialSearchResultsPrepend',
3913            [ $specialSearch, $output, $term ]
3914        );
3915    }
3916
3917    public function onSpecialSearchSetupEngine( $search, $profile, $engine ) {
3918        return $this->container->run(
3919            'SpecialSearchSetupEngine',
3920            [ $search, $profile, $engine ]
3921        );
3922    }
3923
3924    public function onSpecialStatsAddExtra( &$extraStats, $context ) {
3925        return $this->container->run(
3926            'SpecialStatsAddExtra',
3927            [ &$extraStats, $context ]
3928        );
3929    }
3930
3931    public function onSpecialTrackingCategories__generateCatLink( $specialPage,
3932        $catTitle, &$html
3933    ) {
3934        return $this->container->run(
3935            'SpecialTrackingCategories::generateCatLink',
3936            [ $specialPage, $catTitle, &$html ]
3937        );
3938    }
3939
3940    public function onSpecialTrackingCategories__preprocess( $specialPage,
3941        $trackingCategories
3942    ) {
3943        return $this->container->run(
3944            'SpecialTrackingCategories::preprocess',
3945            [ $specialPage, $trackingCategories ]
3946        );
3947    }
3948
3949    public function onSpecialUploadComplete( $form ) {
3950        return $this->container->run(
3951            'SpecialUploadComplete',
3952            [ $form ]
3953        );
3954    }
3955
3956    public function onSpecialVersionVersionUrl( $version, &$versionUrl ) {
3957        return $this->container->run(
3958            'SpecialVersionVersionUrl',
3959            [ $version, &$versionUrl ]
3960        );
3961    }
3962
3963    public function onSpecialWatchlistGetNonRevisionTypes( &$nonRevisionTypes ) {
3964        return $this->container->run(
3965            'SpecialWatchlistGetNonRevisionTypes',
3966            [ &$nonRevisionTypes ]
3967        );
3968    }
3969
3970    public function onSpreadAnyEditBlock( $user, bool &$blockWasSpread ) {
3971        return $this->container->run(
3972            'SpreadAnyEditBlock',
3973            [ $user, &$blockWasSpread ]
3974        );
3975    }
3976
3977    public function onSpecialWhatLinksHereQuery( $table, $data, $queryBuilder ): void {
3978        $this->container->run(
3979            'SpecialWhatLinksHereQuery',
3980            [ $table, $data, $queryBuilder ],
3981            [ 'abortable' => false ]
3982        );
3983    }
3984
3985    public function onTempUserCreatedRedirect(
3986        Session $session,
3987        UserIdentity $user,
3988        string $returnTo,
3989        string $returnToQuery,
3990        string $returnToAnchor,
3991        &$redirectUrl
3992    ) {
3993        return $this->container->run(
3994            'TempUserCreatedRedirect',
3995            [ $session, $user, $returnTo, $returnToQuery, $returnToAnchor, &$redirectUrl ]
3996        );
3997    }
3998
3999    public function onTestCanonicalRedirect( $request, $title, $output ) {
4000        return $this->container->run(
4001            'TestCanonicalRedirect',
4002            [ $request, $title, $output ]
4003        );
4004    }
4005
4006    public function onThumbnailBeforeProduceHTML( $thumbnail, &$attribs,
4007        &$linkAttribs
4008    ) {
4009        return $this->container->run(
4010            'ThumbnailBeforeProduceHTML',
4011            [ $thumbnail, &$attribs, &$linkAttribs ]
4012        );
4013    }
4014
4015    public function onTitleExists( $title, &$exists ) {
4016        return $this->container->run(
4017            'TitleExists',
4018            [ $title, &$exists ]
4019        );
4020    }
4021
4022    public function onTitleGetEditNotices( $title, $oldid, &$notices ) {
4023        return $this->container->run(
4024            'TitleGetEditNotices',
4025            [ $title, $oldid, &$notices ]
4026        );
4027    }
4028
4029    public function onTitleGetRestrictionTypes( $title, &$types ) {
4030        return $this->container->run(
4031            'TitleGetRestrictionTypes',
4032            [ $title, &$types ]
4033        );
4034    }
4035
4036    public function onTitleIsAlwaysKnown( $title, &$isKnown ) {
4037        return $this->container->run(
4038            'TitleIsAlwaysKnown',
4039            [ $title, &$isKnown ]
4040        );
4041    }
4042
4043    public function onTitleIsMovable( $title, &$result ) {
4044        return $this->container->run(
4045            'TitleIsMovable',
4046            [ $title, &$result ]
4047        );
4048    }
4049
4050    public function onTitleMove( $old, $nt, $user, $reason, &$status ) {
4051        return $this->container->run(
4052            'TitleMove',
4053            [ $old, $nt, $user, $reason, &$status ]
4054        );
4055    }
4056
4057    public function onTitleMoveStarting( $old, $nt, $user ) {
4058        return $this->container->run(
4059            'TitleMoveStarting',
4060            [ $old, $nt, $user ]
4061        );
4062    }
4063
4064    public function onTitleQuickPermissions( $title, $user, $action, &$errors,
4065        $doExpensiveQueries, $short
4066    ) {
4067        return $this->container->run(
4068            'TitleQuickPermissions',
4069            [ $title, $user, $action, &$errors, $doExpensiveQueries, $short ]
4070        );
4071    }
4072
4073    public function onTitleReadWhitelist( $title, $user, &$whitelisted ) {
4074        return $this->container->run(
4075            'TitleReadWhitelist',
4076            [ $title, $user, &$whitelisted ]
4077        );
4078    }
4079
4080    public function onTitleSquidURLs( $title, &$urls ) {
4081        return $this->container->run(
4082            'TitleSquidURLs',
4083            [ $title, &$urls ]
4084        );
4085    }
4086
4087    public function onUnblockUser( $block, $user, &$reason ) {
4088        return $this->container->run(
4089            'UnblockUser',
4090            [ $block, $user, &$reason ]
4091        );
4092    }
4093
4094    public function onUnblockUserComplete( $block, $user ) {
4095        return $this->container->run(
4096            'UnblockUserComplete',
4097            [ $block, $user ]
4098        );
4099    }
4100
4101    public function onUndeleteForm__showHistory( &$archive, $title ) {
4102        return $this->container->run(
4103            'UndeleteForm::showHistory',
4104            [ &$archive, $title ]
4105        );
4106    }
4107
4108    public function onUndeleteForm__showRevision( &$archive, $title ) {
4109        return $this->container->run(
4110            'UndeleteForm::showRevision',
4111            [ &$archive, $title ]
4112        );
4113    }
4114
4115    public function onUndeletePageToolLinks( IContextSource $context, LinkRenderer $linkRenderer, array &$links ) {
4116        return $this->container->run(
4117            'UndeletePageToolLinks',
4118            [ $context, $linkRenderer, &$links ]
4119        );
4120    }
4121
4122    public function onUnitTestsAfterDatabaseSetup( $database, $prefix ) {
4123        return $this->container->run(
4124            'UnitTestsAfterDatabaseSetup',
4125            [ $database, $prefix ]
4126        );
4127    }
4128
4129    public function onUnitTestsBeforeDatabaseTeardown() {
4130        return $this->container->run(
4131            'UnitTestsBeforeDatabaseTeardown',
4132            []
4133        );
4134    }
4135
4136    public function onUnitTestsList( &$paths ) {
4137        return $this->container->run(
4138            'UnitTestsList',
4139            [ &$paths ]
4140        );
4141    }
4142
4143    public function onUnwatchArticle( $user, $page, &$status ) {
4144        return $this->container->run(
4145            'UnwatchArticle',
4146            [ $user, $page, &$status ]
4147        );
4148    }
4149
4150    public function onUnwatchArticleComplete( $user, $page ) {
4151        return $this->container->run(
4152            'UnwatchArticleComplete',
4153            [ $user, $page ]
4154        );
4155    }
4156
4157    public function onUpdateUserMailerFormattedPageStatus( &$formattedPageStatus ) {
4158        return $this->container->run(
4159            'UpdateUserMailerFormattedPageStatus',
4160            [ &$formattedPageStatus ]
4161        );
4162    }
4163
4164    public function onUploadComplete( $uploadBase ) {
4165        return $this->container->run(
4166            'UploadComplete',
4167            [ $uploadBase ]
4168        );
4169    }
4170
4171    public function onUploadCreateFromRequest( $type, &$className ) {
4172        return $this->container->run(
4173            'UploadCreateFromRequest',
4174            [ $type, &$className ]
4175        );
4176    }
4177
4178    public function onUploadFormInitDescriptor( &$descriptor ) {
4179        return $this->container->run(
4180            'UploadFormInitDescriptor',
4181            [ &$descriptor ]
4182        );
4183    }
4184
4185    public function onUploadFormSourceDescriptors( &$descriptor, &$radio,
4186        $selectedSourceType
4187    ) {
4188        return $this->container->run(
4189            'UploadFormSourceDescriptors',
4190            [ &$descriptor, &$radio, $selectedSourceType ]
4191        );
4192    }
4193
4194    public function onUploadForm_BeforeProcessing( $upload ) {
4195        return $this->container->run(
4196            'UploadForm:BeforeProcessing',
4197            [ $upload ]
4198        );
4199    }
4200
4201    public function onUploadForm_getInitialPageText( &$pageText, $msg, $config ) {
4202        return $this->container->run(
4203            'UploadForm:getInitialPageText',
4204            [ &$pageText, $msg, $config ]
4205        );
4206    }
4207
4208    public function onUploadForm_initial( $upload ) {
4209        return $this->container->run(
4210            'UploadForm:initial',
4211            [ $upload ]
4212        );
4213    }
4214
4215    public function onUploadStashFile( $upload, $user, $props, &$error ) {
4216        return $this->container->run(
4217            'UploadStashFile',
4218            [ $upload, $user, $props, &$error ]
4219        );
4220    }
4221
4222    public function onUploadVerifyFile( $upload, $mime, &$error ) {
4223        return $this->container->run(
4224            'UploadVerifyFile',
4225            [ $upload, $mime, &$error ]
4226        );
4227    }
4228
4229    public function onUploadVerifyUpload( $upload, $user, $props, $comment,
4230        $pageText, &$error
4231    ) {
4232        return $this->container->run(
4233            'UploadVerifyUpload',
4234            [ $upload, $user, $props, $comment, $pageText, &$error ]
4235        );
4236    }
4237
4238    public function onUserAddGroup( $user, &$group, &$expiry ) {
4239        return $this->container->run(
4240            'UserAddGroup',
4241            [ $user, &$group, &$expiry ]
4242        );
4243    }
4244
4245    public function onUserArrayFromResult( &$userArray, $res ) {
4246        return $this->container->run(
4247            'UserArrayFromResult',
4248            [ &$userArray, $res ]
4249        );
4250    }
4251
4252    public function onUserCan( $title, $user, $action, &$result ) {
4253        return $this->container->run(
4254            'userCan',
4255            [ $title, $user, $action, &$result ]
4256        );
4257    }
4258
4259    public function onUserCanSendEmail( $user, &$hookErr ) {
4260        return $this->container->run(
4261            'UserCanSendEmail',
4262            [ $user, &$hookErr ]
4263        );
4264    }
4265
4266    public function onUserClearNewTalkNotification( $userIdentity, $oldid ) {
4267        return $this->container->run(
4268            'UserClearNewTalkNotification',
4269            [ $userIdentity, $oldid ]
4270        );
4271    }
4272
4273    public function onUserEditCountUpdate( $infos ): void {
4274        $this->container->run(
4275            'UserEditCountUpdate',
4276            [ $infos ],
4277            [ 'abortable' => false ]
4278        );
4279    }
4280
4281    public function onUserEffectiveGroups( $user, &$groups ) {
4282        return $this->container->run(
4283            'UserEffectiveGroups',
4284            [ $user, &$groups ]
4285        );
4286    }
4287
4288    public function onUserGetAllRights( &$rights ) {
4289        return $this->container->run(
4290            'UserGetAllRights',
4291            [ &$rights ]
4292        );
4293    }
4294
4295    public function onUserGetDefaultOptions( &$defaultOptions ) {
4296        return $this->container->run(
4297            'UserGetDefaultOptions',
4298            [ &$defaultOptions ]
4299        );
4300    }
4301
4302    public function onConditionalDefaultOptionsAddCondition( &$extraConditions ): void {
4303        $this->container->run(
4304            'ConditionalDefaultOptionsAddCondition',
4305            [ &$extraConditions ],
4306            [ 'abortable' => false ]
4307        );
4308    }
4309
4310    public function onUserGetEmail( $user, &$email ) {
4311        return $this->container->run(
4312            'UserGetEmail',
4313            [ $user, &$email ]
4314        );
4315    }
4316
4317    public function onUserGetEmailAuthenticationTimestamp( $user, &$timestamp ) {
4318        return $this->container->run(
4319            'UserGetEmailAuthenticationTimestamp',
4320            [ $user, &$timestamp ]
4321        );
4322    }
4323
4324    public function onUserGetLanguageObject( $user, &$code, $context ) {
4325        return $this->container->run(
4326            'UserGetLanguageObject',
4327            [ $user, &$code, $context ]
4328        );
4329    }
4330
4331    public function onUserPrivilegedGroups( $userIdentity, &$groups ) {
4332        return $this->container->run(
4333            'UserPrivilegedGroups',
4334            [ $userIdentity, &$groups ]
4335        );
4336    }
4337
4338    public function onUserGetReservedNames( &$reservedUsernames ) {
4339        return $this->container->run(
4340            'UserGetReservedNames',
4341            [ &$reservedUsernames ]
4342        );
4343    }
4344
4345    public function onUserGetRights( $user, &$rights ) {
4346        return $this->container->run(
4347            'UserGetRights',
4348            [ $user, &$rights ]
4349        );
4350    }
4351
4352    public function onUserGetRightsRemove( $user, &$rights ) {
4353        return $this->container->run(
4354            'UserGetRightsRemove',
4355            [ $user, &$rights ]
4356        );
4357    }
4358
4359    public function onUserGroupsChanged( $user, $added, $removed, $performer,
4360        $reason, $oldUGMs, $newUGMs
4361    ) {
4362        return $this->container->run(
4363            'UserGroupsChanged',
4364            [ $user, $added, $removed, $performer, $reason, $oldUGMs,
4365                $newUGMs ]
4366        );
4367    }
4368
4369    public function onUserIsBlockedFrom( $user, $title, &$blocked, &$allowUsertalk ) {
4370        return $this->container->run(
4371            'UserIsBlockedFrom',
4372            [ $user, $title, &$blocked, &$allowUsertalk ]
4373        );
4374    }
4375
4376    public function onUserIsBlockedGlobally( $user, $ip, &$blocked, &$block ) {
4377        return $this->container->run(
4378            'UserIsBlockedGlobally',
4379            [ $user, $ip, &$blocked, &$block ]
4380        );
4381    }
4382
4383    public function onUserIsBot( $user, &$isBot ) {
4384        return $this->container->run(
4385            'UserIsBot',
4386            [ $user, &$isBot ]
4387        );
4388    }
4389
4390    public function onUserIsEveryoneAllowed( $right ) {
4391        return $this->container->run(
4392            'UserIsEveryoneAllowed',
4393            [ $right ]
4394        );
4395    }
4396
4397    public function onUserIsLocked( $user, &$locked ) {
4398        return $this->container->run(
4399            'UserIsLocked',
4400            [ $user, &$locked ]
4401        );
4402    }
4403
4404    public function onUserLoadAfterLoadFromSession( $user ) {
4405        return $this->container->run(
4406            'UserLoadAfterLoadFromSession',
4407            [ $user ]
4408        );
4409    }
4410
4411    public function onUserLoadDefaults( $user, $name ) {
4412        return $this->container->run(
4413            'UserLoadDefaults',
4414            [ $user, $name ]
4415        );
4416    }
4417
4418    public function onLoadUserOptions( UserIdentity $user, array &$options ): void {
4419        $this->container->run(
4420            'LoadUserOptions',
4421            [ $user, &$options ],
4422            [ 'abortable' => false ]
4423        );
4424    }
4425
4426    public function onUserLoggedIn( $user ) {
4427        return $this->container->run(
4428            'UserLoggedIn',
4429            [ $user ]
4430        );
4431    }
4432
4433    public function onUserLoginComplete( $user, &$inject_html, $direct ) {
4434        return $this->container->run(
4435            'UserLoginComplete',
4436            [ $user, &$inject_html, $direct ]
4437        );
4438    }
4439
4440    public function onUserLogout( $user ) {
4441        return $this->container->run(
4442            'UserLogout',
4443            [ $user ]
4444        );
4445    }
4446
4447    public function onUserLogoutComplete( $user, &$inject_html, $oldName ) {
4448        return $this->container->run(
4449            'UserLogoutComplete',
4450            [ $user, &$inject_html, $oldName ]
4451        );
4452    }
4453
4454    public function onUserMailerChangeReturnPath( $to, &$returnPath ) {
4455        return $this->container->run(
4456            'UserMailerChangeReturnPath',
4457            [ $to, &$returnPath ]
4458        );
4459    }
4460
4461    public function onUserMailerSplitTo( &$to ) {
4462        return $this->container->run(
4463            'UserMailerSplitTo',
4464            [ &$to ]
4465        );
4466    }
4467
4468    public function onUserMailerTransformContent( $to, $from, &$body, &$error ) {
4469        return $this->container->run(
4470            'UserMailerTransformContent',
4471            [ $to, $from, &$body, &$error ]
4472        );
4473    }
4474
4475    public function onUserMailerTransformMessage( $to, $from, &$subject, &$headers,
4476        &$body, &$error
4477    ) {
4478        return $this->container->run(
4479            'UserMailerTransformMessage',
4480            [ $to, $from, &$subject, &$headers, &$body, &$error ]
4481        );
4482    }
4483
4484    public function onUserRemoveGroup( $user, &$group ) {
4485        return $this->container->run(
4486            'UserRemoveGroup',
4487            [ $user, &$group ]
4488        );
4489    }
4490
4491    public function onSaveUserOptions( UserIdentity $user, array &$modifiedOptions, array $originalOptions ) {
4492        return $this->container->run(
4493            'SaveUserOptions',
4494            [ $user, &$modifiedOptions, $originalOptions ]
4495        );
4496    }
4497
4498    public function onUserSaveSettings( $user ) {
4499        return $this->container->run(
4500            'UserSaveSettings',
4501            [ $user ]
4502        );
4503    }
4504
4505    public function onUserSendConfirmationMail( $user, &$mail, $info ) {
4506        return $this->container->run(
4507            'UserSendConfirmationMail',
4508            [ $user, &$mail, $info ]
4509        );
4510    }
4511
4512    public function onUserSetEmail( $user, &$email ) {
4513        return $this->container->run(
4514            'UserSetEmail',
4515            [ $user, &$email ]
4516        );
4517    }
4518
4519    public function onUserSetEmailAuthenticationTimestamp( $user, &$timestamp ) {
4520        return $this->container->run(
4521            'UserSetEmailAuthenticationTimestamp',
4522            [ $user, &$timestamp ]
4523        );
4524    }
4525
4526    public function onUsersPagerDoBatchLookups( $dbr, $userIds, &$cache, &$groups ) {
4527        return $this->container->run(
4528            'UsersPagerDoBatchLookups',
4529            [ $dbr, $userIds, &$cache, &$groups ]
4530        );
4531    }
4532
4533    public function onUserToolLinksEdit( $userId, $userText, &$items ) {
4534        return $this->container->run(
4535            'UserToolLinksEdit',
4536            [ $userId, $userText, &$items ]
4537        );
4538    }
4539
4540    public function onUser__mailPasswordInternal( $user, $ip, $u ) {
4541        return $this->container->run(
4542            'User::mailPasswordInternal',
4543            [ $user, $ip, $u ]
4544        );
4545    }
4546
4547    public function onValidateExtendedMetadataCache( $timestamp, $file ) {
4548        return $this->container->run(
4549            'ValidateExtendedMetadataCache',
4550            [ $timestamp, $file ]
4551        );
4552    }
4553
4554    public function onWantedPages__getQueryInfo( $wantedPages, &$query ) {
4555        return $this->container->run(
4556            'WantedPages::getQueryInfo',
4557            [ $wantedPages, &$query ]
4558        );
4559    }
4560
4561    public function onWatchArticle( $user, $page, &$status, $expiry ) {
4562        return $this->container->run(
4563            'WatchArticle',
4564            [ $user, $page, &$status, $expiry ]
4565        );
4566    }
4567
4568    public function onWatchArticleComplete( $user, $page ) {
4569        return $this->container->run(
4570            'WatchArticleComplete',
4571            [ $user, $page ]
4572        );
4573    }
4574
4575    public function onWatchedItemQueryServiceExtensions( &$extensions,
4576        $watchedItemQueryService
4577    ) {
4578        return $this->container->run(
4579            'WatchedItemQueryServiceExtensions',
4580            [ &$extensions, $watchedItemQueryService ]
4581        );
4582    }
4583
4584    public function onWatchlistEditorBeforeFormRender( &$watchlistInfo ) {
4585        return $this->container->run(
4586            'WatchlistEditorBeforeFormRender',
4587            [ &$watchlistInfo ]
4588        );
4589    }
4590
4591    public function onWatchlistEditorBuildRemoveLine( &$tools, $title, $redirect,
4592        $skin, &$link
4593    ) {
4594        return $this->container->run(
4595            'WatchlistEditorBuildRemoveLine',
4596            [ &$tools, $title, $redirect, $skin, &$link ]
4597        );
4598    }
4599
4600    public function onWebRequestPathInfoRouter( $router ) {
4601        return $this->container->run(
4602            'WebRequestPathInfoRouter',
4603            [ $router ]
4604        );
4605    }
4606
4607    public function onWebResponseSetCookie( &$name, &$value, &$expire, &$options ) {
4608        return $this->container->run(
4609            'WebResponseSetCookie',
4610            [ &$name, &$value, &$expire, &$options ]
4611        );
4612    }
4613
4614    public function onWfShellWikiCmd( &$script, &$parameters, &$options ) {
4615        return $this->container->run(
4616            'wfShellWikiCmd',
4617            [ &$script, &$parameters, &$options ]
4618        );
4619    }
4620
4621    public function onWgQueryPages( &$qp ) {
4622        return $this->container->run(
4623            'wgQueryPages',
4624            [ &$qp ]
4625        );
4626    }
4627
4628    public function onWhatLinksHereProps( $row, $title, $target, &$props ) {
4629        return $this->container->run(
4630            'WhatLinksHereProps',
4631            [ $row, $title, $target, &$props ]
4632        );
4633    }
4634
4635    public function onWikiExporter__dumpStableQuery( &$tables, &$opts, &$join ) {
4636        return $this->container->run(
4637            'WikiExporter::dumpStableQuery',
4638            [ &$tables, &$opts, &$join ]
4639        );
4640    }
4641
4642    public function onWikiPageDeletionUpdates( $page, $content, &$updates ) {
4643        return $this->container->run(
4644            'WikiPageDeletionUpdates',
4645            [ $page, $content, &$updates ]
4646        );
4647    }
4648
4649    public function onWikiPageFactory( $title, &$page ) {
4650        return $this->container->run(
4651            'WikiPageFactory',
4652            [ $title, &$page ]
4653        );
4654    }
4655
4656    public function onXmlDumpWriterOpenPage( $obj, &$out, $row, $title ) {
4657        return $this->container->run(
4658            'XmlDumpWriterOpenPage',
4659            [ $obj, &$out, $row, $title ]
4660        );
4661    }
4662
4663    public function onXmlDumpWriterWriteRevision( $obj, &$out, $row, $text, $rev ) {
4664        return $this->container->run(
4665            'XmlDumpWriterWriteRevision',
4666            [ $obj, &$out, $row, $text, $rev ]
4667        );
4668    }
4669}