summaryrefslogtreecommitdiff
path: root/www/wiki/docs/hooks.txt
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/docs/hooks.txt')
-rw-r--r--www/wiki/docs/hooks.txt3969
1 files changed, 3969 insertions, 0 deletions
diff --git a/www/wiki/docs/hooks.txt b/www/wiki/docs/hooks.txt
new file mode 100644
index 00000000..d932148e
--- /dev/null
+++ b/www/wiki/docs/hooks.txt
@@ -0,0 +1,3969 @@
+hooks.txt
+
+This document describes how event hooks work in MediaWiki; how to add hooks for
+an event; and how to run hooks for an event.
+
+==Glossary==
+
+event
+ Something that happens with the wiki. For example: a user logs in. A wiki
+ page is saved. A wiki page is deleted. Often there are two events
+ associated with a single action: one before the code is run to make the
+ event happen, and one after. Each event has a name, preferably in
+ CamelCase. For example, 'UserLogin', 'PageContentSave',
+ 'PageContentSaveComplete', 'ArticleDelete'.
+
+hook
+ A clump of code and data that should be run when an event happens. This can
+ be either a function and a chunk of data, or an object and a method.
+
+hook function
+ The function part of a hook.
+
+==Rationale==
+
+Hooks allow us to decouple optionally-run code from code that is run for
+everyone. It allows MediaWiki hackers, third-party developers and local
+administrators to define code that will be run at certain points in the mainline
+code, and to modify the data run by that mainline code. Hooks can keep mainline
+code simple, and make it easier to write extensions. Hooks are a principled
+alternative to local patches.
+
+Consider, for example, two options in MediaWiki. One reverses the order of a
+title before displaying the article; the other converts the title to all
+uppercase letters. Currently, in MediaWiki code, we would handle this as follows
+(note: not real code, here):
+
+ function showAnArticle( $article ) {
+ global $wgReverseTitle, $wgCapitalizeTitle;
+
+ if ( $wgReverseTitle ) {
+ wfReverseTitle( $article );
+ }
+
+ if ( $wgCapitalizeTitle ) {
+ wfCapitalizeTitle( $article );
+ }
+
+ # code to actually show the article goes here
+ }
+
+An extension writer, or a local admin, will often add custom code to the
+function -- with or without a global variable. For example, someone wanting
+email notification when an article is shown may add:
+
+ function showAnArticle( $article ) {
+ global $wgReverseTitle, $wgCapitalizeTitle, $wgNotifyArticle;
+
+ if ( $wgReverseTitle ) {
+ wfReverseTitle( $article );
+ }
+
+ if ( $wgCapitalizeTitle ) {
+ wfCapitalizeTitle( $article );
+ }
+
+ # code to actually show the article goes here
+
+ if ( $wgNotifyArticle ) {
+ wfNotifyArticleShow( $article );
+ }
+ }
+
+Using a hook-running strategy, we can avoid having all this option-specific
+stuff in our mainline code. Using hooks, the function becomes:
+
+ function showAnArticle( $article ) {
+ if ( Hooks::run( 'ArticleShow', array( &$article ) ) ) {
+ # code to actually show the article goes here
+
+ Hooks::run( 'ArticleShowComplete', array( &$article ) );
+ }
+ }
+
+We've cleaned up the code here by removing clumps of weird, infrequently used
+code and moving them off somewhere else. It's much easier for someone working
+with this code to see what's _really_ going on, and make changes or fix bugs.
+
+In addition, we can take all the code that deals with the little-used
+title-reversing options (say) and put it in one place. Instead of having little
+title-reversing if-blocks spread all over the codebase in showAnArticle,
+deleteAnArticle, exportArticle, etc., we can concentrate it all in an extension
+file:
+
+ function reverseArticleTitle( $article ) {
+ # ...
+ }
+
+ function reverseForExport( $article ) {
+ # ...
+ }
+
+The setup function for the extension just has to add its hook functions to the
+appropriate events:
+
+ setupTitleReversingExtension() {
+ global $wgHooks;
+
+ $wgHooks['ArticleShow'][] = 'reverseArticleTitle';
+ $wgHooks['ArticleDelete'][] = 'reverseArticleTitle';
+ $wgHooks['ArticleExport'][] = 'reverseForExport';
+ }
+
+Having all this code related to the title-reversion option in one place means
+that it's easier to read and understand; you don't have to do a grep-find to see
+where the $wgReverseTitle variable is used, say.
+
+If the code is well enough isolated, it can even be excluded when not used --
+making for some slight savings in memory and load-up performance at runtime.
+Admins who want to have all the reversed titles can add:
+
+ require_once 'extensions/ReverseTitle.php';
+
+...to their LocalSettings.php file; those of us who don't want or need it can
+just leave it out.
+
+The extensions don't even have to be shipped with MediaWiki; they could be
+provided by a third-party developer or written by the admin him/herself.
+
+==Writing hooks==
+
+A hook is a chunk of code run at some particular event. It consists of:
+
+ * a function with some optional accompanying data, or
+ * an object with a method and some optional accompanying data.
+
+Hooks are registered by adding them to the global $wgHooks array for a given
+event. All the following are valid ways to define hooks:
+
+ $wgHooks['EventName'][] = 'someFunction'; # function, no data
+ $wgHooks['EventName'][] = array( 'someFunction', $someData );
+ $wgHooks['EventName'][] = array( 'someFunction' ); # weird, but OK
+
+ $wgHooks['EventName'][] = $object; # object only
+ $wgHooks['EventName'][] = array( $object, 'someMethod' );
+ $wgHooks['EventName'][] = array( $object, 'someMethod', $someData );
+ $wgHooks['EventName'][] = array( $object ); # weird but OK
+
+When an event occurs, the function (or object method) will be called with the
+optional data provided as well as event-specific parameters. The above examples
+would result in the following code being executed when 'EventName' happened:
+
+ # function, no data
+ someFunction( $param1, $param2 )
+ # function with data
+ someFunction( $someData, $param1, $param2 )
+
+ # object only
+ $object->onEventName( $param1, $param2 )
+ # object with method
+ $object->someMethod( $param1, $param2 )
+ # object with method and data
+ $object->someMethod( $someData, $param1, $param2 )
+
+Note that when an object is the hook, and there's no specified method, the
+default method called is 'onEventName'. For different events this would be
+different: 'onArticleSave', 'onUserLogin', etc.
+
+The extra data is useful if we want to use the same function or object for
+different purposes. For example:
+
+ $wgHooks['PageContentSaveComplete'][] = array( 'ircNotify', 'TimStarling' );
+ $wgHooks['PageContentSaveComplete'][] = array( 'ircNotify', 'brion' );
+
+This code would result in ircNotify being run twice when an article is saved:
+once for 'TimStarling', and once for 'brion'.
+
+Hooks can return three possible values:
+
+ * No return value (or null): the hook has operated successfully. Previously,
+ true was required. This is the default since MediaWiki 1.23.
+ * "some string": an error occurred; processing should stop and the error
+ should be shown to the user
+ * false: the hook has successfully done the work necessary and the calling
+ function should skip
+
+The last result would be for cases where the hook function replaces the main
+functionality. For example, if you wanted to authenticate users to a custom
+system (LDAP, another PHP program, whatever), you could do:
+
+ $wgHooks['UserLogin'][] = array( 'ldapLogin', $ldapServer );
+
+ function ldapLogin( $username, $password ) {
+ # log user into LDAP
+ return false;
+ }
+
+Returning false makes less sense for events where the action is complete, and
+will normally be ignored.
+
+Note that none of the examples made use of create_function() as a way to
+attach a function to a hook. This is known to cause problems (notably with
+Special:Version), and should be avoided when at all possible.
+
+==Using hooks==
+
+A calling function or method uses the Hooks::run() function to run the hooks
+related to a particular event, like so:
+
+ class Article {
+ # ...
+ function protect() {
+ global $wgUser;
+
+ // Avoid PHP 7.1 warning from passing $this by reference
+ $article = $this;
+
+ if ( Hooks::run( 'ArticleProtect', [ &$article, &$wgUser ] ) ) {
+ # protect the article
+ Hooks::run( 'ArticleProtectComplete', [ &$article, &$wgUser ] );
+ }
+ }
+ }
+
+Hooks::run() returns true if the calling function should continue processing
+(the hooks ran OK, or there are no hooks to run), or false if it shouldn't (an
+error occurred, or one of the hooks handled the action already). Checking the
+return value matters more for "before" hooks than for "complete" hooks.
+
+Hooks::run() was added in MediaWiki 1.18, before that the global function
+wfRunHooks must be used, which was deprecated in MediaWiki 1.25.
+
+Note that hook parameters are passed in an array; this is a necessary
+inconvenience to make it possible to pass reference values (that can be changed)
+into the hook code. Also note that earlier versions of wfRunHooks took a
+variable number of arguments; the array() calling protocol came about after
+MediaWiki 1.4rc1.
+
+==Events and parameters==
+
+This is a list of known events and parameters; please add to it if you're going
+to add events to the MediaWiki code.
+
+'AbortAutoAccount': DEPRECATED! Create a PreAuthenticationProvider instead.
+Return false to cancel automated local account creation, where normally
+authentication against an external auth plugin would be creating a local
+account.
+$user: the User object about to be created (read-only, incomplete)
+&$abortMsg: out parameter: name of error message to be displayed to user
+
+'AbortAutoblock': Return false to cancel an autoblock.
+$autoblockip: The IP going to be autoblocked.
+&$block: The block from which the autoblock is coming.
+
+'AbortDiffCache': Can be used to cancel the caching of a diff.
+&$diffEngine: DifferenceEngine object
+
+'AbortEmailNotification': Can be used to cancel email notifications for an edit.
+$editor: The User who made the change.
+$title: The Title of the page that was edited.
+$rc: The current RecentChange object.
+
+'AbortLogin': DEPRECATED! Create a PreAuthenticationProvider instead.
+Return false to cancel account login.
+$user: the User object being authenticated against
+$password: the password being submitted, not yet checked for validity
+&$retval: a LoginForm class constant to return from authenticateUserData();
+ default is LoginForm::ABORTED. Note that the client may be using a machine
+ API rather than the HTML user interface.
+&$msg: the message identifier for abort reason (new in 1.18, not available
+ before 1.18)
+
+'AbortNewAccount': DEPRECATED! Create a PreAuthenticationProvider instead.
+Return false to cancel explicit account creation.
+$user: the User object about to be created (read-only, incomplete)
+&$msg: out parameter: HTML to display on abort
+&$status: out parameter: Status object to return, replaces the older $msg param
+ (added in 1.23)
+ Create the object with Status::newFatal() to ensure proper API error
+ messages are returned when creating account through API clients.
+
+'AbortTalkPageEmailNotification': Return false to cancel talk page email
+notification
+$targetUser: the user whom to send talk page email notification
+$title: the page title
+
+'ActionBeforeFormDisplay': Before executing the HTMLForm object.
+$name: name of the action
+&$form: HTMLForm object
+$article: Article object
+
+'ActionModifyFormFields': Before creating an HTMLForm object for a page action;
+Allows to change the fields on the form that will be generated.
+$name: name of the action
+&$fields: HTMLForm descriptor array
+$article: Article object
+
+'AddNewAccount': DEPRECATED! Use LocalUserCreated.
+After a user account is created.
+$user: the User object that was created. (Parameter added in 1.7)
+$byEmail: true when account was created "by email" (added in 1.12)
+
+'AfterBuildFeedLinks': Executed in OutputPage.php after all feed links (atom, rss,...)
+are created. Can be used to omit specific feeds from being outputted. You must not use
+this hook to add feeds, use OutputPage::addFeedLink() instead.
+&$feedLinks: Array of created feed links
+
+'AfterFinalPageOutput': Nearly at the end of OutputPage::output() but
+before OutputPage::sendCacheControl() and final ob_end_flush() which
+will send the buffered output to the client. This allows for last-minute
+modification of the output within the buffer by using ob_get_clean().
+$output: The OutputPage object where output() was called
+
+'AfterImportPage': When a page import is completed.
+$title: Title under which the revisions were imported
+$foreignTitle: ForeignTitle object based on data provided by the XML file
+$revCount: Number of revisions in the XML file
+$sRevCount: Number of successfully imported revisions
+$pageInfo: associative array of page information
+
+'AfterParserFetchFileAndTitle': After an image gallery is formed by Parser,
+just before adding its HTML to parser output.
+$parser: Parser object that called the hook
+$ig: Gallery, an object of one of the gallery classes (inheriting from
+ ImageGalleryBase)
+&$html: HTML generated by the gallery
+
+'AlternateEdit': Before checking if a user can edit a page and before showing
+the edit form ( EditPage::edit() ). This is triggered on &action=edit.
+$editPage: the EditPage object
+
+'AlternateEditPreview': Before generating the preview of the page when editing
+( EditPage::getPreviewText() ).
+Return false and set $previewHTML and $parserOutput to output custom page
+preview HTML.
+$editPage: the EditPage object
+&$content: the Content object for the text field from the edit page
+&$previewHTML: Text to be placed into the page for the preview
+&$parserOutput: the ParserOutput object for the preview
+
+'AlternateUserMailer': Called before mail is sent so that mail could be logged
+(or something else) instead of using PEAR or PHP's mail(). Return false to skip
+the regular method of sending mail. Return a string to return a php-mail-error
+message containing the error. Returning true will continue with sending email
+in the regular way.
+$headers: Associative array of headers for the email
+$to: MailAddress object or array
+$from: From address
+$subject: Subject of the email
+$body: Body of the message
+
+'APIAfterExecute': After calling the execute() method of an API module. Use
+this to extend core API modules.
+&$module: Module object
+
+'ApiBeforeMain': Before calling ApiMain's execute() method in api.php.
+&$main: ApiMain object
+
+'ApiCheckCanExecute': Called during ApiMain::checkCanExecute. Use to further
+authenticate and authorize API clients before executing the module. Return
+false and set a message to cancel the request.
+$module: Module object
+$user: Current user
+&$message: API message to die with. Specific values accepted depend on the
+ MediaWiki version:
+ * 1.29+: IApiMessage, Message, string message key, or key+parameters array to
+ pass to ApiBase::dieWithError().
+ * 1.27+: IApiMessage, or a key or key+parameters in ApiBase::$messageMap.
+ * Earlier: A key or key+parameters in ApiBase::$messageMap.
+
+'ApiDeprecationHelp': Add messages to the 'deprecation-help' warning generated
+from ApiBase::addDeprecation().
+&$msgs: Message[] Messages to include in the help. Multiple messages will be
+ joined with spaces.
+
+'APIEditBeforeSave': DEPRECATED! Use EditFilterMergedContent instead.
+Before saving a page with api.php?action=edit, after
+processing request parameters. Return false to let the request fail, returning
+an error message or an <edit result="Failure"> tag if $resultArr was filled.
+Unlike for example 'EditFilterMergedContent' this also being run on undo.
+Since MediaWiki 1.25, 'EditFilterMergedContent' can also return error details
+for the API and it's recommended to use it instead of this hook.
+$editPage: the EditPage object
+$text: the text passed to the API. Note that this includes only the single
+ section for section edit, and is not necessarily the final text in case of
+ automatically resolved edit conflicts.
+&$resultArr: data in this array will be added to the API result
+
+'ApiFeedContributions::feedItem': Called to convert the result of ContribsPager
+into a FeedItem instance that ApiFeedContributions can consume. Implementors of
+this hook may cancel the hook to signal that the item is not viewable in the
+provided context.
+$row: A row of data from ContribsPager. The set of data returned by
+ ContribsPager can be adjusted by handling the ContribsPager::reallyDoQuery
+ hook.
+$context: An IContextSource implementation.
+&$feedItem: Set this to a FeedItem instance if the callback can handle the
+ provided row. This is provided to the hook as a null, if it is non null then
+ another callback has already handled the hook.
+
+'ApiFormatHighlight': Use to syntax-highlight API pretty-printed output. When
+highlighting, add output to $context->getOutput() and return false.
+$context: An IContextSource.
+$text: Text to be highlighted.
+$mime: MIME type of $text.
+$format: API format code for $text.
+
+'APIGetAllowedParams': Use this hook to modify a module's parameters.
+&$module: ApiBase Module object
+&$params: Array of parameters
+$flags: int zero or OR-ed flags like ApiBase::GET_VALUES_FOR_HELP
+
+'APIGetDescription': DEPRECATED! Use APIGetDescriptionMessages instead.
+Use this hook to modify a module's description.
+&$module: ApiBase Module object
+&$desc: String description, or array of description strings
+
+'APIGetDescriptionMessages': Use this hook to modify a module's help message.
+$module: ApiBase Module object
+&$msg: Array of Message objects
+
+'APIGetParamDescription': DEPRECATED! Use APIGetParamDescriptionMessages
+instead.
+Use this hook to modify a module's parameter descriptions.
+&$module: ApiBase Module object
+&$desc: Array of parameter descriptions
+
+'APIGetParamDescriptionMessages': Use this hook to modify a module's parameter
+descriptions.
+$module: ApiBase Module object
+&$msg: Array of arrays of Message objects
+
+'APIHelpModifyOutput': Use this hook to modify an API module's help output.
+$module: ApiBase Module object
+&$help: Array of HTML strings to be joined for the output.
+$options: Array Options passed to ApiHelp::getHelp
+&$tocData: Array If a TOC is being generated, this array has keys as anchors in
+ the page and values as for Linker::generateTOC().
+
+'ApiMain::moduleManager': Called when ApiMain has finished initializing its
+module manager. Can be used to conditionally register API modules.
+$moduleManager: ApiModuleManager Module manager instance
+
+'ApiMain::onException': Called by ApiMain::executeActionWithErrorHandling() when
+an exception is thrown during API action execution.
+$apiMain: Calling ApiMain instance.
+$e: Exception object.
+
+'ApiMakeParserOptions': Called from ApiParse and ApiExpandTemplates to allow
+extensions to adjust the ParserOptions before parsing.
+$options: ParserOptions object
+$title: Title to be parsed
+$params: Parameter array for the API module
+$module: API module (which is also a ContextSource)
+&$reset: Set to a ScopedCallback used to reset any hooks after the parse is done.
+&$suppressCache: Set true if cache should be suppressed.
+
+'ApiOpenSearchSuggest': Called when constructing the OpenSearch results. Hooks
+can alter or append to the array.
+&$results: array with integer keys to associative arrays. Keys in associative
+ array:
+ - title: Title object.
+ - redirect from: Title or null.
+ - extract: Description for this result.
+ - extract trimmed: If truthy, the extract will not be trimmed to
+ $wgOpenSearchDescriptionLength.
+ - image: Thumbnail for this result. Value is an array with subkeys 'source'
+ (url), 'width', 'height', 'alt', 'align'.
+ - url: Url for the given title.
+
+'ApiQuery::moduleManager': Called when ApiQuery has finished initializing its
+module manager. Can be used to conditionally register API query modules.
+$moduleManager: ApiModuleManager Module manager instance
+
+'APIQueryAfterExecute': After calling the execute() method of an
+action=query submodule. Use this to extend core API modules.
+&$module: Module object
+
+'ApiQueryBaseAfterQuery': Called for (some) API query modules after the
+database query has returned. An API query module wanting to use this hook
+should see the ApiQueryBase::select() and ApiQueryBase::processRow()
+documentation.
+$module: ApiQueryBase module in question
+$result: ResultWrapper|bool returned from the IDatabase::select()
+&$hookData: array that was passed to the 'ApiQueryBaseBeforeQuery' hook and
+ will be passed to the 'ApiQueryBaseProcessRow' hook, intended for inter-hook
+ communication.
+
+'ApiQueryBaseBeforeQuery': Called for (some) API query modules before a
+database query is made. WARNING: It would be very easy to misuse this hook and
+break the module! Any joins added *must* join on a unique key of the target
+table unless you really know what you're doing. An API query module wanting to
+use this hook should see the ApiQueryBase::select() and
+ApiQueryBase::processRow() documentation.
+$module: ApiQueryBase module in question
+&$tables: array of tables to be queried
+&$fields: array of columns to select
+&$conds: array of WHERE conditionals for query
+&$query_options: array of options for the database request
+&$join_conds: join conditions for the tables
+&$hookData: array that will be passed to the 'ApiQueryBaseAfterQuery' and
+ 'ApiQueryBaseProcessRow' hooks, intended for inter-hook communication.
+
+'ApiQueryBaseProcessRow': Called for (some) API query modules as each row of
+the database result is processed. Return false to stop processing the result
+set. An API query module wanting to use this hook should see the
+ApiQueryBase::select() and ApiQueryBase::processRow() documentation.
+$module: ApiQueryBase module in question
+$row: stdClass Database result row
+&$data: array to be included in the ApiResult.
+&$hookData: array that was be passed to the 'ApiQueryBaseBeforeQuery' and
+ 'ApiQueryBaseAfterQuery' hooks, intended for inter-hook communication.
+
+'APIQueryGeneratorAfterExecute': After calling the executeGenerator() method of
+an action=query submodule. Use this to extend core API modules.
+&$module: Module object
+&$resultPageSet: ApiPageSet object
+
+'APIQueryInfoTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to add custom tokens to prop=info. Every token has an action,
+which will be used in the intoken parameter and in the output
+(actiontoken="..."), and a callback function which should return the token, or
+false if the user isn't allowed to obtain it. The prototype of the callback
+function is func($pageid, $title), where $pageid is the page ID of the page the
+token is requested for and $title is the associated Title object. In the hook,
+just add your callback to the $tokenFunctions array and return true (returning
+false makes no sense).
+&$tokenFunctions: array(action => callback)
+
+'APIQueryRecentChangesTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes
+instead.
+Use this hook to add custom tokens to list=recentchanges. Every token has an
+action, which will be used in the rctoken parameter and in the output
+(actiontoken="..."), and a callback function which should return the token, or
+false if the user isn't allowed to obtain it. The prototype of the callback
+function is func($pageid, $title, $rc), where $pageid is the page ID of the
+page associated to the revision the token is requested for, $title the
+associated Title object and $rc the associated RecentChange object. In the
+hook, just add your callback to the $tokenFunctions array and return true
+(returning false makes no sense).
+&$tokenFunctions: array(action => callback)
+
+'APIQueryRevisionsTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to add custom tokens to prop=revisions. Every token has an
+action, which will be used in the rvtoken parameter and in the output
+(actiontoken="..."), and a callback function which should return the token, or
+false if the user isn't allowed to obtain it. The prototype of the callback
+function is func($pageid, $title, $rev), where $pageid is the page ID of the
+page associated to the revision the token is requested for, $title the
+associated Title object and $rev the associated Revision object. In the hook,
+just add your callback to the $tokenFunctions array and return true (returning
+false makes no sense).
+&$tokenFunctions: array(action => callback)
+
+'APIQuerySiteInfoGeneralInfo': Use this hook to add extra information to the
+sites general information.
+$module: the current ApiQuerySiteInfo module
+&$results: array of results, add things here
+
+'APIQuerySiteInfoStatisticsInfo': Use this hook to add extra information to the
+sites statistics information.
+&$results: array of results, add things here
+
+'ApiQueryTokensRegisterTypes': Use this hook to add additional token types to
+action=query&meta=tokens. Note that most modules will probably be able to use
+the 'csrf' token instead of creating their own token types.
+&$salts: array( type => salt to pass to User::getEditToken() or array of salt
+ and key to pass to Session::getToken() )
+
+'APIQueryUsersTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to add custom token to list=users. Every token has an action,
+which will be used in the ustoken parameter and in the output
+(actiontoken="..."), and a callback function which should return the token, or
+false if the user isn't allowed to obtain it. The prototype of the callback
+function is func($user) where $user is the User object. In the hook, just add
+your callback to the $tokenFunctions array and return true (returning false
+makes no sense).
+&$tokenFunctions: array(action => callback)
+
+'ApiQueryWatchlistExtractOutputData': Extract row data for ApiQueryWatchlist.
+$module: ApiQueryWatchlist instance
+$watchedItem: WatchedItem instance
+$recentChangeInfo: Array of recent change info data
+&$vals: Associative array of data to be output for the row
+
+'ApiQueryWatchlistPrepareWatchedItemQueryServiceOptions': Populate the options
+to be passed from ApiQueryWatchlist to WatchedItemQueryService.
+$module: ApiQueryWatchlist instance
+$params: Array of parameters, as would be returned by $module->extractRequestParams()
+&$options: Array of options for WatchedItemQueryService::getWatchedItemsWithRecentChangeInfo()
+
+'ApiRsdServiceApis': Add or remove APIs from the RSD services list. Each service
+should have its own entry in the $apis array and have a unique name, passed as
+key for the array that represents the service data. In this data array, the
+key-value-pair identified by the apiLink key is required.
+&$apis: array of services
+
+'ApiTokensGetTokenTypes': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to extend action=tokens with new token types.
+&$tokenTypes: supported token types in format 'type' => callback function
+ used to retrieve this type of tokens.
+
+'ApiValidatePassword': Called from ApiValidatePassword.
+$module: ApiValidatePassword instance.
+&$r: Result array.
+
+'Article::MissingArticleConditions': Before fetching deletion & move log entries
+to display a message of a non-existing page being deleted/moved, give extensions
+a chance to hide their (unrelated) log entries.
+&$conds: Array of query conditions (all of which have to be met; conditions will
+ AND in the final query)
+$logTypes: Array of log types being queried
+
+'ArticleAfterFetchContentObject': After fetching content of an article from the
+database.
+&$article: the article (object) being loaded from the database
+&$content: the content of the article, as a Content object
+
+'ArticleConfirmDelete': Before writing the confirmation form for article
+deletion.
+$article: the article (object) being deleted
+$output: the OutputPage object
+&$reason: the reason (string) the article is being deleted
+
+'ArticleContentOnDiff': Before showing the article content below a diff. Use
+this to change the content in this area or how it is loaded.
+$diffEngine: the DifferenceEngine
+$output: the OutputPage object
+
+'ArticleContentViewCustom': Allows to output the text of the article in a
+different format than wikitext. Note that it is preferable to implement proper
+handing for a custom data type using the ContentHandler facility.
+$content: content of the page, as a Content object
+$title: title of the page
+$output: reference to $wgOut
+
+'ArticleDelete': Before an article is deleted.
+&$wikiPage: the WikiPage (object) being deleted
+&$user: the user (object) deleting the article
+&$reason: the reason (string) the article is being deleted
+&$error: if the deletion was prohibited, the (raw HTML) error message to display
+ (added in 1.13)
+&$status: Status object, modify this to throw an error. Overridden by $error
+ (added in 1.20)
+$suppress: Whether this is a suppression deletion or not (added in 1.27)
+
+'ArticleDeleteAfterSuccess': Output after an article has been deleted.
+$title: Title of the article that has been deleted.
+$outputPage: OutputPage that can be used to append the output.
+
+'ArticleDeleteComplete': After an article is deleted.
+&$wikiPage: the WikiPage that was deleted
+&$user: the user that deleted the article
+$reason: the reason the article was deleted
+$id: id of the article that was deleted
+$content: the Content of the deleted page (or null, when deleting a broken page)
+$logEntry: the ManualLogEntry used to record the deletion
+$archivedRevisionCount: the number of revisions archived during the deletion
+
+'ArticleEditUpdateNewTalk': Before updating user_newtalk when a user talk page
+was changed.
+&$wikiPage: WikiPage (object) of the user talk page
+$recipient: User (object) who's talk page was edited
+
+'ArticleEditUpdates': When edit updates (mainly link tracking) are made when an
+article has been changed.
+&$wikiPage: the WikiPage (object)
+&$editInfo: data holder that includes the parser output ($editInfo->output) for
+ that page after the change
+$changed: bool for if the page was changed
+
+'ArticleEditUpdatesDeleteFromRecentchanges': Before deleting old entries from
+recentchanges table, return false to not delete old entries.
+&$wikiPage: WikiPage (object) being modified
+
+'ArticleFromTitle': when creating an article object from a title object using
+Wiki::articleFromTitle().
+&$title: Title (object) used to create the article object
+&$article: Article (object) that will be returned
+$context: IContextSource (object)
+
+'ArticleMergeComplete': After merging to article using Special:Mergehistory.
+$targetTitle: target title (object)
+$destTitle: destination title (object)
+
+'ArticlePageDataAfter': After loading data of an article from the database.
+&$wikiPage: WikiPage (object) whose data were loaded
+&$row: row (object) returned from the database server
+
+'ArticlePageDataBefore': Before loading data of an article from the database.
+&$wikiPage: WikiPage (object) that data will be loaded
+&$fields: fields (array) to load from the database
+&$tables: tables (array) to load from the database
+&$joinConds: join conditions (array) to load from the database
+
+'ArticlePrepareTextForEdit': Called when preparing text to be saved.
+$wikiPage: the WikiPage being saved
+$popts: parser options to be used for pre-save transformation
+
+'ArticleProtect': Before an article is protected.
+&$wikiPage: the WikiPage being protected
+&$user: the user doing the protection
+$protect: Set of restriction keys
+$reason: Reason for protect
+
+'ArticleProtectComplete': After an article is protected.
+&$wikiPage: the WikiPage that was protected
+&$user: the user who did the protection
+$protect: Set of restriction keys
+$reason: Reason for protect
+
+'ArticlePurge': Before executing "&action=purge".
+&$wikiPage: WikiPage (object) to purge
+
+'ArticleRevisionUndeleted': After an article revision is restored.
+&$title: the article title
+$revision: the revision
+$oldPageID: the page ID of the revision when archived (may be null)
+
+'ArticleRevisionVisibilitySet': Called when changing visibility of one or more
+revisions of an article.
+$title: Title object of the article
+$ids: Ids to set the visibility for
+$visibilityChangeMap: Map of revision id to oldBits and newBits. This array can be
+ examined to determine exactly what visibility bits have changed for each
+ revision. This array is of the form
+ [id => ['oldBits' => $oldBits, 'newBits' => $newBits], ... ]
+
+'ArticleRollbackComplete': After an article rollback is completed.
+$wikiPage: the WikiPage that was edited
+$user: the user who did the rollback
+$revision: the revision the page was reverted back to
+$current: the reverted revision
+
+'ArticleUndelete': When one or more revisions of an article are restored.
+&$title: Title corresponding to the article restored
+$create: Whether or not the restoration caused the page to be created (i.e. it
+ didn't exist before).
+$comment: The comment associated with the undeletion.
+$oldPageId: ID of page previously deleted (from archive table). This ID will be used
+ for the restored page.
+$restoredPages: Set of page IDs that have revisions restored for this undelete,
+ with keys being page IDs and values are 'true'.
+
+'ArticleUndeleteLogEntry': When a log entry is generated but not yet saved.
+$pageArchive: the PageArchive object
+&$logEntry: ManualLogEntry object
+$user: User who is performing the log action
+
+'ArticleUpdateBeforeRedirect': After a page is updated (usually on save), before
+the user is redirected back to the page.
+$article: the article
+&$sectionanchor: The section anchor link (e.g. "#overview" )
+&$extraq: Extra query parameters which can be added via hooked functions
+
+'ArticleViewFooter': After showing the footer section of an ordinary page view
+$article: Article object
+$patrolFooterShown: boolean whether patrol footer is shown
+
+'ArticleViewHeader': Before the parser cache is about to be tried for article
+viewing.
+&$article: the article
+&$pcache: whether to try the parser cache or not
+&$outputDone: whether the output for this page finished or not. Set to
+ a ParserOutput object to both indicate that the output is done and what
+ parser output was used.
+
+'ArticleViewRedirect': Before setting "Redirected from ..." subtitle when a
+redirect was followed.
+&$article: target article (object)
+
+'AuthChangeFormFields': After converting a field information array obtained
+from a set of AuthenticationRequest classes into a form descriptor; hooks
+can tweak the array to change how login etc. forms should look.
+$requests: array of AuthenticationRequests the fields are created from
+$fieldInfo: field information array (union of all AuthenticationRequest::getFieldInfo() responses).
+&$formDescriptor: HTMLForm descriptor. The special key 'weight' can be set
+ to change the order of the fields.
+$action: one of the AuthManager::ACTION_* constants.
+
+'AuthManagerLoginAuthenticateAudit': A login attempt either succeeded or failed
+for a reason other than misconfiguration or session loss. No return data is
+accepted; this hook is for auditing only.
+$response: The MediaWiki\Auth\AuthenticationResponse in either a PASS or FAIL state.
+$user: The User object being authenticated against, or null if authentication
+ failed before getting that far.
+$username: A guess at the user name being authenticated, or null if we can't
+ even determine that.
+
+'AuthPluginAutoCreate': DEPRECATED! Use the 'LocalUserCreated' hook instead.
+Called when creating a local account for an user logged in from an external
+authentication method.
+$user: User object created locally
+
+'AuthPluginSetup': DEPRECATED! Extensions should be updated to use AuthManager.
+Update or replace authentication plugin object ($wgAuth). Gives a chance for an
+extension to set it programmatically to a variable class.
+&$auth: the $wgAuth object, probably a stub
+
+'AutopromoteCondition': Check autopromote condition for user.
+$type: condition type
+$args: arguments
+$user: user
+&$result: result of checking autopromote condition
+
+'BacklinkCacheGetConditions': Allows to set conditions for query when links to
+certain title are fetched.
+$table: table name
+$title: title of the page to which backlinks are sought
+&$conds: query conditions
+
+'BacklinkCacheGetPrefix': Allows to set prefix for a specific link table.
+$table: table name
+&$prefix: prefix
+
+'BadImage': When checking against the bad image list. Change $bad and return
+false to override. If an image is "bad", it is not rendered inline in wiki
+pages or galleries in category pages.
+$name: Image name being checked
+&$bad: Whether or not the image is "bad"
+
+'BaseTemplateAfterPortlet': After output of portlets, allow injecting
+custom HTML after the section. Any uses of the hook need to handle escaping.
+$template: BaseTemplate
+$portlet: string portlet name
+&$html: string
+
+'BaseTemplateToolbox': Called by BaseTemplate when building the $toolbox array
+and returning it for the skin to output. You can add items to the toolbox while
+still letting the skin make final decisions on skin-specific markup conventions
+using this hook.
+&$sk: The BaseTemplate base skin template
+&$toolbox: An array of toolbox items, see BaseTemplate::getToolbox and
+ BaseTemplate::makeListItem for details on the format of individual items
+ inside of this array.
+
+'BeforeDisplayNoArticleText': Before displaying message key "noarticletext" or
+"noarticletext-nopermission" at Article::showMissingArticle().
+$article: article object
+
+'BeforeHttpsRedirect': Prior to forcing HTTP->HTTPS redirect. Gives a chance to
+override how the redirect is output by modifying, or by returning false, and
+letting standard HTTP rendering take place.
+ATTENTION: This hook is likely to be removed soon due to overall design of the
+system.
+$context: IContextSource object
+&$redirect: string URL, modifiable
+
+'BeforeInitialize': Before anything is initialized in
+MediaWiki::performRequest().
+&$title: Title being used for request
+&$unused: null
+&$output: OutputPage object
+&$user: User
+$request: WebRequest object
+$mediaWiki: Mediawiki object
+
+'BeforePageDisplay': Prior to outputting a page.
+&$out: OutputPage object
+&$skin: Skin object
+
+'BeforePageRedirect': Prior to sending an HTTP redirect. Gives a chance to
+override how the redirect is output by modifying, or by returning false and
+taking over the output.
+$out: OutputPage object
+&$redirect: URL, modifiable
+&$code: HTTP code (eg '301' or '302'), modifiable
+
+'BeforeParserFetchFileAndTitle': Before an image is rendered by Parser.
+$parser: Parser object
+$nt: the image title
+&$options: array of options to RepoGroup::findFile. If it contains 'broken'
+ as a key then the file will appear as a broken thumbnail.
+&$descQuery: query string to add to thumbnail URL
+
+'BeforeParserFetchTemplateAndtitle': Before a template is fetched by Parser.
+$parser: Parser object
+$title: title of the template
+&$skip: skip this template and link it?
+&$id: the id of the revision being parsed
+
+'BeforeParserrenderImageGallery': Before an image gallery is rendered by Parser.
+&$parser: Parser object
+&$ig: ImageGallery object
+
+'BeforeWelcomeCreation': Before the welcomecreation message is displayed to a
+newly created user.
+&$welcome_creation_msg: MediaWiki message name to display on the welcome screen
+ to a newly created user account.
+&$injected_html: Any HTML to inject after the "logged in" message of a newly
+ created user account
+
+'BitmapHandlerCheckImageArea': By BitmapHandler::normaliseParams, after all
+normalizations have been performed, except for the $wgMaxImageArea check.
+$image: File
+&$params: Array of parameters
+&$checkImageAreaHookResult: null, set to true or false to override the
+ $wgMaxImageArea check result.
+
+'BitmapHandlerTransform': before a file is transformed, gives extension the
+possibility to transform it themselves
+$handler: BitmapHandler
+$image: File
+&$scalerParams: Array with scaler parameters
+&$mto: null, set to a MediaTransformOutput
+
+'BlockIp': Before an IP address or user is blocked.
+&$block: the Block object about to be saved
+&$user: the user _doing_ the block (not the one being blocked)
+&$reason: if the hook is aborted, the error message to be returned in an array
+
+'BlockIpComplete': After an IP address or user is blocked.
+$block: the Block object that was saved
+$user: the user who did the block (not the one being blocked)
+$priorBlock: the Block object for the prior block or null if there was none
+
+'BookInformation': Before information output on Special:Booksources.
+$isbn: ISBN to show information for
+$output: OutputPage object in use
+
+'CanIPUseHTTPS': Determine whether the client at a given source IP is likely
+to be able to access the wiki via HTTPS.
+$ip: The IP address in human-readable form
+&$canDo: This reference should be set to false if the client may not be able
+ to use HTTPS
+
+'CanonicalNamespaces': For extensions adding their own namespaces or altering
+the defaults.
+Note that if you need to specify namespace protection or content model for
+a namespace that is added in a CanonicalNamespaces hook handler, you
+should do so by altering $wgNamespaceProtection and
+$wgNamespaceContentModels outside the handler, in top-level scope. The
+point at which the CanonicalNamespaces hook fires is too late for altering
+these variables. This applies even if the namespace addition is
+conditional; it is permissible to declare a content model and protection
+for a namespace and then decline to actually register it.
+&$namespaces: Array of namespace numbers with corresponding canonical names
+
+'CategoryAfterPageAdded': After a page is added to a category.
+$category: Category that page was added to
+$wikiPage: WikiPage that was added
+
+'CategoryAfterPageRemoved': After a page is removed from a category.
+$category: Category that page was removed from
+$wikiPage: WikiPage that was removed
+$id: the page ID (original ID in case of page deletions)
+
+'CategoryPageView': Before viewing a categorypage in CategoryPage::view.
+&$catpage: CategoryPage instance
+
+'CategoryViewer::doCategoryQuery': After querying for pages to be displayed
+in a Category page. Gives extensions the opportunity to batch load any
+related data about the pages.
+$type: The category type. Either 'page', 'file' or 'subcat'
+$res: Query result from Wikimedia\Rdbms\IDatabase::select()
+
+'CategoryViewer::generateLink': Before generating an output link allow
+extensions opportunity to generate a more specific or relevant link.
+$type: The category type. Either 'page', 'img' or 'subcat'
+$title: Title object for the categorized page
+$html: Requested html content of anchor
+&$link: Returned value. When set to a non-null value by a hook subscriber
+ this value will be used as the anchor instead of Linker::link
+
+'ChangeAuthenticationDataAudit': Called when user changes his password.
+No return data is accepted; this hook is for auditing only.
+$req: AuthenticationRequest object describing the change (and target user)
+$status: StatusValue with the result of the action
+
+'ChangePasswordForm': DEPRECATED! Use AuthChangeFormFields or security levels.
+For extensions that need to add a field to the ChangePassword form via the
+Preferences form.
+&$extraFields: An array of arrays that hold fields like would be passed to the
+ pretty function.
+
+'ChangesListInitRows': Batch process change list rows prior to rendering.
+$changesList: ChangesList instance
+$rows: The data that will be rendered. May be a ResultWrapper instance or
+ an array.
+
+'ChangesListInsertArticleLink': Override or augment link to article in RC list.
+&$changesList: ChangesList instance.
+&$articlelink: HTML of link to article (already filled-in).
+&$s: HTML of row that is being constructed.
+&$rc: RecentChange instance.
+$unpatrolled: Whether or not we are showing unpatrolled changes.
+$watched: Whether or not the change is watched by the user.
+
+'ChangesListSpecialPageFilters': DEPRECATED! Use 'ChangesListSpecialPageStructuredFilters'
+instead.
+Called after building form options on pages
+inheriting from ChangesListSpecialPage (in core: RecentChanges,
+RecentChangesLinked and Watchlist).
+$special: ChangesListSpecialPage instance
+&$filters: associative array of filter definitions. The keys are the HTML
+ name/URL parameters. Each key maps to an associative array with a 'msg'
+ (message key) and a 'default' value.
+
+'ChangesListSpecialPageQuery': Called when building SQL query on pages
+inheriting from ChangesListSpecialPage (in core: RecentChanges,
+RecentChangesLinked and Watchlist).
+Do not use this to implement individual filters if they are compatible with the
+ChangesListFilter and ChangesListFilterGroup structure.
+Instead, use sub-classes of those classes, in conjunction with the
+ChangesListSpecialPageStructuredFilters hook.
+This hook can be used to implement filters that do not implement that structure,
+or custom behavior that is not an individual filter.
+$name: name of the special page, e.g. 'Watchlist'
+&$tables: array of tables to be queried
+&$fields: array of columns to select
+&$conds: array of WHERE conditionals for query
+&$query_options: array of options for the database request
+&$join_conds: join conditions for the tables
+$opts: FormOptions for this request
+
+'ChangesListSpecialPageStructuredFilters': Called to allow extensions to register
+filters for pages inheriting from ChangesListSpecialPage (in core: RecentChanges,
+RecentChangesLinked, and Watchlist). Generally, you will want to construct
+new ChangesListBooleanFilter or ChangesListStringOptionsFilter objects.
+When constructing them, you specify which group they belong to. You can reuse
+existing groups (accessed through $special->getFilterGroup), or create your own
+(ChangesListBooleanFilterGroup or ChangesListStringOptionsFilterGroup).
+If you create new groups, you must register them with $special->registerFilterGroup.
+Note that this is called regardless of whether the user is currently using
+the new (structured) or old (unstructured) filter UI. If you want your boolean
+filter to show on both the new and old UI, specify all the supported fields.
+These include showHide, label, and description.
+See the constructor of each ChangesList* class for documentation of supported
+fields.
+$special: ChangesListSpecialPage instance
+
+'ChangeTagAfterDelete': Called after a change tag has been deleted (that is,
+removed from all revisions and log entries to which it was applied). This gives
+extensions a chance to take it off their books.
+$tag: name of the tag
+&$status: Status object. Add warnings to this as required. There is no point
+ setting errors, as the deletion has already been partly carried out by this
+ point.
+
+'ChangeTagCanCreate': Tell whether a change tag should be able to be created
+from the UI (Special:Tags) or via the API. You could use this hook if you want
+to reserve a specific "namespace" of tags, or something similar.
+$tag: name of the tag
+$user: user initiating the action
+&$status: Status object. Add your errors using `$status->fatal()` or warnings
+ using `$status->warning()`. Errors and warnings will be relayed to the user.
+ If you set an error, the user will be unable to create the tag.
+
+'ChangeTagCanDelete': Tell whether a change tag should be able to be
+deleted from the UI (Special:Tags) or via the API. The default is that tags
+defined using the ListDefinedTags hook are not allowed to be deleted unless
+specifically allowed. If you wish to allow deletion of the tag, set
+`$status = Status::newGood()` to allow deletion, and then `return false` from
+the hook function. Ensure you consume the 'ChangeTagAfterDelete' hook to carry
+out custom deletion actions.
+$tag: name of the tag
+$user: user initiating the action
+&$status: Status object. See above.
+
+'ChangeTagsListActive': Allows you to nominate which of the tags your extension
+uses are in active use.
+&$tags: list of all active tags. Append to this array.
+
+'ChangeTagsAfterUpdateTags': Called after tags have been updated with the
+ChangeTags::updateTags function. Params:
+$addedTags: tags effectively added in the update
+$removedTags: tags effectively removed in the update
+$prevTags: tags that were present prior to the update
+$rc_id: recentchanges table id
+$rev_id: revision table id
+$log_id: logging table id
+$params: tag params
+$rc: RecentChange being tagged when the tagging accompanies the action or null
+$user: User who performed the tagging when the tagging is subsequent to the action or null
+
+'ChangeTagsAllowedAdd': Called when checking if a user can add tags to a change.
+&$allowedTags: List of all the tags the user is allowed to add. Any tags the
+ user wants to add ($addTags) that are not in this array will cause it to fail.
+ You may add or remove tags to this array as required.
+$addTags: List of tags user intends to add.
+$user: User who is adding the tags.
+
+'ChangeUserGroups': Called before user groups are changed.
+$performer: The User who will perform the change
+$user: The User whose groups will be changed
+&$add: The groups that will be added
+&$remove: The groups that will be removed
+
+'Collation::factory': Called if $wgCategoryCollation is an unknown collation.
+$collationName: Name of the collation in question
+&$collationObject: Null. Replace with a subclass of the Collation class that
+ implements the collation given in $collationName.
+
+'ConfirmEmailComplete': Called after a user's email has been confirmed
+successfully.
+$user: user (object) whose email is being confirmed
+
+'ContentAlterParserOutput': Modify parser output for a given content object.
+Called by Content::getParserOutput after parsing has finished. Can be used
+for changes that depend on the result of the parsing but have to be done
+before LinksUpdate is called (such as adding tracking categories based on
+the rendered HTML).
+$content: The Content to render
+$title: Title of the page, as context
+$parserOutput: ParserOutput to manipulate
+
+'ContentGetParserOutput': Customize parser output for a given content object,
+called by AbstractContent::getParserOutput. May be used to override the normal
+model-specific rendering of page content.
+$content: The Content to render
+$title: Title of the page, as context
+$revId: The revision ID, as context
+$options: ParserOptions for rendering. To avoid confusing the parser cache,
+ the output can only depend on parameters provided to this hook function, not
+ on global state.
+$generateHtml: boolean, indicating whether full HTML should be generated. If
+ false, generation of HTML may be skipped, but other information should still
+ be present in the ParserOutput object.
+&$output: ParserOutput, to manipulate or replace
+
+'ContentHandlerDefaultModelFor': Called when the default content model is
+determined for a given title. May be used to assign a different model for that
+title.
+$title: the Title in question
+&$model: the model name. Use with CONTENT_MODEL_XXX constants.
+
+'ContentHandlerForModelID': Called when a ContentHandler is requested for
+a given content model name, but no entry for that model exists in
+$wgContentHandlers.
+Note: if your extension implements additional models via this hook, please
+use GetContentModels hook to make them known to core.
+$modeName: the requested content model name
+&$handler: set this to a ContentHandler object, if desired.
+
+'ContentModelCanBeUsedOn': Called to determine whether that content model can
+be used on a given page. This is especially useful to prevent some content
+models to be used in some special location.
+$contentModel: ID of the content model in question
+$title: the Title in question.
+&$ok: Output parameter, whether it is OK to use $contentModel on $title.
+ Handler functions that modify $ok should generally return false to prevent
+ further hooks from further modifying $ok.
+
+'ContribsPager::getQueryInfo': Before the contributions query is about to run
+&$pager: Pager object for contributions
+&$queryInfo: The query for the contribs Pager
+
+'ContribsPager::reallyDoQuery': Called before really executing the query for My
+Contributions
+&$data: an array of results of all contribs queries
+$pager: The ContribsPager object hooked into
+$offset: Index offset, inclusive
+$limit: Exact query limit
+$descending: Query direction, false for ascending, true for descending
+
+'ContributionsLineEnding': Called before a contributions HTML line is finished
+$page: SpecialPage object for contributions
+&$ret: the HTML line
+$row: the DB row for this line
+&$classes: the classes to add to the surrounding <li>
+&$attribs: associative array of other HTML attributes for the <li> element.
+ Currently only data attributes reserved to MediaWiki are allowed
+ (see Sanitizer::isReservedDataAttribute).
+
+'ContributionsToolLinks': Change tool links above Special:Contributions
+$id: User identifier
+$title: User page title
+&$tools: Array of tool links
+$specialPage: SpecialPage instance for context and services. Can be either
+ SpecialContributions or DeletedContributionsPage. Extensions should type
+ hint against a generic SpecialPage though.
+
+'ConvertContent': Called by AbstractContent::convert when a conversion to
+another content model is requested.
+Handler functions that modify $result should generally return false to disable
+further attempts at conversion.
+$content: The Content object to be converted.
+$toModel: The ID of the content model to convert to.
+$lossy: boolean indicating whether lossy conversion is allowed.
+&$result: Output parameter, in case the handler function wants to provide a
+ converted Content object. Note that $result->getContentModel() must return
+ $toModel.
+
+'CustomEditor': When invoking the page editor
+Return true to allow the normal editor to be used, or false if implementing
+a custom editor, e.g. for a special namespace, etc.
+$article: Article being edited
+$user: User performing the edit
+
+'DatabaseOraclePostInit': Called after initialising an Oracle database
+$db: the DatabaseOracle object
+
+'DeletedContribsPager::reallyDoQuery': Called before really executing the query
+for Special:DeletedContributions
+Similar to ContribsPager::reallyDoQuery
+&$data: an array of results of all contribs queries
+$pager: The DeletedContribsPager object hooked into
+$offset: Index offset, inclusive
+$limit: Exact query limit
+$descending: Query direction, false for ascending, true for descending
+
+'DeletedContributionsLineEnding': Called before a DeletedContributions HTML line
+is finished.
+Similar to ContributionsLineEnding
+$page: SpecialPage object for DeletedContributions
+&$ret: the HTML line
+$row: the DB row for this line
+&$classes: the classes to add to the surrounding <li>
+&$attribs: associative array of other HTML attributes for the <li> element.
+ Currently only data attributes reserved to MediaWiki are allowed
+ (see Sanitizer::isReservedDataAttribute).
+
+'DeleteUnknownPreferences': Called by the cleanupPreferences.php maintenance script to build a WHERE clause with which
+to delete preferences that are not known about. This hook is used by extensions that have dynamically-named preferences
+that should not be deleted in the usual cleanup process. For example, the Gadgets extension creates preferences prefixed
+with 'gadget-', and so anything with that prefix is excluded from the deletion.
+&where: An array that will be passed as the $cond parameter to IDatabase::select() to determine what will be deleted
+ from the user_properties table.
+$db: The IDatabase object, useful for accessing $db->buildLike() etc.
+
+'DifferenceEngineAfterLoadNewText': called in DifferenceEngine::loadNewText()
+after the new revision's content has been loaded into the class member variable
+$differenceEngine->mNewContent but before returning true from this function.
+$differenceEngine: DifferenceEngine object
+
+'DifferenceEngineLoadTextAfterNewContentIsLoaded': called in
+DifferenceEngine::loadText() after the new revision's content has been loaded
+into the class member variable $differenceEngine->mNewContent but before
+checking if the variable's value is null.
+This hook can be used to inject content into said class member variable.
+$differenceEngine: DifferenceEngine object
+
+'DifferenceEngineMarkPatrolledLink': Allows extensions to change the "mark as patrolled" link
+which is shown both on the diff header as well as on the bottom of a page, usually
+wrapped in a span element which has class="patrollink".
+$differenceEngine: DifferenceEngine object
+&$markAsPatrolledLink: The "mark as patrolled" link HTML (string)
+$rcid: Recent change ID (rc_id) for this change (int)
+
+'DifferenceEngineMarkPatrolledRCID': Allows extensions to possibly change the rcid parameter.
+For example the rcid might be set to zero due to the user being the same as the
+performer of the change but an extension might still want to show it under certain
+conditions.
+&$rcid: rc_id (int) of the change or 0
+$differenceEngine: DifferenceEngine object
+$change: RecentChange object
+$user: User object representing the current user
+
+'DifferenceEngineNewHeader': Allows extensions to change the $newHeader variable, which
+contains information about the new revision, such as the revision's author, whether
+the revision was marked as a minor edit or not, etc.
+$differenceEngine: DifferenceEngine object
+&$newHeader: The string containing the various #mw-diff-otitle[1-5] divs, which
+include things like revision author info, revision comment, RevisionDelete link and more
+$formattedRevisionTools: Array containing revision tools, some of which may have
+been injected with the DiffRevisionTools hook
+$nextlink: String containing the link to the next revision (if any); also included in $newHeader
+$rollback: Rollback link (string) to roll this revision back to the previous one, if any
+$newminor: String indicating if the new revision was marked as a minor edit
+$diffOnly: Boolean parameter passed to DifferenceEngine#showDiffPage, indicating
+whether we should show just the diff; passed in as a query string parameter to the
+various URLs constructed here (i.e. $nextlink)
+$rdel: RevisionDelete link for the new revision, if the current user is allowed
+to use the RevisionDelete feature
+$unhide: Boolean parameter indicating whether to show RevisionDeleted revisions
+
+'DifferenceEngineOldHeader': Allows extensions to change the $oldHeader variable, which
+contains information about the old revision, such as the revision's author, whether
+the revision was marked as a minor edit or not, etc.
+$differenceEngine: DifferenceEngine object
+&$oldHeader: The string containing the various #mw-diff-otitle[1-5] divs, which
+include things like revision author info, revision comment, RevisionDelete link and more
+$prevlink: String containing the link to the previous revision (if any); also included in $oldHeader
+$oldminor: String indicating if the old revision was marked as a minor edit
+$diffOnly: Boolean parameter passed to DifferenceEngine#showDiffPage, indicating
+whether we should show just the diff; passed in as a query string parameter to the
+various URLs constructed here (i.e. $prevlink)
+$ldel: RevisionDelete link for the old revision, if the current user is allowed
+to use the RevisionDelete feature
+$unhide: Boolean parameter indicating whether to show RevisionDeleted revisions
+
+'DifferenceEngineOldHeaderNoOldRev': Change the $oldHeader variable in cases when
+there is no old revision
+&$oldHeader: empty string by default
+
+'DifferenceEngineRenderRevisionAddParserOutput': Allows extensions to change the parser output.
+Return false to not add parser output via OutputPage's addParserOutput method.
+$differenceEngine: DifferenceEngine object
+$out: OutputPage object
+$parserOutput: ParserOutput object
+$wikiPage: WikiPage object
+
+'DifferenceEngineRenderRevisionShowFinalPatrolLink': An extension can hook into this hook
+point and return false to not show the final "mark as patrolled" link on the bottom
+of a page.
+This hook has no arguments.
+
+'DifferenceEngineShowDiff': Allows extensions to affect the diff text which
+eventually gets sent to the OutputPage object.
+$differenceEngine: DifferenceEngine object
+
+'DifferenceEngineShowEmptyOldContent': Allows extensions to change the diff table
+body (without header) in cases when there is no old revision or the old and new
+revisions are identical.
+$differenceEngine: DifferenceEngine object
+
+'DifferenceEngineShowDiffPage': Add additional output via the available OutputPage
+object into the diff view
+$out: OutputPage object
+
+'DifferenceEngineShowDiffPageMaybeShowMissingRevision': called in
+DifferenceEngine::showDiffPage() when revision data cannot be loaded.
+Return false in order to prevent displaying the missing revision message
+(i.e. to prevent DifferenceEngine::showMissingRevision() from being called).
+$differenceEngine: DifferenceEngine object
+
+'DiffRevisionTools': Override or extend the revision tools available from the
+diff view, i.e. undo, etc.
+$newRev: Revision object of the "new" revision
+&$links: Array of HTML links
+$oldRev: Revision object of the "old" revision (may be null)
+$user: Current user object
+
+'DiffViewHeader': Called before diff display
+$diff: DifferenceEngine object that's calling
+$oldRev: Revision object of the "old" revision (may be null/invalid)
+$newRev: Revision object of the "new" revision
+
+'DisplayOldSubtitle': before creating subtitle when browsing old versions of
+an article
+&$article: article (object) being viewed
+&$oldid: oldid (int) being viewed
+
+'DoEditSectionLink': DEPRECATED! Use SkinEditSectionLinks instead.
+Override the HTML generated for section edit links
+$skin: Skin object rendering the UI
+$title: Title object for the title being linked to (may not be the same as
+ the page title, if the section is included from a template)
+$section: The designation of the section being pointed to, to be included in
+ the link, like "&section=$section"
+$tooltip: The default tooltip. Escape before using.
+ By default, this is wrapped in the 'editsectionhint' message.
+&$result: The HTML to return, prefilled with the default plus whatever other
+ changes earlier hooks have made
+$lang: The language code to use for the link in the wfMessage function
+
+'EditFilter': Perform checks on an edit
+$editor: EditPage instance (object). The edit form (see includes/EditPage.php)
+$text: Contents of the edit box
+$section: Section being edited
+&$error: Error message to return
+$summary: Edit summary for page
+
+
+'EditFilterMergedContent': Post-section-merge edit filter.
+This may be triggered by the EditPage or any other facility that modifies page
+content. Use the $status object to indicate whether the edit should be allowed,
+and to provide a reason for disallowing it. Return false to abort the edit, and
+true to continue. Returning true if $status->isOK() returns false means "don't
+save but continue user interaction", e.g. show the edit form.
+$status->apiHookResult can be set to an array to be returned by api.php
+action=edit. This is used to deliver captchas.
+$context: object implementing the IContextSource interface.
+$content: content of the edit box, as a Content object.
+$status: Status object to represent errors, etc.
+$summary: Edit summary for page
+$user: the User object representing the user whois performing the edit.
+$minoredit: whether the edit was marked as minor by the user.
+
+'EditFormInitialText': Allows modifying the edit form when editing existing
+pages
+$editPage: EditPage object
+
+'EditFormPreloadText': Allows population of the edit form when creating
+new pages
+&$text: Text to preload with
+&$title: Title object representing the page being created
+
+'EditPage::attemptSave': Called before an article is
+saved, that is before WikiPage::doEditContent() is called
+$editpage_Obj: the current EditPage object
+
+'EditPage::attemptSave:after': Called after an article save attempt
+$editpage_Obj: the current EditPage object
+$status: the resulting Status object
+$resultDetails: Result details array
+
+'EditPage::importFormData': allow extensions to read additional data
+posted in the form
+$editpage: EditPage instance
+$request: Webrequest
+return value is ignored (should always return true)
+
+'EditPage::showEditForm:fields': allows injection of form field into edit form
+Return value is ignored (should always return true)
+&$editor: the EditPage instance for reference
+&$out: an OutputPage instance to write to
+
+'EditPage::showEditForm:initial': before showing the edit form
+Return false to halt editing; you'll need to handle error messages, etc.
+yourself. Alternatively, modifying $error and returning true will cause the
+contents of $error to be echoed at the top of the edit form as wikitext.
+Return true without altering $error to allow the edit to proceed.
+&$editor: EditPage instance (object)
+&$out: an OutputPage instance to write to
+
+'EditPage::showReadOnlyForm:initial': similar to EditPage::showEditForm:initial
+but for the read-only 'view source' variant of the edit form.
+Return value is ignored (should always return true)
+$editor: EditPage instance (object)
+&$out: an OutputPage instance to write to
+
+'EditPage::showStandardInputs:options': allows injection of form fields into
+the editOptions area
+Return value is ignored (should always be true)
+$editor: EditPage instance (object)
+$out: an OutputPage instance to write to
+&$tabindex: HTML tabindex of the last edit check/button
+
+'EditPageBeforeConflictDiff': allows modifying the EditPage object and output
+when there's an edit conflict. Return false to halt normal diff output; in
+this case you're responsible for computing and outputting the entire "conflict"
+part, i.e., the "difference between revisions" and "your text" headers and
+sections.
+&$editor: EditPage instance
+&$out: OutputPage instance
+
+'EditPageBeforeEditButtons': Allows modifying the edit buttons below the
+textarea in the edit form.
+&$editpage: The current EditPage object
+&$buttons: Array of edit buttons "Save", "Preview", "Live", and "Diff"
+&$tabindex: HTML tabindex of the last edit check/button
+
+'EditPageBeforeEditChecks': DEPRECATED! Use 'EditPageGetCheckboxesDefinition' instead,
+or 'EditPage::showStandardInputs:options' if you don't actually care about checkboxes
+and just want to add some HTML to the page.
+Allows modifying the edit checks below the textarea in the edit form.
+&$editpage: The current EditPage object
+&$checks: Array of the HTML for edit checks like "watch this page"/"minor edit"
+&$tabindex: HTML tabindex of the last edit check/button
+
+'EditPageBeforeEditToolbar': Allows modifying the edit toolbar above the
+textarea in the edit form.
+&$toolbar: The toolbar HTML
+Hook subscribers can return false to avoid the default toolbar code being loaded.
+
+'EditPageCopyrightWarning': Allow for site and per-namespace customization of
+contribution/copyright notice.
+$title: title of page being edited
+&$msg: localization message name, overridable. Default is either
+ 'copyrightwarning' or 'copyrightwarning2'.
+
+'EditPageGetCheckboxesDefinition': Allows modifying the edit checkboxes
+below the textarea in the edit form.
+$editpage: The current EditPage object
+&$checkboxes: Array of checkbox definitions. See EditPage::getCheckboxesDefinition()
+for the format.
+
+'EditPageGetDiffContent': Allow modifying the wikitext that will be used in
+"Show changes". Note that it is preferable to implement diff handling for
+different data types using the ContentHandler facility.
+$editPage: EditPage object
+&$newtext: wikitext that will be used as "your version"
+
+'EditPageGetPreviewContent': Allow modifying the wikitext that will be
+previewed. Note that it is preferable to implement previews for different data
+types using the ContentHandler facility.
+$editPage: EditPage object
+&$content: Content object to be previewed (may be replaced by hook function)
+
+'EditPageNoSuchSection': When a section edit request is given for an
+non-existent section
+&$editpage: The current EditPage object
+&$res: the HTML of the error text
+
+'EditPageTosSummary': Give a chance for site and per-namespace customizations
+of terms of service summary link that might exist separately from the copyright
+notice.
+$title: title of page being edited
+&$msg: localization message name, overridable. Default is 'editpage-tos-summary'
+
+'EmailConfirmed': When checking that the user's email address is "confirmed".
+This runs before the other checks, such as anonymity and the real check; return
+true to allow those checks to occur, and false if checking is done.
+&$user: User being checked
+&$confirmed: Whether or not the email address is confirmed
+
+'EmailUser': Before sending email from one user to another.
+&$to: MailAddress object of receiving user
+&$from: MailAddress object of sending user
+&$subject: subject of the mail
+&$text: text of the mail
+&$error: Out-param for an error. Should be set to a Status object or boolean false.
+
+'EmailUserCC': Before sending the copy of the email to the author.
+&$to: MailAddress object of receiving user
+&$from: MailAddress object of sending user
+&$subject: subject of the mail
+&$text: text of the mail
+
+'EmailUserComplete': After sending email from one user to another.
+$to: MailAddress object of receiving user
+$from: MailAddress object of sending user
+$subject: subject of the mail
+$text: text of the mail
+
+'EmailUserForm': After building the email user form object.
+&$form: HTMLForm object
+
+'EmailUserPermissionsErrors': to retrieve permissions errors for emailing a
+user.
+$user: The user who is trying to email another user.
+$editToken: The user's edit token.
+&$hookErr: Out-param for the error. Passed as the parameters to
+ OutputPage::showErrorPage.
+
+'EnhancedChangesList::getLogText': to alter, remove or add to the links of a
+group of changes in EnhancedChangesList.
+Hook subscribers can return false to omit this line from recentchanges.
+$changesList: EnhancedChangesList object
+&$links: The links that were generated by EnhancedChangesList
+$block: The RecentChanges objects in that block
+
+'EnhancedChangesListModifyLineData': to alter data used to build
+a grouped recent change inner line in EnhancedChangesList.
+Hook subscribers can return false to omit this line from recentchanges.
+$changesList: EnhancedChangesList object
+&$data: An array with all the components that will be joined in order to create the line
+$block: An array of RecentChange objects in that block
+$rc: The RecentChange object for this line
+&$classes: An array of classes to change
+&$attribs: associative array of other HTML attributes for the <tr> element.
+ Currently only data attributes reserved to MediaWiki are allowed
+ (see Sanitizer::isReservedDataAttribute).
+
+'EnhancedChangesListModifyBlockLineData': to alter data used to build
+a non-grouped recent change line in EnhancedChangesList.
+$changesList: EnhancedChangesList object
+&$data: An array with all the components that will be joined in order to create the line
+$rc: The RecentChange object for this line
+
+'ExemptFromAccountCreationThrottle': Exemption from the account creation
+throttle.
+$ip: The ip address of the user
+
+'ExtensionTypes': Called when generating the extensions credits, use this to
+change the tables headers.
+&$extTypes: associative array of extensions types
+
+'FetchChangesList': When fetching the ChangesList derivative for a particular
+user.
+$user: User the list is being fetched for
+&$skin: Skin object to be used with the list
+&$list: List object (defaults to NULL, change it to an object instance and
+ return false override the list derivative used)
+
+'FileDeleteComplete': When a file is deleted.
+&$file: reference to the deleted file
+&$oldimage: in case of the deletion of an old image, the name of the old file
+&$article: in case all revisions of the file are deleted a reference to the
+ WikiFilePage associated with the file.
+&$user: user who performed the deletion
+&$reason: reason
+
+'FileTransformed': When a file is transformed and moved into storage.
+$file: reference to the File object
+$thumb: the MediaTransformOutput object
+$tmpThumbPath: The temporary file system path of the transformed file
+$thumbPath: The permanent storage path of the transformed file
+
+'FileUndeleteComplete': When a file is undeleted
+$title: title object to the file
+$fileVersions: array of undeleted versions. Empty if all versions were restored
+$user: user who performed the undeletion
+$reason: reason
+
+'FileUpload': When a file upload occurs.
+$file: Image object representing the file that was uploaded
+$reupload: Boolean indicating if there was a previously another image there or
+ not (since 1.17)
+$hasDescription: Boolean indicating that there was already a description page
+ and a new one from the comment wasn't created (since 1.17)
+
+'FormatAutocomments': When an autocomment is formatted by the Linker.
+&$comment: Reference to the accumulated comment. Initially null, when set the
+ default code will be skipped.
+$pre: Boolean, true if there is text before this autocomment
+$auto: The extracted part of the parsed comment before the call to the hook.
+$post: Boolean, true if there is text after this autocomment
+$title: An optional title object used to links to sections. Can be null.
+$local: Boolean indicating whether section links should refer to local page.
+$wikiId: String containing the ID (as used by WikiMap) of the wiki from which the
+ autocomment originated; null for the local wiki. Added in 1.26, should default
+ to null in handler functions, for backwards compatibility.
+
+'GalleryGetModes': Get list of classes that can render different modes of a
+gallery.
+&$modeArray: An associative array mapping mode names to classes that implement
+ that mode. It is expected all registered classes are a subclass of
+ ImageGalleryBase.
+
+'GetAutoPromoteGroups': When determining which autopromote groups a user is
+entitled to be in.
+$user: user to promote.
+&$promote: groups that will be added.
+
+'GetBlockedStatus': after loading blocking status of an user from the database
+&$user: user (object) being checked
+
+'GetCacheVaryCookies': Get cookies that should vary cache options.
+$out: OutputPage object
+&$cookies: array of cookies name, add a value to it if you want to add a cookie
+ that have to vary cache options
+
+'GetCanonicalURL': Modify fully-qualified URLs used for IRC and e-mail
+notifications.
+&$title: Title object of page
+&$url: string value as output (out parameter, can modify)
+$query: query options passed to Title::getCanonicalURL()
+
+'GetContentModels': Add content models to the list of available models.
+&$models: array containing current model list, as strings. Extensions should add to this list.
+
+'GetDefaultSortkey': Override the default sortkey for a page.
+$title: Title object that we need to get a sortkey for
+&$sortkey: Sortkey to use.
+
+'GetDifferenceEngine': Called when getting a new difference engine interface
+object Return false for valid object in $differenceEngine or true for the
+default difference engine.
+$context: IContextSource context to be used for diff
+$old: Revision ID to show and diff with
+$new: Either a revision ID or one of the strings 'cur', 'prev' or 'next'
+$refreshCache: If set, refreshes the diff cache
+$unhide: If set, allow viewing deleted revs
+&$differenceEngine: output parameter, difference engine object to be used for
+ diff
+
+'GetDoubleUnderscoreIDs': Modify the list of behavior switch (double
+underscore) magic words. Called by MagicWord.
+&$doubleUnderscoreIDs: array of strings
+
+'GetExtendedMetadata': Get extended file metadata for the API
+&$combinedMeta: Array of the form:
+ 'MetadataPropName' => array(
+ value' => prop value,
+ 'source' => 'name of hook'
+ ).
+$file: File object of file in question
+$context: RequestContext (including language to use)
+$single: Only extract the current language; if false, the prop value should
+ be in the metadata multi-language array format:
+ mediawiki.org/wiki/Manual:File_metadata_handling#Multi-language_array_format
+&$maxCacheTime: how long the results can be cached
+
+'GetFullURL': Modify fully-qualified URLs used in redirects/export/offsite data.
+&$title: Title object of page
+&$url: string value as output (out parameter, can modify)
+$query: query options passed to Title::getFullURL()
+
+'GetHumanTimestamp': Pre-emptively override the human-readable timestamp
+generated by MWTimestamp::getHumanTimestamp(). Return false in this hook to use
+the custom output.
+&$output: string for the output timestamp
+$timestamp: MWTimestamp object of the current (user-adjusted) timestamp
+$relativeTo: MWTimestamp object of the relative (user-adjusted) timestamp
+$user: User whose preferences are being used to make timestamp
+$lang: Language that will be used to render the timestamp
+
+'GetInternalURL': Modify fully-qualified URLs used for squid cache purging.
+&$title: Title object of page
+&$url: string value as output (out parameter, can modify)
+$query: query options passed to Title::getInternalURL()
+
+'GetIP': modify the ip of the current user (called only once).
+&$ip: string holding the ip as determined so far
+
+'GetLangPreferredVariant': Called in LanguageConverter#getPreferredVariant() to
+ allow fetching the language variant code from cookies or other such
+ alternative storage.
+&$req: language variant from the URL (string) or boolean false if no variant
+ was specified in the URL; the value of this variable comes from
+ LanguageConverter#getURLVariant()
+
+'GetLinkColours': modify the CSS class of an array of page links.
+$linkcolour_ids: array of prefixed DB keys of the pages linked to,
+ indexed by page_id.
+&$colours: (output) array of CSS classes, indexed by prefixed DB keys
+
+'GetLocalURL': Modify local URLs as output into page links. Note that if you are
+working with internal urls (non-interwiki) then it may be preferable to work
+with the GetLocalURL::Internal or GetLocalURL::Article hooks as GetLocalURL can
+be buggy for internal urls on render if you do not re-implement the horrible
+hack that Title::getLocalURL uses in your own extension.
+&$title: Title object of page
+&$url: string value as output (out parameter, can modify)
+$query: query options passed to Title::getLocalURL()
+
+'GetLocalURL::Article': Modify local URLs specifically pointing to article paths
+without any fancy queries or variants.
+&$title: Title object of page
+&$url: string value as output (out parameter, can modify)
+
+'GetLocalURL::Internal': Modify local URLs to internal pages.
+&$title: Title object of page
+&$url: string value as output (out parameter, can modify)
+$query: query options passed to Title::getLocalURL()
+
+'GetLogTypesOnUser': Add log types where the target is a userpage
+&$types: Array of log types
+
+'GetMetadataVersion': Modify the image metadata version currently in use. This
+is used when requesting image metadata from a ForeignApiRepo. Media handlers
+that need to have versioned metadata should add an element to the end of the
+version array of the form 'handler_name=version'. Most media handlers won't need
+to do this unless they broke backwards compatibility with a previous version of
+the media handler metadata output.
+&$version: Array of version strings
+
+'GetNewMessagesAlert': Disable or modify the new messages alert
+&$newMessagesAlert: An empty string by default. If the user has new talk page
+ messages, this should be populated with an alert message to that effect
+$newtalks: An empty array if the user has no new messages or an array
+ containing links and revisions if there are new messages (See
+ User::getNewMessageLinks)
+$user: The user object of the user who is loading the page
+$out: OutputPage object (to check what type of page the user is on)
+
+'GetPreferences': Modify user preferences.
+$user: User whose preferences are being modified.
+&$preferences: Preferences description array, to be fed to an HTMLForm object
+
+'GetRelativeTimestamp': Pre-emptively override the relative timestamp generated
+by MWTimestamp::getRelativeTimestamp(). Return false in this hook to use the
+custom output.
+&$output: string for the output timestamp
+&$diff: DateInterval representing the difference between the timestamps
+$timestamp: MWTimestamp object of the current (user-adjusted) timestamp
+$relativeTo: MWTimestamp object of the relative (user-adjusted) timestamp
+$user: User whose preferences are being used to make timestamp
+$lang: Language that will be used to render the timestamp
+
+'getUserPermissionsErrors': Add a permissions error when permissions errors are
+checked for. Use instead of userCan for most cases. Return false if the user
+can't do it, and populate $result with the reason in the form of
+array( messagename, param1, param2, ... ) or a MessageSpecifier instance (you
+might want to use ApiMessage to provide machine-readable details for the API).
+For consistency, error messages
+should be plain text with no special coloring, bolding, etc. to show that
+they're errors; presenting them properly to the user as errors is done by the
+caller.
+&$title: Title object being checked against
+&$user: Current user object
+$action: Action being checked
+&$result: User permissions error to add. If none, return true.
+
+'getUserPermissionsErrorsExpensive': Equal to getUserPermissionsErrors, but is
+called only if expensive checks are enabled. Add a permissions error when
+permissions errors are checked for. Return false if the user can't do it, and
+populate $result with the reason in the form of array( messagename, param1,
+param2, ... ) or a MessageSpecifier instance (you might want to use ApiMessage
+to provide machine-readable details for the API). For consistency, error
+messages should be plain text with no
+special coloring, bolding, etc. to show that they're errors; presenting them
+properly to the user as errors is done by the caller.
+&$title: Title object being checked against
+&$user: Current user object
+$action: Action being checked
+&$result: User permissions error to add. If none, return true.
+
+'GitViewers': Called when generating the list of git viewers for
+Special:Version, use this to change the list.
+&$extTypes: associative array of repo URLS to viewer URLs.
+
+'HistoryRevisionTools': Override or extend the revision tools available from the
+page history view, i.e. undo, rollback, etc.
+$rev: Revision object
+&$links: Array of HTML links
+$prevRev: Revision object, next in line in page history, or null
+$user: Current user object
+
+'HTMLFileCache::useFileCache': Override whether a page should be cached in file
+cache.
+$context: An IContextSource object with information about the request being
+ served.
+
+'ImageBeforeProduceHTML': Called before producing the HTML created by a wiki
+image insertion. You can skip the default logic entirely by returning false, or
+just modify a few things using call-by-reference.
+&$skin: Skin object
+&$title: Title object of the image
+&$file: File object, or false if it doesn't exist
+&$frameParams: Various parameters with special meanings; see documentation in
+ includes/Linker.php for Linker::makeImageLink
+&$handlerParams: Various parameters with special meanings; see documentation in
+ includes/Linker.php for Linker::makeImageLink
+&$time: Timestamp of file in 'YYYYMMDDHHIISS' string form, or false for current
+&$res: Final HTML output, used if you return false
+
+'ImageOpenShowImageInlineBefore': Call potential extension just before showing
+the image on an image page.
+&$imagePage: ImagePage object ($this)
+&$output: $wgOut
+
+'ImagePageAfterImageLinks': Called after the image links section on an image
+page is built.
+$imagePage: ImagePage object ($this)
+&$html: HTML for the hook to add
+
+'ImagePageFileHistoryLine': Called when a file history line is constructed.
+$imagePage: ImagePage object ($this)
+$file: the file
+&$line: the HTML of the history line
+&$css: the line CSS class
+
+'ImagePageFindFile': Called when fetching the file associated with an image
+page.
+$page: ImagePage object
+&$file: File object
+&$displayFile: displayed File object
+
+'ImagePageShowTOC': Called when the file toc on an image page is generated.
+$page: ImagePage object
+&$toc: Array of <li> strings
+
+'ImgAuthBeforeStream': executed before file is streamed to user, but only when
+using img_auth.php.
+&$title: the Title object of the file as it would appear for the upload page
+&$path: the original file and path name when img_auth was invoked by the web
+ server
+&$name: the name only component of the file
+&$result: The location to pass back results of the hook routine (only used if
+ failed)
+ $result[0]=The index of the header message
+ $result[1]=The index of the body text message
+ $result[2 through n]=Parameters passed to body text message. Please note the
+ header message cannot receive/use parameters.
+
+'ImportHandleLogItemXMLTag': When parsing a XML tag in a log item.
+Return false to stop further processing of the tag
+$reader: XMLReader object
+$logInfo: Array of information
+
+'ImportHandlePageXMLTag': When parsing a XML tag in a page.
+Return false to stop further processing of the tag
+$reader: XMLReader object
+&$pageInfo: Array of information
+
+'ImportHandleRevisionXMLTag': When parsing a XML tag in a page revision.
+Return false to stop further processing of the tag
+$reader: XMLReader object
+$pageInfo: Array of page information
+$revisionInfo: Array of revision information
+
+'ImportHandleToplevelXMLTag': When parsing a top level XML tag.
+Return false to stop further processing of the tag
+$reader: XMLReader object
+
+'ImportHandleUnknownUser': When a user doesn't exist locally, this hook is called
+to give extensions an opportunity to auto-create it. If the auto-creation is
+successful, return false.
+$name: User name
+
+'ImportHandleUploadXMLTag': When parsing a XML tag in a file upload.
+Return false to stop further processing of the tag
+$reader: XMLReader object
+$revisionInfo: Array of information
+
+'ImportLogInterwikiLink': Hook to change the interwiki link used in log entries
+and edit summaries for transwiki imports.
+&$fullInterwikiPrefix: Interwiki prefix, may contain colons.
+&$pageTitle: String that contains page title.
+
+'ImportSources': Called when reading from the $wgImportSources configuration
+variable. Can be used to lazy-load the import sources list.
+&$importSources: The value of $wgImportSources. Modify as necessary. See the
+comment in DefaultSettings.php for the detail of how to structure this array.
+
+'InfoAction': When building information to display on the action=info page.
+$context: IContextSource object
+&$pageInfo: Array of information
+
+'InitializeArticleMaybeRedirect': MediaWiki check to see if title is a redirect.
+&$title: Title object for the current page
+&$request: WebRequest
+&$ignoreRedirect: boolean to skip redirect check
+&$target: Title/string of redirect target
+&$article: Article object
+
+'InternalParseBeforeLinks': during Parser's internalParse method before links
+but after nowiki/noinclude/includeonly/onlyinclude and other processings.
+&$parser: Parser object
+&$text: string containing partially parsed text
+&$stripState: Parser's internal StripState object
+
+'InternalParseBeforeSanitize': during Parser's internalParse method just before
+the parser removes unwanted/dangerous HTML tags and after nowiki/noinclude/
+includeonly/onlyinclude and other processings. Ideal for syntax-extensions after
+template/parser function execution which respect nowiki and HTML-comments.
+&$parser: Parser object
+&$text: string containing partially parsed text
+&$stripState: Parser's internal StripState object
+
+'InterwikiLoadPrefix': When resolving if a given prefix is an interwiki or not.
+Return true without providing an interwiki to continue interwiki search.
+$prefix: interwiki prefix we are looking for.
+&$iwData: output array describing the interwiki with keys iw_url, iw_local,
+ iw_trans and optionally iw_api and iw_wikiid.
+
+'InvalidateEmailComplete': Called after a user's email has been invalidated
+successfully.
+$user: user (object) whose email is being invalidated
+
+'IRCLineURL': When constructing the URL to use in an IRC notification.
+Callee may modify $url and $query, URL will be constructed as $url . $query
+&$url: URL to index.php
+&$query: Query string
+$rc: RecentChange object that triggered url generation
+
+'IsFileCacheable': Override the result of Article::isFileCacheable() (if true)
+&$article: article (object) being checked
+
+'IsTrustedProxy': Override the result of IP::isTrustedProxy()
+&$ip: IP being check
+&$result: Change this value to override the result of IP::isTrustedProxy()
+
+'IsUploadAllowedFromUrl': Override the result of UploadFromUrl::isAllowedUrl()
+$url: URL used to upload from
+&$allowed: Boolean indicating if uploading is allowed for given URL
+
+'isValidEmailAddr': Override the result of Sanitizer::validateEmail(), for
+instance to return false if the domain name doesn't match your organization.
+$addr: The e-mail address entered by the user
+&$result: Set this and return false to override the internal checks
+
+'isValidPassword': Override the result of User::isValidPassword()
+$password: The password entered by the user
+&$result: Set this and return false to override the internal checks
+$user: User the password is being validated for
+
+'Language::getMessagesFileName':
+$code: The language code or the language we're looking for a messages file for
+&$file: The messages file path, you can override this to change the location.
+
+'LanguageGetMagic': DEPRECATED! Use $magicWords in a file listed in
+$wgExtensionMessagesFiles instead.
+Use this to define synonyms of magic words depending of the language
+&$magicExtensions: associative array of magic words synonyms
+$lang: language code (string)
+
+'LanguageGetNamespaces': Provide custom ordering for namespaces or
+remove namespaces. Do not use this hook to add namespaces. Use
+CanonicalNamespaces for that.
+&$namespaces: Array of namespaces indexed by their numbers
+
+'LanguageGetSpecialPageAliases': DEPRECATED! Use $specialPageAliases in a file
+listed in $wgExtensionMessagesFiles instead.
+Use to define aliases of special pages names depending of the language
+&$specialPageAliases: associative array of magic words synonyms
+$lang: language code (string)
+
+'LanguageGetTranslatedLanguageNames': Provide translated language names.
+&$names: array of language code => language name
+$code: language of the preferred translations
+
+'LanguageLinks': Manipulate a page's language links. This is called
+in various places to allow extensions to define the effective language
+links for a page.
+$title: The page's Title.
+&$links: Array with elements of the form "language:title" in the order
+ that they will be output.
+&$linkFlags: Associative array mapping prefixed links to arrays of flags.
+ Currently unused, but planned to provide support for marking individual
+ language links in the UI, e.g. for featured articles.
+
+'LanguageSelector': Hook to change the language selector available on a page.
+$out: The output page.
+$cssClassName: CSS class name of the language selector.
+
+'LinkBegin': DEPRECATED! Use HtmlPageLinkRendererBegin instead.
+Used when generating internal and interwiki links in
+Linker::link(), before processing starts. Return false to skip default
+processing and return $ret. See documentation for Linker::link() for details on
+the expected meanings of parameters.
+$skin: the Skin object
+$target: the Title that the link is pointing to
+&$html: the contents that the <a> tag should have (raw HTML); null means
+ "default".
+&$customAttribs: the HTML attributes that the <a> tag should have, in
+ associative array form, with keys and values unescaped. Should be merged
+ with default values, with a value of false meaning to suppress the
+ attribute.
+&$query: the query string to add to the generated URL (the bit after the "?"),
+ in associative array form, with keys and values unescaped.
+&$options: array of options. Can include 'known', 'broken', 'noclasses'.
+&$ret: the value to return if your hook returns false.
+
+'LinkEnd': DEPRECATED! Use HtmlPageLinkRendererEnd hook instead
+Used when generating internal and interwiki links in Linker::link(),
+just before the function returns a value. If you return true, an <a> element
+with HTML attributes $attribs and contents $html will be returned. If you
+return false, $ret will be returned.
+$skin: the Skin object
+$target: the Title object that the link is pointing to
+$options: the options. Will always include either 'known' or 'broken', and may
+ include 'noclasses'.
+&$html: the final (raw HTML) contents of the <a> tag, after processing.
+&$attribs: the final HTML attributes of the <a> tag, after processing, in
+ associative array form.
+&$ret: the value to return if your hook returns false.
+
+'LinkerMakeExternalImage': At the end of Linker::makeExternalImage() just
+before the return.
+&$url: the image url
+&$alt: the image's alt text
+&$img: the new image HTML (if returning false)
+
+'LinkerMakeExternalLink': At the end of Linker::makeExternalLink() just
+before the return.
+&$url: the link url
+&$text: the link text
+&$link: the new link HTML (if returning false)
+&$attribs: the attributes to be applied.
+$linkType: The external link type
+
+'LinkerMakeMediaLinkFile': At the end of Linker::makeMediaLinkFile() just
+before the return.
+$title: the Title object that the link is pointing to
+$file: the File object or false if broken link
+&$html: the link text
+&$attribs: the attributes to be applied
+&$ret: the value to return if your hook returns false
+
+'LogEventsListLineEnding': Called before a Special:Log line is finished
+$page: the LogEventsList object
+&$ret: the HTML line
+$entry: the DatabaseLogEntry object for this row
+&$classes: the classes to add to the surrounding <li>
+&$attribs: associative array of other HTML attributes for the <li> element.
+ Currently only data attributes reserved to MediaWiki are allowed
+ (see Sanitizer::isReservedDataAttribute).
+
+
+'HtmlPageLinkRendererBegin':
+Used when generating internal and interwiki links in
+LinkRenderer, before processing starts. Return false to skip default
+processing and return $ret.
+$linkRenderer: the LinkRenderer object
+$target: the LinkTarget that the link is pointing to
+&$text: the contents that the <a> tag should have; either a plain, unescaped
+ string or a HtmlArmor object; null means "default".
+&$customAttribs: the HTML attributes that the <a> tag should have, in
+ associative array form, with keys and values unescaped. Should be merged
+ with default values, with a value of false meaning to suppress the
+ attribute.
+&$query: the query string to add to the generated URL (the bit after the "?"),
+ in associative array form, with keys and values unescaped.
+&$ret: the value to return if your hook returns false.
+
+'HtmlPageLinkRendererEnd':
+Used when generating internal and interwiki links in LinkRenderer,
+just before the function returns a value. If you return true, an <a> element
+with HTML attributes $attribs and contents $html will be returned. If you
+return false, $ret will be returned.
+$linkRenderer: the LinkRenderer object
+$target: the LinkTarget object that the link is pointing to
+$isKnown: boolean indicating whether the page is known or not
+&$text: the contents that the <a> tag should have; either a plain, unescaped
+ string or a HtmlArmor object.
+&$attribs: the final HTML attributes of the <a> tag, after processing, in
+ associative array form.
+&$ret: the value to return if your hook returns false.
+
+'LinksUpdate': At the beginning of LinksUpdate::doUpdate() just before the
+actual update.
+&$linksUpdate: the LinksUpdate object
+
+'LinksUpdateAfterInsert': At the end of LinksUpdate::incrTableUpdate() after
+each link table insert. For example, pagelinks, imagelinks, externallinks.
+$linksUpdate: LinksUpdate object
+$table: the table to insert links to
+$insertions: an array of links to insert
+
+'LinksUpdateComplete': At the end of LinksUpdate::doUpdate() when updating,
+including delete and insert, has completed for all link tables
+&$linksUpdate: the LinksUpdate object
+$ticket: prior result of LBFactory::getEmptyTransactionTicket()
+
+'LinksUpdateConstructed': At the end of LinksUpdate() is construction.
+&$linksUpdate: the LinksUpdate object
+
+'ListDefinedTags': When trying to find all defined tags.
+&$tags: The list of tags.
+
+'LoadExtensionSchemaUpdates': Called during database installation and updates.
+$updater: A DatabaseUpdater subclass
+
+'LocalFile::getHistory': Called before file history query performed.
+&$file: the File object
+&$tables: tables
+&$fields: select fields
+&$conds: conditions
+&$opts: query options
+&$join_conds: JOIN conditions
+
+'LocalFilePurgeThumbnails': Called before thumbnails for a local file a purged.
+$file: the File object
+$archiveName: name of an old file version or false if it's the current one
+
+'LocalisationCacheRecache': Called when loading the localisation data into
+cache.
+$cache: The LocalisationCache object
+$code: language code
+&$alldata: The localisation data from core and extensions
+&$purgeBlobs: whether to purge/update the message blobs via
+ MessageBlobStore::clear()
+
+'LocalisationCacheRecacheFallback': Called for each language when merging
+fallback data into the cache.
+$cache: The LocalisationCache object
+$code: language code
+&$alldata: The localisation data from core and extensions. Note some keys may
+ be omitted if they won't be merged into the final result.
+
+'LocalisationChecksBlacklist': When fetching the blacklist of
+localisation checks.
+&$blacklist: array of checks to blacklist. See the bottom of
+ maintenance/language/checkLanguage.inc for the format of this variable.
+
+'LocalisationIgnoredOptionalMessages': When fetching the list of ignored and
+optional localisation messages
+&$ignored: Array of ignored message keys
+&$optional: Array of optional message keys
+
+'LocalUserCreated': Called when a local user has been created
+$user: User object for the created user
+$autocreated: Boolean, whether this was an auto-creation
+
+'LogEventsListGetExtraInputs': When getting extra inputs to display on
+Special:Log for a specific log type
+$type: String of log type being displayed
+$logEventsList: LogEventsList object for context and access to the WebRequest
+&$input: string HTML of an input element
+
+'LogEventsListShowLogExtract': Called before the string is added to OutputPage.
+Returning false will prevent the string from being added to the OutputPage.
+&$s: html string to show for the log extract
+$types: String or Array Log types to show
+$page: String or Title The page title to show log entries for
+$user: String The user who made the log entries
+$param: Associative Array with the following additional options:
+ - lim Integer Limit of items to show, default is 50
+ - conds Array Extra conditions for the query (e.g. "log_action != 'revision'")
+ - showIfEmpty boolean Set to false if you don't want any output in case the
+ loglist is empty if set to true (default), "No matching items in log" is
+ displayed if loglist is empty
+ - msgKey Array If you want a nice box with a message, set this to the key of
+ the message. First element is the message key, additional optional elements
+ are parameters for the key that are processed with
+ wfMessage()->params()->parseAsBlock()
+ - offset Set to overwrite offset parameter in $wgRequest set to '' to unset
+ offset
+ - wrap String Wrap the message in html (usually something like
+ "&lt;div ...>$1&lt;/div>").
+ - flags Integer display flags (NO_ACTION_LINK,NO_EXTRA_USER_LINKS)
+
+'LogException': Called before an exception (or PHP error) is logged. This is
+meant for integration with external error aggregation services; returning false
+will NOT prevent logging.
+$e: The exception (in case of a plain old PHP error, a wrapping ErrorException)
+$suppressed: true if the error was suppressed via
+ error_reporting()/wfSuppressWarnings()
+
+'LoginFormValidErrorMessages': Called in LoginForm when a function gets valid
+error messages. Allows to add additional error messages (except messages already
+in LoginForm::$validErrorMessages).
+&$messages: Already added messages (inclusive messages from
+ LoginForm::$validErrorMessages)
+
+'LoginUserMigrated': DEPRECATED! Create a PreAuthenticationProvider instead.
+Called during login to allow extensions the opportunity to inform a user that
+their username doesn't exist for a specific reason, instead of letting the
+login form give the generic error message that the account does not exist. For
+example, when the account has been renamed or deleted.
+$user: the User object being authenticated against.
+&$msg: the message identifier for abort reason, or an array to pass a message
+ key and parameters.
+
+'LogLine': Processes a single log entry on Special:Log.
+$log_type: string for the type of log entry (e.g. 'move'). Corresponds to
+ logging.log_type database field.
+$log_action: string for the type of log action (e.g. 'delete', 'block',
+ 'create2'). Corresponds to logging.log_action database field.
+$title: Title object that corresponds to logging.log_namespace and
+ logging.log_title database fields.
+$paramArray: Array of parameters that corresponds to logging.log_params field.
+ Note that only $paramArray[0] appears to contain anything.
+&$comment: string that corresponds to logging.log_comment database field, and
+ which is displayed in the UI.
+&$revert: string that is displayed in the UI, similar to $comment.
+$time: timestamp of the log entry (added in 1.12)
+
+'LonelyPagesQuery': Allow extensions to modify the query used by
+Special:LonelyPages.
+&$tables: tables to join in the query
+&$conds: conditions for the query
+&$joinConds: join conditions for the query
+
+'MagicWordwgVariableIDs': When defining new magic words IDs.
+&$variableIDs: array of strings
+
+'MaintenanceRefreshLinksInit': before executing the refreshLinks.php maintenance
+script.
+$refreshLinks: RefreshLinks object
+
+'MakeGlobalVariablesScript': Called at end of OutputPage::getJSVars.
+Ideally, this hook should only be used to add variables that depend on
+the current page/request; static configuration should be added through
+ResourceLoaderGetConfigVars instead.
+&$vars: variable (or multiple variables) to be added into the output of
+ Skin::makeVariablesScript
+$out: The OutputPage which called the hook, can be used to get the real title.
+
+'MarkPatrolled': Before an edit is marked patrolled.
+$rcid: ID of the revision to be marked patrolled
+&$user: the user (object) marking the revision as patrolled
+$wcOnlySysopsCanPatrol: config setting indicating whether the user needs to be a
+ sysop in order to mark an edit patrolled.
+$auto: true if the edit is being marked as patrolled automatically
+
+'MarkPatrolledComplete': After an edit is marked patrolled.
+$rcid: ID of the revision marked as patrolled
+&$user: user (object) who marked the edit patrolled
+$wcOnlySysopsCanPatrol: config setting indicating whether the user must be a
+ sysop to patrol the edit.
+$auto: true if the edit is being marked as patrolled automatically
+
+'MediaWikiPerformAction': Override MediaWiki::performAction(). Use this to do
+something completely different, after the basic globals have been set up, but
+before ordinary actions take place.
+$output: $wgOut
+$article: Article on which the action will be performed
+$title: Title on which the action will be performed
+$user: $wgUser
+$request: $wgRequest
+$mediaWiki: The $mediawiki object
+
+'MediaWikiServices': Called when a global MediaWikiServices instance is
+initialized. Extensions may use this to define, replace, or wrap services.
+However, the preferred way to define a new service is
+the $wgServiceWiringFiles array.
+$services: MediaWikiServices
+
+'MessageCache::get': When fetching a message. Can be used to override the key
+for customisations. Given and returned message key must be in special format:
+1) first letter must be in lower case according to the content language.
+2) spaces must be replaced with underscores
+&$key: message key (string)
+
+'MessageCacheReplace': When a message page is changed. Useful for updating
+caches.
+$title: name of the page changed.
+$text: new contents of the page.
+
+'MessagesPreLoad': When loading a message from the database.
+$title: title of the message (string)
+&$message: value (string), change it to the message you want to define
+$code: code (string) denoting the language to try.
+
+'MimeMagicGuessFromContent': Allows MW extensions guess the MIME by content.
+$mimeMagic: Instance of MimeMagic.
+&$head: First 1024 bytes of the file in a string (in - Do not alter!).
+&$tail: More or equal than last 65558 bytes of the file in a string
+ (in - Do not alter!).
+$file: File path.
+&$mime: MIME type (out).
+
+'MimeMagicImproveFromExtension': Allows MW extensions to further improve the
+MIME type detected by considering the file extension.
+$mimeMagic: Instance of MimeMagic.
+$ext: File extension.
+&$mime: MIME type (in/out).
+
+'MimeMagicInit': Before processing the list mapping MIME types to media types
+and the list mapping MIME types to file extensions.
+As an extension author, you are encouraged to submit patches to MediaWiki's
+core to add new MIME types to mime.types.
+$mimeMagic: Instance of MimeMagic.
+ Use $mimeMagic->addExtraInfo( $stringOfInfo );
+ for adding new MIME info to the list.
+ Use $mimeMagic->addExtraTypes( $stringOfTypes );
+ for adding new MIME types to the list.
+
+'ModifyExportQuery': Modify the query used by the exporter.
+$db: The database object to be queried.
+&$tables: Tables in the query.
+&$conds: Conditions in the query.
+&$opts: Options for the query.
+&$join_conds: Join conditions for the query.
+
+'MovePageCheckPermissions': Specify whether the user is allowed to move the
+page.
+$oldTitle: Title object of the current (old) location
+$newTitle: Title object of the new location
+$user: User making the move
+$reason: string of the reason provided by the user
+$status: Status object to pass error messages to
+
+'MovePageIsValidMove': Specify whether a page can be moved for technical
+reasons.
+$oldTitle: Title object of the current (old) location
+$newTitle: Title object of the new location
+$status: Status object to pass error messages to
+
+'NamespaceIsMovable': Called when determining if it is possible to pages in a
+namespace.
+$index: Integer; the index of the namespace being checked.
+&$result: Boolean; whether MediaWiki currently thinks that pages in this
+ namespace are movable. Hooks may change this value to override the return
+ value of MWNamespace::isMovable().
+
+'NewDifferenceEngine': Called when a new DifferenceEngine object is made
+$title: the diff page title (nullable)
+&$oldId: the actual old Id to use in the diff
+&$newId: the actual new Id to use in the diff (0 means current)
+$old: the ?old= param value from the url
+$new: the ?new= param value from the url
+
+'NewPagesLineEnding': Called before a NewPages line is finished.
+$page: the SpecialNewPages object
+&$ret: the HTML line
+$row: the database row for this page (the recentchanges record and a few extras - see
+ NewPagesPager::getQueryInfo)
+&$classes: the classes to add to the surrounding <li>
+&$attribs: associative array of other HTML attributes for the <li> element.
+ Currently only data attributes reserved to MediaWiki are allowed
+ (see Sanitizer::isReservedDataAttribute).
+
+'NewRevisionFromEditComplete': Called when a revision was inserted due to an
+edit.
+$wikiPage: the WikiPage edited
+$rev: the new revision
+$baseID: the revision ID this was based off, if any
+$user: the editing user
+&$tags: tags to apply to the edit and recent change
+
+'OldChangesListRecentChangesLine': Customize entire recent changes line, or
+return false to omit the line from RecentChanges and Watchlist special pages.
+&$changeslist: The OldChangesList instance.
+&$s: HTML of the form "<li>...</li>" containing one RC entry.
+$rc: The RecentChange object.
+&$classes: array of css classes for the <li> element.
+&$attribs: associative array of other HTML attributes for the <li> element.
+ Currently only data attributes reserved to MediaWiki are allowed
+ (see Sanitizer::isReservedDataAttribute).
+
+'OpenSearchUrls': Called when constructing the OpenSearch description XML. Hooks
+can alter or append to the array of URLs for search & suggestion formats.
+&$urls: array of associative arrays with Url element attributes
+
+'OpportunisticLinksUpdate': Called by WikiPage::triggerOpportunisticLinksUpdate
+when a page view triggers a re-rendering of the page. This may happen
+particularly if the parser cache is split by user language, and no cached
+rendering of the page exists in the user's language. The hook is called
+before checking whether page_links_updated indicates that the links are up
+to date. Returning false will cause triggerOpportunisticLinksUpdate() to abort
+without triggering any updates.
+$page: the Page that was rendered.
+$title: the Title of the rendered page.
+$parserOutput: ParserOutput resulting from rendering the page.
+
+'OtherAutoblockLogLink': Get links to the autoblock log from extensions which
+autoblocks users and/or IP addresses too.
+&$otherBlockLink: An array with links to other autoblock logs
+
+'OtherBlockLogLink': Get links to the block log from extensions which blocks
+users and/or IP addresses too.
+&$otherBlockLink: An array with links to other block logs
+$ip: The requested IP address or username
+
+'OutputPageBeforeHTML': A page has been processed by the parser and the
+resulting HTML is about to be displayed.
+&$parserOutput: the parserOutput (object) that corresponds to the page
+&$text: the text that will be displayed, in HTML (string)
+
+'OutputPageBodyAttributes': Called when OutputPage::headElement is creating the
+body tag to allow for extensions to add attributes to the body of the page they
+might need. Or to allow building extensions to add body classes that aren't of
+high enough demand to be included in core.
+$out: The OutputPage which called the hook, can be used to get the real title
+$sk: The Skin that called OutputPage::headElement
+&$bodyAttrs: An array of attributes for the body tag passed to Html::openElement
+
+'OutputPageCheckLastModified': when checking if the page has been modified
+since the last visit.
+&$modifiedTimes: array of timestamps.
+ The following keys are set: page, user, epoch
+$out: OutputPage object (since 1.28)
+
+'OutputPageMakeCategoryLinks': Links are about to be generated for the page's
+categories. Implementations should return false if they generate the category
+links, so the default link generation is skipped.
+&$out: OutputPage instance (object)
+$categories: associative array, keys are category names, values are category
+ types ("normal" or "hidden")
+&$links: array, intended to hold the result. Must be an associative array with
+ category types as keys and arrays of HTML links as values.
+
+'OutputPageParserOutput': after adding a parserOutput to $wgOut
+&$out: OutputPage instance (object)
+$parserOutput: parserOutput instance being added in $out
+
+'PageContentInsertComplete': After a new article is created.
+$wikiPage: WikiPage created
+$user: User creating the article
+$content: New content as a Content object
+$summary: Edit summary/comment
+$isMinor: Whether or not the edit was marked as minor
+$isWatch: (No longer used)
+$section: (No longer used)
+$flags: Flags passed to WikiPage::doEditContent()
+$revision: New Revision of the article
+
+'PageContentLanguage': Allows changing the language in which the content of a
+page is written. Defaults to the wiki content language ($wgContLang).
+$title: Title object
+&$pageLang: the page content language (either an object or a language code)
+$wgLang: the user language
+
+'PageContentSave': Before an article is saved.
+$wikiPage: the WikiPage (object) being saved
+$user: the user (object) saving the article
+$content: the new article content, as a Content object
+$summary: the article summary (comment)
+$isminor: minor flag
+$iswatch: watch flag
+$section: section #
+
+'PageContentSaveComplete': After an article has been updated.
+$wikiPage: WikiPage modified
+$user: User performing the modification
+$content: New content, as a Content object
+$summary: Edit summary/comment
+$isMinor: Whether or not the edit was marked as minor
+$isWatch: (No longer used)
+$section: (No longer used)
+$flags: Flags passed to WikiPage::doEditContent()
+$revision: New Revision of the article (can be null for edits that change
+ nothing)
+$status: Status object about to be returned by doEditContent()
+$baseRevId: the rev ID (or false) this edit was based on
+$undidRevId: the rev ID (or 0) this edit undid
+
+'PageHistoryBeforeList': When a history page list is about to be constructed.
+&$article: the article that the history is loading for
+$context: RequestContext object
+
+'PageHistoryLineEnding': Right before the end <li> is added to a history line.
+$historyAction: the action object
+&$row: the revision row for this line
+&$s: the string representing this parsed line
+&$classes: array containing the <li> element classes
+&$attribs: associative array of other HTML attributes for the <li> element.
+ Currently only data attributes reserved to MediaWiki are allowed
+ (see Sanitizer::isReservedDataAttribute).
+
+'PageHistoryPager::doBatchLookups': Called after the pager query was run, before
+any output is generated, to allow batch lookups for prefetching information
+needed for display. If the hook handler returns false, the regular behavior of
+doBatchLookups() is skipped.
+$pager: the PageHistoryPager
+$result: a ResultWrapper representing the query result
+
+'PageHistoryPager::getQueryInfo': when a history pager query parameter set is
+constructed.
+&$pager: the pager
+&$queryInfo: the query parameters
+
+'PageRenderingHash': NOTE: Consider using ParserOptionsRegister instead.
+Alter the parser cache option hash key. A parser extension
+which depends on user options should install this hook and append its values to
+the key.
+&$confstr: reference to a hash key string which can be modified
+$user: User (object) requesting the page
+&$forOptions: array of options the hash is for
+
+'PageViewUpdates': Allow database (or other) changes to be made after a
+page view is seen by MediaWiki. Note this does not capture views made
+via external caches such as Squid.
+$wikipage: WikiPage (object) for the page being viewed.
+$user: User (object) for the user who is viewing.
+
+'ParserAfterParse': Called from Parser::parse() just after the call to
+Parser::internalParse() returns.
+&$parser: parser object
+&$text: text being parsed
+&$stripState: stripState used (object)
+
+'ParserAfterStrip': Called at end of parsing time.
+TODO: No more strip, deprecated ?
+&$parser: parser object
+&$text: text being parsed
+&$stripState: stripState used (object)
+
+'ParserAfterTidy': Called after Parser::tidy() in Parser::parse()
+&$parser: Parser object being used
+&$text: text that will be returned
+
+'ParserAfterUnstrip': Called after the first unstripGeneral() in
+Parser::internalParseHalfParsed()
+&$parser: Parser object being used
+&$text: text that will be returned
+
+'ParserBeforeInternalParse': Called at the beginning of Parser::internalParse().
+&$parser: Parser object
+&$text: text to parse
+&$stripState: StripState instance being used
+
+'ParserBeforeStrip': Called at start of parsing time.
+TODO: No more strip, deprecated ?
+&$parser: parser object
+&$text: text being parsed
+&$stripState: stripState used (object)
+
+'ParserBeforeTidy': Called before tidy and custom tags replacements.
+&$parser: Parser object being used
+&$text: actual text
+
+'ParserCacheSaveComplete': Called after a ParserOutput has been committed to
+the parser cache.
+$parserCache: ParserCache object $parserOutput was stored in
+$parserOutput: ParserOutput object that was stored
+$title: Title of the page that was parsed to generate $parserOutput
+$popts: ParserOptions used for generating $parserOutput
+$revId: ID of the revision that was parsed to create $parserOutput
+
+'ParserClearState': Called at the end of Parser::clearState().
+&$parser: Parser object being cleared
+
+'ParserCloned': Called when the parser is cloned.
+$parser: Newly-cloned Parser object
+
+'ParserFetchTemplate': Called when the parser fetches a template
+$parser: Parser Parser object or false
+$title: Title object of the template to be fetched
+$rev: Revision object of the template
+&$text: Transclusion text of the template or false or null
+&$deps: Array of template dependencies with 'title', 'page_id', 'rev_id' keys
+
+'ParserFirstCallInit': Called when the parser initialises for the first time.
+&$parser: Parser object being cleared
+
+'ParserGetVariableValueSwitch': Called when the parser need the value of a
+custom magic word
+&$parser: Parser object
+&$varCache: array to store the value in case of multiples calls of the
+ same magic word
+&$index: index (string) of the magic
+&$ret: value of the magic word (the hook should set it)
+&$frame: PPFrame object to use for expanding any template variables
+
+'ParserGetVariableValueTs': Use this to change the value of the time for the
+{{LOCAL...}} magic word.
+&$parser: Parser object
+&$time: actual time (timestamp)
+
+'ParserGetVariableValueVarCache': use this to change the value of the variable
+cache or return false to not use it.
+&$parser: Parser object
+&$varCache: variable cache (array)
+
+'ParserLimitReport': DEPRECATED! Use ParserLimitReportPrepare and
+ParserLimitReportFormat instead.
+Called at the end of Parser:parse() when the parser will
+include comments about size of the text parsed.
+$parser: Parser object
+&$limitReport: text that will be included (without comment tags)
+
+'ParserLimitReportFormat': Called for each row in the parser limit report that
+needs formatting. If nothing handles this hook, the default is to use "$key" to
+get the label, and "$key-value" or "$key-value-text"/"$key-value-html" to
+format the value.
+$key: Key for the limit report item (string)
+&$value: Value of the limit report item
+&$report: String onto which to append the data
+$isHTML: If true, $report is an HTML table with two columns; if false, it's
+ text intended for display in a monospaced font.
+$localize: If false, $report should be output in English.
+
+'ParserLimitReportPrepare': Called at the end of Parser:parse() when the parser
+will include comments about size of the text parsed. Hooks should use
+$output->setLimitReportData() to populate data. Functions for this hook should
+not use $wgLang; do that in ParserLimitReportFormat instead.
+$parser: Parser object
+$output: ParserOutput object
+
+'ParserMakeImageParams': Called before the parser make an image link, use this
+to modify the parameters of the image.
+$title: title object representing the file
+$file: file object that will be used to create the image
+&$params: 2-D array of parameters
+$parser: Parser object that called the hook
+
+'ParserOptionsRegister': Register additional parser options. Note that if you
+change the default value for an option, all existing parser cache entries will
+be invalid. To avoid bugs, you'll need to handle that somehow (e.g. with the
+RejectParserCacheValue hook) because MediaWiki won't do it for you.
+&$defaults: Set the default value for your option here.
+&$inCacheKey: To fragment the parser cache on your option, set a truthy value here.
+&$lazyLoad: To lazy-initialize your option, set it null in $defaults and set a
+ callable here. The callable is passed the ParserOptions object and the option
+ name.
+
+'ParserOutputPostCacheTransform': Called from ParserOutput::getText() to do
+post-cache transforms.
+$parserOutput: The ParserOutput object.
+&$text: The text being transformed, before core transformations are done.
+&$options: The options array being used for the transformation.
+
+'ParserSectionCreate': Called each time the parser creates a document section
+from wikitext. Use this to apply per-section modifications to HTML (like
+wrapping the section in a DIV). Caveat: DIVs are valid wikitext, and a DIV
+can begin in one section and end in another. Make sure your code can handle
+that case gracefully. See the EditSectionClearerLink extension for an example.
+$parser: the calling Parser instance
+$section: the section number, zero-based, but section 0 is usually empty
+&$sectionContent: ref to the content of the section. modify this.
+$showEditLinks: boolean describing whether this section has an edit link
+
+'ParserTestGlobals': Allows to define globals for parser tests.
+&$globals: Array with all the globals which should be set for parser tests.
+ The arrays keys serve as the globals names, its values are the globals values.
+
+'ParserTestTables': Alter the list of tables to duplicate when parser tests are
+run. Use when page save hooks require the presence of custom tables to ensure
+that tests continue to run properly.
+&$tables: array of table names
+
+'ParserOutputStashForEdit': Called when an edit stash parse finishes, before the output is cached.
+$page: the WikiPage of the candidate edit
+$content: the Content object of the candidate edit
+$output: the ParserOutput result of the candidate edit
+$summary: the change summary of the candidate edit
+$user: the User considering the edit
+
+'PasswordPoliciesForUser': Alter the effective password policy for a user.
+$user: User object whose policy you are modifying
+&$effectivePolicy: Array of policy statements that apply to this user
+
+'PerformRetroactiveAutoblock': Called before a retroactive autoblock is applied
+to a user.
+$block: Block object (which is set to be autoblocking)
+&$blockIds: Array of block IDs of the autoblock
+
+'PersonalUrls': Alter the user-specific navigation links (e.g. "my page,
+my talk page, my contributions" etc).
+&$personal_urls: Array of link specifiers (see SkinTemplate.php)
+&$title: Title object representing the current page
+$skin: SkinTemplate object providing context (e.g. to check if the user is
+ logged in, etc.)
+
+'PingLimiter': Allows extensions to override the results of User::pingLimiter().
+&$user: User performing the action
+$action: Action being performed
+&$result: Whether or not the action should be prevented
+ Change $result and return false to give a definitive answer, otherwise
+ the built-in rate limiting checks are used, if enabled.
+$incrBy: Amount to increment counter by
+
+'PlaceNewSection': Override placement of new sections. Return false and put the
+merged text into $text to override the default behavior.
+$wikipage: WikiPage object
+$oldtext: the text of the article before editing
+$subject: subject of the new section
+&$text: text of the new section
+
+'PostLoginRedirect': Modify the post login redirect behavior.
+Occurs after signing up or logging in, allows for interception of redirect.
+&$returnTo: The page name to return to, as a string
+&$returnToQuery: array of url parameters, mapping parameter names to values
+&$type: type of login redirect as string;
+ error: display a return to link ignoring $wgRedirectOnLogin
+ signup: display a return to link using $wgRedirectOnLogin if needed
+ success: display a return to link using $wgRedirectOnLogin if needed
+ successredirect: send an HTTP redirect using $wgRedirectOnLogin if needed
+
+'PreferencesFormPreSave': Override preferences being saved
+$formData: array of user submitted data
+$form: PreferencesForm object, also a ContextSource
+$user: User object with preferences to be saved set
+&$result: boolean indicating success
+$oldUserOptions: array with user old options (before save)
+
+'PreferencesGetLegend': Override the text used for the <legend> of a
+preferences section.
+$form: the PreferencesForm object. This is a ContextSource as well
+$key: the section name
+&$legend: the legend text. Defaults to wfMessage( "prefs-$key" )->text() but may
+ be overridden
+
+'PrefixSearchBackend': DEPRECATED! Override SearchEngine::completionSearchBackend instead.
+Override the title prefix search used for OpenSearch and
+AJAX search suggestions. Put results into &$results outparam and return false.
+$ns: array of int namespace keys to search in
+$search: search term (not guaranteed to be conveniently normalized)
+$limit: maximum number of results to return
+&$results: out param: array of page names (strings)
+$offset: number of results to offset from the beginning
+
+'PrefixSearchExtractNamespace': Called if core was not able to extract a
+namespace from the search string so that extensions can attempt it.
+&$namespaces: array of int namespace keys to search in (change this if you can
+ extract namespaces)
+&$search: search term (replace this with term without the namespace if you can
+ extract one)
+
+'PrefsEmailAudit': Called when user changes their email address.
+$user: User (object) changing his email address
+$oldaddr: old email address (string)
+$newaddr: new email address (string)
+
+'ProtectionForm::buildForm': Called after all protection type fieldsets are made
+in the form.
+$article: the title being (un)protected
+&$output: a string of the form HTML so far
+
+'ProtectionForm::save': Called when a protection form is submitted.
+$article: the Page being (un)protected
+&$errorMsg: an html message string of an error or an array of message name and
+ its parameters
+$reasonstr: a string describing the reason page protection level is altered
+
+'ProtectionForm::showLogExtract': Called after the protection log extract is
+shown.
+$article: the page the form is shown for
+$out: OutputPage object
+
+'RandomPageQuery': Lets you modify the query used by Special:Random to select
+random pages.
+&$tables: Database tables to be used in the query
+&$conds: Conditions to be applied in the query
+&$joinConds: Join conditions to be applied in the query
+
+'RawPageViewBeforeOutput': Right before the text is blown out in action=raw.
+&$obj: RawAction object
+&$text: The text that's going to be the output
+
+'RecentChange_save': Called at the end of RecentChange::save().
+&$recentChange: RecentChange object
+
+'RecentChangesPurgeRows': Called when old recentchanges rows are purged, after
+deleting those rows but within the same transaction.
+$rows: The deleted rows as an array of recentchanges row objects (with up to
+ $wgUpdateRowsPerQuery items).
+
+'RedirectSpecialArticleRedirectParams': Lets you alter the set of parameter
+names such as "oldid" that are preserved when using redirecting special pages
+such as Special:MyPage and Special:MyTalk.
+&$redirectParams: An array of parameters preserved by redirecting special pages.
+
+'RejectParserCacheValue': Return false to reject an otherwise usable
+cached value from the Parser cache. NOTE: CARELESS USE OF THIS HOOK CAN
+HAVE CATASTROPHIC CONSEQUENCES FOR HIGH-TRAFFIC INSTALLATIONS. USE WITH
+EXTREME CARE.
+$parserOutput: ParserOutput value.
+$wikiPage: WikiPage object.
+$parserOptions: ParserOptions object.
+
+'RequestContextCreateSkin': Called when RequestContext::getSkin creates a skin
+instance. Can be used by an extension override what skin is used in certain
+contexts.
+$context: (IContextSource) The RequestContext the skin is being created for.
+&$skin: A variable reference you may set a Skin instance or string key on to
+ override the skin that will be used for the context.
+
+'RequestHasSameOriginSecurity': Called to determine if the request is somehow
+flagged to lack same-origin security. Return false to indicate the lack. Note
+if the "somehow" involves HTTP headers, you'll probably need to make sure
+the header is varied on.
+$request: The WebRequest object.
+
+'ResetPasswordExpiration': Allow extensions to set a default password expiration
+$user: The user having their password expiration reset
+&$newExpire: The new expiration date
+
+'ResourceLoaderForeignApiModules': Called from ResourceLoaderForeignApiModule.
+Use this to add dependencies to 'mediawiki.ForeignApi' module when you wish
+to override its behavior. See the module docs for more information.
+&$dependencies: string[] List of modules that 'mediawiki.ForeignApi' should
+depend on
+$context: ResourceLoaderContext|null
+
+'ResourceLoaderGetConfigVars': Called at the end of
+ResourceLoaderStartUpModule::getConfigSettings(). Use this to export static
+configuration variables to JavaScript. Things that depend on the current page
+or request state must be added through MakeGlobalVariablesScript instead.
+&$vars: array( variable name => value )
+
+'ResourceLoaderJqueryMsgModuleMagicWords': Called in
+ResourceLoaderJqueryMsgModule to allow adding magic words for jQueryMsg.
+The value should be a string, and they can depend only on the
+ResourceLoaderContext.
+$context: ResourceLoaderContext
+&$magicWords: Associative array mapping all-caps magic word to a string value
+
+'ResourceLoaderRegisterModules': Right before modules information is required,
+such as when responding to a resource
+loader request or generating HTML output.
+&$resourceLoader: ResourceLoader object
+
+'ResourceLoaderTestModules': Let you add new JavaScript testing modules. This is
+called after the addition of 'qunit' and MediaWiki testing resources.
+&$testModules: array of JavaScript testing modules. The 'qunit' framework,
+ included in core, is fed using tests/qunit/QUnitTestResources.php.
+ To add a new qunit module named 'myext.tests':
+ $testModules['qunit']['myext.tests'] = array(
+ 'script' => 'extension/myext/tests.js',
+ 'dependencies' => <any module dependency you might have>
+ );
+ For QUnit framework, the mediawiki.tests.qunit.testrunner dependency will be
+ added to any module.
+&$ResourceLoader: object
+
+'RevisionRecordInserted': Called after a revision is inserted into the database.
+$revisionRecord: the RevisionRecord that has just been inserted.
+
+'RevisionInsertComplete': DEPRECATED! Use RevisionRecordInserted hook instead.
+Called after a revision is inserted into the database.
+$revision: the Revision
+$data: DEPRECATED! Always null!
+$flags: DEPRECATED! Always null!
+
+'SearchableNamespaces': An option to modify which namespaces are searchable.
+&$arr: Array of namespaces ($nsId => $name) which will be used.
+
+'SearchAfterNoDirectMatch': If there was no match for the exact result. This
+runs before lettercase variants are attempted, whereas 'SearchGetNearMatch'
+runs after.
+$term: Search term string
+&$title: Outparam; set to $title object and return false for a match
+
+'SearchGetNearMatch': An extra chance for exact-title-matches in "go" searches
+if nothing was found.
+$term: Search term string
+&$title: Outparam; set to $title object and return false for a match
+
+'SearchGetNearMatchBefore': Perform exact-title-matches in "go" searches before
+the normal operations.
+$allSearchTerms: Array of the search terms in all content languages
+&$titleResult: Outparam; the value to return. A Title object or null.
+
+'SearchGetNearMatchComplete': A chance to modify exact-title-matches in "go"
+searches.
+$term: Search term string
+&$title: Current Title object that is being returned (null if none found).
+
+'SearchResultInitFromTitle': Set the revision used when displaying a page in
+search results.
+$title: Current Title object being displayed in search results.
+&$id: Revision ID (default is false, for latest)
+
+'SearchIndexFields': Add fields to search index mapping.
+&$fields: Array of fields, all implement SearchIndexField
+$engine: SearchEngine instance for which mapping is being built.
+
+'SearchDataForIndex': Add data to search document. Allows to add any data to
+the field map used to index the document.
+&$fields: Array of name => value pairs for fields
+$handler: ContentHandler for the content being indexed
+$page: WikiPage that is being indexed
+$output: ParserOutput that is produced from the page
+$engine: SearchEngine for which the indexing is intended
+
+'SearchResultsAugment': Allows extension to add its code to the list of search
+result augmentors.
+&$setAugmentors: List of whole-set augmentor objects, must implement ResultSetAugmentor
+&$rowAugmentors: List of per-row augmentor objects, must implement ResultAugmentor.
+Note that lists should be in the format name => object and the names in both lists should
+be distinct.
+
+'SecondaryDataUpdates': Allows modification of the list of DataUpdates to
+perform when page content is modified. Currently called by
+AbstractContent::getSecondaryDataUpdates.
+$title: Title of the page that is being edited.
+$oldContent: Content object representing the page's content before the edit.
+$recursive: bool indicating whether DataUpdates should trigger recursive
+ updates (relevant mostly for LinksUpdate).
+$parserOutput: ParserOutput representing the rendered version of the page
+ after the edit.
+&$updates: a list of DataUpdate objects, to be modified or replaced by
+ the hook handler.
+
+'SecuritySensitiveOperationStatus': Affect the return value from
+MediaWiki\Auth\AuthManager::securitySensitiveOperationStatus().
+&$status: (string) The status to be returned. One of the AuthManager::SEC_*
+ constants. SEC_REAUTH will be automatically changed to SEC_FAIL if
+ authentication isn't possible for the current session type.
+$operation: (string) The operation being checked.
+$session: (MediaWiki\Session\Session) The current session. The
+ currently-authenticated user may be retrieved as $session->getUser().
+$timeSinceAuth: (int) The time since last authentication. PHP_INT_MAX if
+ the time of last auth is unknown, or -1 if authentication is not possible.
+
+'SelfLinkBegin': Called before a link to the current article is displayed to
+allow the display of the link to be customized.
+$nt: the Title object
+&$html: html to display for the link
+&$trail: optional text to display before $html
+&$prefix: optional text to display after $html
+&$ret: the value to return if your hook returns false
+
+'SendWatchlistEmailNotification': Return true to send watchlist email
+notification
+$targetUser: the user whom to send watchlist email notification
+$title: the page title
+$enotif: EmailNotification object
+
+'SessionCheckInfo': Validate a MediaWiki\Session\SessionInfo as it's being
+loaded from storage. Return false to prevent it from being used.
+&$reason: String rejection reason to be logged
+$info: MediaWiki\Session\SessionInfo being validated
+$request: WebRequest being loaded from
+$metadata: Array|false Metadata array for the MediaWiki\Session\Session
+$data: Array|false Data array for the MediaWiki\Session\Session
+
+'SessionMetadata': Add metadata to a session being saved.
+$backend: MediaWiki\Session\SessionBackend being saved.
+&$metadata: Array Metadata to be stored. Add new keys here.
+$requests: Array of WebRequests potentially being saved to. Generally 0-1 real
+ request and 0+ FauxRequests.
+
+'SetupAfterCache': Called in Setup.php, after cache objects are set
+
+'ShortPagesQuery': Allow extensions to modify the query used by
+Special:ShortPages.
+&$tables: tables to join in the query
+&$conds: conditions for the query
+&$joinConds: join conditions for the query
+&$options: options for the query
+
+'ShowMissingArticle': Called when generating the output for a non-existent page.
+$article: The article object corresponding to the page
+
+'ShowSearchHit': Customize display of search hit.
+$searchPage: The SpecialSearch instance.
+$result: The SearchResult to show
+$terms: Search terms, for highlighting
+&$link: HTML of link to the matching page. May be modified.
+&$redirect: HTML of redirect info. May be modified.
+&$section: HTML of matching section. May be modified.
+&$extract: HTML of content extract. May be modified.
+&$score: HTML of score. May be modified.
+&$size: HTML of page size. May be modified.
+&$date: HTML of of page modification date. May be modified.
+&$related: HTML of additional info for the matching page. May be modified.
+&$html: May be set to the full HTML that should be used to represent the search
+ hit. Must include the <li> ... </li> tags. Will only be used if the hook
+ function returned false.
+
+'ShowSearchHitTitle': Customise display of search hit title/link.
+&$title: Title to link to
+&$titleSnippet: Label for the link representing the search result. Typically the article title.
+$result: The SearchResult object
+$terms: String of the search terms entered
+$specialSearch: The SpecialSearch object
+&$query: Array of query string parameters for the link representing the search result.
+&$attributes: Array of title link attributes, can be modified by extension.
+
+'SidebarBeforeOutput': Allows to edit sidebar just before it is output by skins.
+Warning: This hook is run on each display. You should consider to use
+'SkinBuildSidebar' that is aggressively cached.
+$skin: Skin object
+&$bar: Sidebar content
+ Modify $bar to add or modify sidebar portlets.
+
+'SiteNoticeAfter': After the sitenotice/anonnotice is composed.
+&$siteNotice: HTML sitenotice. Alter the contents of $siteNotice to add to/alter
+ the sitenotice/anonnotice.
+$skin: Skin object
+
+'SiteNoticeBefore': Before the sitenotice/anonnotice is composed. Return true to
+allow the normal method of notice selection/rendering to work, or change the
+value of $siteNotice and return false to alter it.
+&$siteNotice: HTML returned as the sitenotice
+$skin: Skin object
+
+'SkinAfterBottomScripts': At the end of Skin::bottomScripts().
+$skin: Skin object
+&$text: bottomScripts Text. Append to $text to add additional text/scripts after
+ the stock bottom scripts.
+
+'SkinAfterContent': Allows extensions to add text after the page content and
+article metadata. This hook should work in all skins. Set the &$data variable to
+the text you're going to add.
+&$data: (string) Text to be printed out directly (without parsing)
+$skin: Skin object
+
+'SkinBuildSidebar': At the end of Skin::buildSidebar().
+$skin: Skin object
+&$bar: Sidebar contents
+Modify $bar to add or modify sidebar portlets.
+
+'SkinCopyrightFooter': Allow for site and per-namespace customization of
+copyright notice.
+$title: displayed page title
+$type: 'normal' or 'history' for old/diff views
+&$msg: overridable message; usually 'copyright' or 'history_copyright'. This
+ message must be in HTML format, not wikitext!
+&$link: overridable HTML link to be passed into the message as $1
+&$forContent: DEPRECATED! overridable flag if copyright footer is shown in
+ content language.
+
+'SkinEditSectionLinks': Modify the section edit links
+$skin: Skin object rendering the UI
+$title: Title object for the title being linked to (may not be the same as
+ the page title, if the section is included from a template)
+$section: The designation of the section being pointed to, to be included in
+ the link, like "&section=$section"
+$tooltip: The default tooltip. Escape before using.
+ By default, this is wrapped in the 'editsectionhint' message.
+&$result: Array containing all link detail arrays. Each link detail array should
+ contain the following keys:
+ - targetTitle - Target Title object
+ - text - String for the text
+ - attribs - Array of attributes
+ - query - Array of query parameters to add to the URL
+ - options - Array of options for Linker::link
+$lang: The language code to use for the link in the wfMessage function
+
+'SkinGetPoweredBy': TODO
+&$text: additional 'powered by' icons in HTML. Note: Modern skin does not use
+ the MediaWiki icon but plain text instead.
+$skin: Skin object
+
+'SkinPreloadExistence': Supply titles that should be added to link existence
+cache before the page is rendered.
+&$titles: Array of Title objects
+$skin: Skin object
+
+'SkinSubPageSubtitle': At the beginning of Skin::subPageSubtitle().
+If false is returned $subpages will be used instead of the HTML
+subPageSubtitle() generates.
+If true is returned, $subpages will be ignored and the rest of
+subPageSubtitle() will run.
+&$subpages: Subpage links HTML
+$skin: Skin object
+$out: OutputPage object
+
+'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink': After creating the "permanent
+link" tab.
+&$sktemplate: SkinTemplate object
+&$nav_urls: array of tabs
+&$revid: The revision id of the permanent link
+&$revid2: The revision id of the permanent link, second time
+
+'SkinTemplateGetLanguageLink': After building the data for a language link from
+which the actual html is constructed.
+&$languageLink: array containing data about the link. The following keys can be
+ modified: href, text, title, class, lang, hreflang. Each of them is a string.
+$languageLinkTitle: Title object belonging to the external language link.
+$title: Title object of the page the link belongs to.
+$outputPage: The OutputPage object the links are built from.
+
+'SkinTemplateNavigation': Called on content pages after the tabs have been
+added, but before variants have been added.
+&$sktemplate: SkinTemplate object
+&$links: Structured navigation links. This is used to alter the navigation for
+ skins which use buildNavigationUrls such as Vector.
+
+'SkinTemplateNavigation::SpecialPage': Called on special pages after the special
+tab is added but before variants have been added.
+&$sktemplate: SkinTemplate object
+&$links: Structured navigation links. This is used to alter the navigation for
+ skins which use buildNavigationUrls such as Vector.
+
+'SkinTemplateNavigation::Universal': Called on both content and special pages
+after variants have been added.
+&$sktemplate: SkinTemplate object
+&$links: Structured navigation links. This is used to alter the navigation for
+ skins which use buildNavigationUrls such as Vector.
+
+'SkinTemplateOutputPageBeforeExec': Before SkinTemplate::outputPage() starts
+page output.
+&$sktemplate: SkinTemplate object
+&$tpl: QuickTemplate engine object
+
+'SkinTemplatePreventOtherActiveTabs': Use this to prevent showing active tabs.
+&$sktemplate: SkinTemplate object
+&$res: set to true to prevent active tabs
+
+'SkinTemplateTabAction': Override SkinTemplate::tabAction().
+You can either create your own array, or alter the parameters for
+the normal one.
+&$sktemplate: The SkinTemplate instance.
+$title: Title instance for the page.
+$message: Visible label of tab.
+$selected: Whether this is a selected tab.
+$checkEdit: Whether or not the action=edit query should be added if appropriate.
+&$classes: Array of CSS classes to apply.
+&$query: Query string to add to link.
+&$text: Link text.
+&$result: Complete assoc. array if you want to return true.
+
+'SkinTemplateToolboxEnd': Called by SkinTemplate skins after toolbox links have
+been rendered (useful for adding more).
+&$sk: The QuickTemplate based skin template running the hook.
+$dummy: Called when SkinTemplateToolboxEnd is used from a BaseTemplate skin,
+ extensions that add support for BaseTemplateToolbox should watch for this
+ dummy parameter with "$dummy=false" in their code and return without echoing
+ any HTML to avoid creating duplicate toolbox items.
+
+'SoftwareInfo': Called by Special:Version for returning information about the
+software.
+&$software: The array of software in format 'name' => 'version'. See
+ SpecialVersion::softwareInformation().
+
+'SpecialBlockModifyFormFields': Add more fields to Special:Block
+$sp: SpecialPage object, for context
+&$fields: Current HTMLForm fields
+
+'SpecialContributionsBeforeMainOutput': Before the form on Special:Contributions
+$id: User id number, only provided for backwards-compatibility
+$user: User object representing user contributions are being fetched for
+$sp: SpecialPage instance, providing context
+
+'SpecialContributions::formatRow::flags': Called before rendering a
+Special:Contributions row.
+$context: IContextSource object
+$row: Revision information from the database
+&$flags: List of flags on this row
+
+'SpecialContributions::getForm::filters': Called with a list of filters to render
+on Special:Contributions.
+$sp: SpecialContributions object, for context
+&$filters: List of filters rendered as HTML
+
+'SpecialListusersDefaultQuery': Called right before the end of
+UsersPager::getDefaultQuery().
+$pager: The UsersPager instance
+&$query: The query array to be returned
+
+'SpecialListusersFormatRow': Called right before the end of
+UsersPager::formatRow().
+&$item: HTML to be returned. Will be wrapped in <li></li> after the hook finishes
+$row: Database row object
+
+'SpecialListusersHeader': Called after adding the submit button in
+UsersPager::getPageHeader().
+$pager: The UsersPager instance
+&$out: The header HTML
+
+'SpecialListusersHeaderForm': Called before adding the submit button in
+UsersPager::getPageHeader().
+$pager: The UsersPager instance
+&$out: The header HTML
+
+'SpecialListusersQueryInfo': Called right before the end of.
+UsersPager::getQueryInfo()
+$pager: The UsersPager instance
+&$query: The query array to be returned
+
+'SpecialLogAddLogSearchRelations': Add log relations to the current log
+$type: String of the log type
+$request: WebRequest object for getting the value provided by the current user
+&$qc: Array for query conditions to add
+
+'SpecialMovepageAfterMove': Called after moving a page.
+&$movePage: MovePageForm object
+&$oldTitle: old title (object)
+&$newTitle: new title (object)
+
+'SpecialNewpagesConditions': Called when building sql query for
+Special:NewPages.
+&$special: NewPagesPager object (subclass of ReverseChronologicalPager)
+$opts: FormOptions object containing special page options
+&$conds: array of WHERE conditionals for query
+&$tables: array of tables to be queried
+&$fields: array of columns to select
+&$join_conds: join conditions for the tables
+
+'SpecialNewPagesFilters': Called after building form options at NewPages.
+$special: the special page object
+&$filters: associative array of filter definitions. The keys are the HTML
+ name/URL parameters. Each key maps to an associative array with a 'msg'
+ (message key) and a 'default' value.
+
+'SpecialPage_initList': Called when setting up SpecialPageFactory::$list, use
+this hook to remove a core special page or conditionally register special pages.
+&$list: list (array) of core special pages
+
+'SpecialPageAfterExecute': Called after SpecialPage::execute.
+$special: the SpecialPage object
+$subPage: the subpage string or null if no subpage was specified
+
+'SpecialPageBeforeExecute': Called before SpecialPage::execute.
+Return false to prevent execution.
+$special: the SpecialPage object
+$subPage: the subpage string or null if no subpage was specified
+
+'SpecialPageBeforeFormDisplay': Before executing the HTMLForm object.
+$name: name of the special page
+&$form: HTMLForm object
+
+'SpecialPasswordResetOnSubmit': When executing a form submission on
+Special:PasswordReset.
+&$users: array of User objects.
+$data: array of data submitted by the user
+&$error: string, error code (message key) used to describe to error (out
+ parameter). The hook needs to return false when setting this, otherwise it
+ will have no effect.
+
+'SpecialRandomGetRandomTitle': Called during the execution of Special:Random,
+use this to change some selection criteria or substitute a different title.
+&$randstr: The random number from wfRandom()
+&$isRedir: Boolean, whether to select a redirect or non-redirect
+&$namespaces: An array of namespace indexes to get the title from
+&$extra: An array of extra SQL statements
+&$title: If the hook returns false, a Title object to use instead of the
+ result from the normal query
+
+'SpecialRecentChangesFilters': DEPRECATED! Use ChangesListSpecialPageStructuredFilters
+instead.
+Called after building form options at RecentChanges.
+$special: the special page object
+&$filters: associative array of filter definitions. The keys are the HTML
+ name/URL parameters. Each key maps to an associative array with a 'msg'
+ (message key) and a 'default' value.
+
+'SpecialRecentChangesPanel': Called when building form options in
+SpecialRecentChanges.
+&$extraOpts: array of added items, to which can be added
+$opts: FormOptions for this request
+
+'SpecialRecentChangesQuery': DEPRECATED! Use ChangesListSpecialPageStructuredFilters
+or ChangesListSpecialPageQuery instead.
+Called when building SQL query for SpecialRecentChanges and
+SpecialRecentChangesLinked.
+&$conds: array of WHERE conditionals for query
+&$tables: array of tables to be queried
+&$join_conds: join conditions for the tables
+$opts: FormOptions for this request
+&$query_options: array of options for the database request
+&$select: Array of columns to select
+
+'SpecialResetTokensTokens': Called when building token list for
+SpecialResetTokens.
+&$tokens: array of token information arrays in the format of
+ array(
+ 'preference' => '<preference-name>',
+ 'label-message' => '<message-key>',
+ )
+
+'SpecialSearchCreateLink': Called when making the message to create a page or
+go to the existing page.
+$t: title object searched for
+&$params: an array of the default message name and page title (as parameter)
+
+'SpecialSearchGoResult': If a hook returns false the 'go' feature will be
+canceled and a normal search will be performed. Returning true without setting
+$url does a standard redirect to $title. Setting $url redirects to the
+specified URL.
+$term: The string the user searched for
+$title: The title the 'go' feature has decided to forward the user to
+&$url: Initially null, hook subscribers can set this to specify the final url to redirect to
+
+'SpecialSearchNogomatch': Called when the 'Go' feature is triggered (generally
+from autocomplete search other than the main bar on Special:Search) and the
+target doesn't exist. Full text search results are generated after this hook is
+called.
+&$title: title object generated from the text entered by the user
+
+'SpecialSearchPowerBox': The equivalent of SpecialSearchProfileForm for
+the advanced form, a.k.a. power search box.
+&$showSections: an array to add values with more options to
+$term: the search term (not a title object)
+$opts: an array of hidden options (containing 'redirs' and 'profile')
+
+'SpecialSearchProfileForm': Allows modification of search profile forms.
+$search: special page object
+&$form: String: form html
+$profile: String: current search profile
+$term: String: search term
+$opts: Array: key => value of hidden options for inclusion in custom forms
+
+'SpecialSearchProfiles': Allows modification of search profiles.
+&$profiles: profiles, which can be modified.
+
+'SpecialSearchResults': Called before search result display
+$term: string of search term
+&$titleMatches: empty or SearchResultSet object
+&$textMatches: empty or SearchResultSet object
+
+'SpecialSearchResultsPrepend': Called immediately before returning HTML
+on the search results page. Useful for including an external search
+provider. To disable the output of MediaWiki search output, return
+false.
+$specialSearch: SpecialSearch object ($this)
+$output: $wgOut
+$term: Search term specified by the user
+
+'SpecialSearchResultsAppend': Called immediately before returning HTML
+on the search results page. Useful for including a feedback link.
+$specialSearch: SpecialSearch object ($this)
+$output: $wgOut
+$term: Search term specified by the user
+
+'SpecialSearchSetupEngine': Allows passing custom data to search engine.
+$search: SpecialSearch special page object
+$profile: String: current search profile
+$engine: the search engine
+
+'SpecialStatsAddExtra': Add extra statistic at the end of Special:Statistics.
+&$extraStats: Array to save the new stats
+ $extraStats['<name of statistic>'] => <value>;
+ <value> can be an array with the keys "name" and "number":
+ "name" is the HTML to be displayed in the name column
+ "number" is the number to be displayed.
+ or, <value> can be the number to be displayed and <name> is the
+ message key to use in the name column,
+$context: IContextSource object
+
+'SpecialTrackingCategories::preprocess': Called after LinkBatch on Special:TrackingCategories
+$specialPage: The SpecialTrackingCategories object
+$trackingCategories: Array of data from Special:TrackingCategories with msg and cats
+
+'SpecialTrackingCategories::generateCatLink': Called for each cat link on Special:TrackingCategories
+$specialPage: The SpecialTrackingCategories object
+$catTitle: The Title object of the linked category
+&$html: The Result html
+
+'SpecialUploadComplete': Called after successfully uploading a file from
+Special:Upload.
+&$form: The SpecialUpload object
+
+'SpecialVersionVersionUrl': Called when building the URL for Special:Version.
+$wgVersion: Current $wgVersion for you to use
+&$versionUrl: Raw url to link to (eg: release notes)
+
+'SpecialWatchlistFilters': DEPRECATED! Use ChangesListSpecialPageStructuredFilters
+instead.
+Called after building form options at Watchlist.
+$special: the special page object
+&$filters: associative array of filter definitions. The keys are the HTML
+ name/URL parameters. Each key maps to an associative array with a 'msg'
+ (message key) and a 'default' value.
+
+'SpecialWatchlistGetNonRevisionTypes': Called when building sql query for
+SpecialWatchlist. Allows extensions to register custom values they have
+inserted to rc_type so they can be returned as part of the watchlist.
+&$nonRevisionTypes: array of values in the rc_type field of recentchanges table
+
+'SpecialWatchlistQuery': DEPRECATED! Use ChangesListSpecialPageStructuredFilters
+or ChangesListSpecialPageQuery instead.
+Called when building sql query for SpecialWatchlist.
+&$conds: array of WHERE conditionals for query
+&$tables: array of tables to be queried
+&$join_conds: join conditions for the tables
+&$fields: array of query fields
+$opts: A FormOptions object with watchlist options for the current request
+
+'TestCanonicalRedirect': Called when about to force a redirect to a canonical
+URL for a title when we have no other parameters on the URL. Gives a chance for
+extensions that alter page view behavior radically to abort that redirect or
+handle it manually.
+$request: WebRequest
+$title: Title of the currently found title obj
+$output: OutputPage object
+
+'ThumbnailBeforeProduceHTML': Called before an image HTML is about to be
+rendered (by ThumbnailImage:toHtml method).
+$thumbnail: the ThumbnailImage object
+&$attribs: image attribute array
+&$linkAttribs: image link attribute array
+
+'TitleArrayFromResult': Called when creating an TitleArray object from a
+database result.
+&$titleArray: set this to an object to override the default object returned
+$res: database result used to create the object
+
+'TitleExists': Called when determining whether a page exists at a given title.
+$title: The title being tested.
+&$exists: Whether the title exists.
+
+'TitleGetEditNotices': Allows extensions to add edit notices
+$title: The Title object for the page the edit notices are for
+$oldid: Revision ID that the edit notices are for (or 0 for latest)
+&$notices: Array of notices. Keys are i18n message keys, values are
+parseAsBlock()ed messages.
+
+'TitleGetRestrictionTypes': Allows extensions to modify the types of protection
+that can be applied.
+$title: The title in question.
+&$types: The types of protection available.
+
+'TitleIsAlwaysKnown': Called when determining if a page exists. Allows
+overriding default behavior for determining if a page exists. If $isKnown is
+kept as null, regular checks happen. If it's a boolean, this value is returned
+by the isKnown method.
+$title: Title object that is being checked
+&$isKnown: Boolean|null; whether MediaWiki currently thinks this page is known
+
+'TitleIsMovable': Called when determining if it is possible to move a page. Note
+that this hook is not called for interwiki pages or pages in immovable
+namespaces: for these, isMovable() always returns false.
+$title: Title object that is being checked
+&$result: Boolean; whether MediaWiki currently thinks this page is movable.
+ Hooks may change this value to override the return value of
+ Title::isMovable().
+
+
+'TitleMove': Before moving an article (title).
+$old: old title
+$nt: new title
+$user: user who does the move
+
+'TitleMoveStarting': Before moving an article (title), but just after the atomic DB section starts.
+$old: old title
+$nt: new title
+$user: user who does the move
+
+'TitleMoveComplete': After moving an article (title), post-commit.
+&$old: old title
+&$nt: new title
+&$user: user who did the move
+$pageid: database ID of the page that's been moved
+$redirid: database ID of the created redirect
+$reason: reason for the move
+$revision: the Revision created by the move
+
+'TitleMoveCompleting': After moving an article (title), pre-commit.
+$old: old title
+$nt: new title
+$user: user who did the move
+$pageid: database ID of the page that's been moved
+$redirid: database ID of the created redirect
+$reason: reason for the move
+$revision: the Revision created by the move
+
+'TitleQuickPermissions': Called from Title::checkQuickPermissions to add to
+or override the quick permissions check.
+$title: The Title object being accessed
+$user: The User performing the action
+$action: Action being performed
+&$errors: Array of errors
+$doExpensiveQueries: Whether to do expensive DB queries
+$short: Whether to return immediately on first error
+
+'TitleReadWhitelist': Called at the end of read permissions checks, just before
+adding the default error message if nothing allows the user to read the page. If
+a handler wants a title to *not* be whitelisted, it should also return false.
+$title: Title object being checked against
+$user: Current user object
+&$whitelisted: Boolean value of whether this title is whitelisted
+
+'TitleSquidURLs': Called to determine which URLs to purge from HTTP caches.
+$title: Title object to purge
+&$urls: An array of URLs to purge from the caches, to be manipulated.
+
+'UnblockUser': Before an IP address or user is unblocked.
+&$block: The Block object about to be saved
+&$user: The user performing the unblock (not the one being unblocked)
+&$reason: If the hook is aborted, the error message to be returned in an array
+
+'UnblockUserComplete': After an IP address or user has been unblocked.
+$block: The Block object that was saved
+$user: The user who performed the unblock (not the one being unblocked)
+
+'UndeleteForm::showHistory': Called in UndeleteForm::showHistory, after a
+PageArchive object has been created but before any further processing is done.
+&$archive: PageArchive object
+$title: Title object of the page that we're viewing
+
+'UndeleteForm::showRevision': Called in UndeleteForm::showRevision, after a
+PageArchive object has been created but before any further processing is done.
+&$archive: PageArchive object
+$title: Title object of the page that we're viewing
+
+'UndeleteForm::undelete': Called in UndeleteForm::undelete, after checking that
+the site is not in read-only mode, that the Title object is not null and after
+a PageArchive object has been constructed but before performing any further
+processing.
+&$archive: PageArchive object
+$title: Title object of the page that we're about to undelete
+
+'UndeleteShowRevision': Called when showing a revision in Special:Undelete.
+$title: title object related to the revision
+$rev: revision (object) that will be viewed
+
+'UnitTestsAfterDatabaseSetup': Called right after MediaWiki's test infrastructure
+has finished creating/duplicating core tables for unit tests.
+$database: Database in question
+$prefix: Table prefix to be used in unit tests
+
+'UnitTestsBeforeDatabaseTeardown': Called right before MediaWiki tears down its
+database infrastructure used for unit tests.
+
+'UnitTestsList': Called when building a list of paths containing PHPUnit tests.
+Since 1.24: Paths pointing to a directory will be recursively scanned for
+test case files matching the suffix "Test.php".
+&$paths: list of test cases and directories to search.
+
+'UnknownAction': DEPRECATED! To add an action in an extension,
+create a subclass of Action, and add a new key to $wgActions.
+An unknown "action" has occurred (useful for defining your own actions).
+$action: action name
+$article: article "acted on"
+
+'UnwatchArticle': Before a watch is removed from an article.
+&$user: user watching
+&$page: WikiPage object to be removed
+&$status: Status object to be returned if the hook returns false
+
+'UnwatchArticleComplete': After a watch is removed from an article.
+$user: user that watched
+&$page: WikiPage object that was watched
+
+'UpdateUserMailerFormattedPageStatus': Before notification email gets sent.
+&$formattedPageStatus: list of valid page states
+
+'UploadComplete': Upon completion of a file upload.
+&$uploadBase: UploadBase (or subclass) object. File can be accessed by
+ $uploadBase->getLocalFile().
+
+'UploadCreateFromRequest': When UploadBase::createFromRequest has been called.
+$type: (string) the requested upload type
+&$className: the class name of the Upload instance to be created
+
+'UploadForm:BeforeProcessing': At the beginning of processUpload(). Lets you
+poke at member variables like $mUploadDescription before the file is saved. Do
+not use this hook to break upload processing. This will return the user to a
+blank form with no error message; use UploadVerification and UploadVerifyFile
+instead.
+&$form: UploadForm object
+
+'UploadForm:getInitialPageText': After the initial page text for file uploads
+is generated, to allow it to be altered.
+&$pageText: the page text
+$msg: array of header messages
+$config: Config object
+
+'UploadForm:initial': Before the upload form is generated. You might set the
+member-variables $uploadFormTextTop and $uploadFormTextAfterSummary to inject
+text (HTML) either before or after the editform.
+&$form: UploadForm object
+
+'UploadFormInitDescriptor': After the descriptor for the upload form as been
+assembled.
+&$descriptor: (array) the HTMLForm descriptor
+
+'UploadFormSourceDescriptors': after the standard source inputs have been
+added to the descriptor
+&$descriptor: (array) the HTMLForm descriptor
+&$radio: Boolean, if source type should be shown as radio button
+$selectedSourceType: The selected source type
+
+'UploadStashFile': Before a file is stashed (uploaded to stash).
+Note that code which has not been updated for MediaWiki 1.28 may not call this
+hook. If your extension absolutely, positively must prevent some files from
+being uploaded, use UploadVerifyFile or UploadVerifyUpload.
+$upload: (object) An instance of UploadBase, with all info about the upload
+$user: (object) An instance of User, the user uploading this file
+$props: (array) File properties, as returned by FSFile::getPropsFromPath()
+&$error: output: If the file stashing should be prevented, set this to the reason
+ in the form of array( messagename, param1, param2, ... ) or a MessageSpecifier
+ instance (you might want to use ApiMessage to provide machine-readable details
+ for the API).
+
+'UploadVerification': DEPRECATED! Use UploadVerifyFile instead.
+Additional chances to reject an uploaded file.
+$saveName: (string) destination file name
+$tempName: (string) filesystem path to the temporary file for checks
+&$error: (string) output: message key for message to show if upload canceled by
+ returning false. May also be an array, where the first element is the message
+ key and the remaining elements are used as parameters to the message.
+
+'UploadVerifyFile': extra file verification, based on MIME type, etc. Preferred
+in most cases over UploadVerification.
+$upload: (object) an instance of UploadBase, with all info about the upload
+$mime: (string) The uploaded file's MIME type, as detected by MediaWiki.
+ Handlers will typically only apply for specific MIME types.
+&$error: (object) output: true if the file is valid. Otherwise, set this to the reason
+ in the form of array( messagename, param1, param2, ... ) or a MessageSpecifier
+ instance (you might want to use ApiMessage to provide machine-readable details
+ for the API).
+
+'UploadVerifyUpload': Upload verification, based on both file properties like
+MIME type (same as UploadVerifyFile) and the information entered by the user
+(upload comment, file page contents etc.).
+$upload: (object) An instance of UploadBase, with all info about the upload
+$user: (object) An instance of User, the user uploading this file
+$props: (array) File properties, as returned by FSFile::getPropsFromPath()
+$comment: (string) Upload log comment (also used as edit summary)
+$pageText: (string) File description page text (only used for new uploads)
+&$error: output: If the file upload should be prevented, set this to the reason
+ in the form of array( messagename, param1, param2, ... ) or a MessageSpecifier
+ instance (you might want to use ApiMessage to provide machine-readable details
+ for the API).
+
+'UserIsBot': when determining whether a user is a bot account
+$user: the user
+&$isBot: whether this is user a bot or not (boolean)
+
+'User::mailPasswordInternal': before creation and mailing of a user's new
+temporary password
+&$user: the user who sent the message out
+&$ip: IP of the user who sent the message out
+&$u: the account whose new password will be set
+
+'UserAddGroup': Called when adding a group or changing a group's expiry; return
+false to override stock group addition.
+$user: the user object that is to have a group added
+&$group: the group to add; can be modified
+&$expiry: the expiry time in TS_MW format, or null if the group is not to
+expire; can be modified
+
+'UserArrayFromResult': Called when creating an UserArray object from a database
+result.
+&$userArray: set this to an object to override the default object returned
+$res: database result used to create the object
+
+'userCan': To interrupt/advise the "user can do X to Y article" check. If you
+want to display an error message, try getUserPermissionsErrors.
+&$title: Title object being checked against
+&$user: Current user object
+$action: Action being checked
+&$result: Pointer to result returned if hook returns false. If null is returned,
+ userCan checks are continued by internal code.
+
+'UserCanSendEmail': To override User::canSendEmail() permission check.
+&$user: User (object) whose permission is being checked
+&$canSend: bool set on input, can override on output
+
+'UserClearNewTalkNotification': Called when clearing the "You have new
+messages!" message, return false to not delete it.
+&$user: User (object) that will clear the message
+$oldid: ID of the talk page revision being viewed (0 means the most recent one)
+
+'UserCreateForm': DEPRECATED! Create an AuthenticationProvider instead.
+Manipulate the login form.
+&$template: SimpleTemplate instance for the form
+
+'UserEffectiveGroups': Called in User::getEffectiveGroups().
+&$user: User to get groups for
+&$groups: Current effective groups
+
+'UserGetAllRights': After calculating a list of all available rights.
+&$rights: Array of rights, which may be added to.
+
+'UserGetDefaultOptions': After fetching the core default, this hook is run right
+before returning the options to the caller. Warning: This hook is called for
+every call to User::getDefaultOptions(), which means it's potentially called
+dozens or hundreds of times. You may want to cache the results of non-trivial
+operations in your hook function for this reason.
+&$defaultOptions: Array of preference keys and their default values.
+
+'UserGetEmail': Called when getting an user email address.
+$user: User object
+&$email: email, change this to override local email
+
+'UserGetEmailAuthenticationTimestamp': Called when getting the timestamp of
+email authentication.
+$user: User object
+&$timestamp: timestamp, change this to override local email authentication
+ timestamp
+
+'UserGetImplicitGroups': DEPRECATED!
+Called in User::getImplicitGroups().
+&$groups: List of implicit (automatically-assigned) groups
+
+'UserGetLanguageObject': Called when getting user's interface language object.
+$user: User object
+&$code: Language code that will be used to create the object
+$context: IContextSource object
+
+'UserGetReservedNames': Allows to modify $wgReservedUsernames at run time.
+&$reservedUsernames: $wgReservedUsernames
+
+'UserGetRights': Called in User::getRights().
+$user: User to get rights for
+&$rights: Current rights
+
+'UserGroupsChanged': Called after user groups are changed.
+$user: User whose groups changed
+$added: Groups added
+$removed: Groups removed
+$performer: User who performed the change, false if via autopromotion
+$reason: The reason, if any, given by the user performing the change,
+false if via autopromotion.
+$oldUGMs: An associative array (group name => UserGroupMembership object) of
+the user's group memberships before the change.
+$newUGMs: An associative array (group name => UserGroupMembership object) of
+the user's current group memberships.
+
+'UserIsBlockedFrom': Check if a user is blocked from a specific page (for
+specific block exemptions).
+$user: User in question
+$title: Title of the page in question
+&$blocked: Out-param, whether or not the user is blocked from that page.
+&$allowUsertalk: If the user is blocked, whether or not the block allows users
+ to edit their own user talk pages.
+
+'UserIsBlockedGlobally': Check if user is blocked on all wikis.
+&$user: User object
+$ip: User's IP address
+&$blocked: Whether the user is blocked, to be modified by the hook
+&$block: The Block object, to be modified by the hook
+
+'UserIsEveryoneAllowed': Check if all users are allowed some user right; return
+false if a UserGetRights hook might remove the named right.
+$right: The user right being checked
+
+'UserIsHidden': Check if the user's name should be hidden. See User::isHidden().
+$user: User in question.
+&$hidden: Set true if the user's name should be hidden.
+
+'UserIsLocked': Check if the user is locked. See User::isLocked().
+$user: User in question.
+&$locked: Set true if the user should be locked.
+
+'UserLoadAfterLoadFromSession': Called to authenticate users on external or
+environmental means; occurs after session is loaded.
+$user: user object being loaded
+
+'UserLoadDefaults': Called when loading a default user.
+$user: user object
+$name: user name
+
+'UserLoadFromDatabase': Called when loading a user from the database.
+$user: user object
+&$s: database query object
+
+'UserLoadFromSession': DEPRECATED! Create a MediaWiki\Session\SessionProvider instead.
+Called to authenticate users on external/environmental means; occurs before
+session is loaded.
+$user: user object being loaded
+&$result: set this to a boolean value to abort the normal authentication
+ process
+
+'UserLoadOptions': When user options/preferences are being loaded from the
+database.
+$user: User object
+&$options: Options, can be modified.
+
+'UserLoggedIn': Called after a user is logged in
+$user: User object for the logged-in user
+
+'UserLoginComplete': Show custom content after a user has logged in via the web interface.
+For functionality that needs to run after any login (API or web) use UserLoggedIn.
+&$user: the user object that was created on login
+&$inject_html: Any HTML to inject after the "logged in" message.
+$direct: (bool) The hook is called directly after a successful login. This will only happen once
+ per login. A UserLoginComplete call with direct=false can happen when the user visits the login
+ page while already logged in.
+
+'UserLoginForm': DEPRECATED! Create an AuthenticationProvider instead.
+Manipulate the login form.
+&$template: QuickTemplate instance for the form
+
+'UserLogout': Before a user logs out.
+&$user: the user object that is about to be logged out
+
+'UserLogoutComplete': After a user has logged out.
+&$user: the user object _after_ logout (won't have name, ID, etc.)
+&$inject_html: Any HTML to inject after the "logged out" message.
+$oldName: name of the user before logout (string)
+
+'UserMailerChangeReturnPath': Called to generate a VERP return address
+when UserMailer sends an email, with a bounce handling extension.
+$to: Array of MailAddress objects for the recipients
+&$returnPath: The return address string
+
+'UserMailerSplitTo': Called in UserMailer::send() to give extensions a chance
+to split up an email with multiple the To: field into separate emails.
+&$to: array of MailAddress objects; unset the ones which should be mailed separately
+
+'UserMailerTransformContent': Called in UserMailer::send() to change email contents.
+Extensions can block sending the email by returning false and setting $error.
+$to: array of MailAdresses of the targets
+$from: MailAddress of the sender
+&$body: email body, either a string (for plaintext emails) or an array with 'text' and 'html' keys
+&$error: should be set to an error message string
+
+'UserMailerTransformMessage': Called in UserMailer::send() to change email after it has gone through
+the MIME transform. Extensions can block sending the email by returning false and setting $error.
+$to: array of MailAdresses of the targets
+$from: MailAddress of the sender
+&$subject: email subject (not MIME encoded)
+&$headers: email headers (except To: and Subject:) as an array of header name => value pairs
+&$body: email body (in MIME format) as a string
+&$error: should be set to an error message string
+
+'UserRemoveGroup': Called when removing a group; return false to override stock
+group removal.
+$user: the user object that is to have a group removed
+&$group: the group to be removed, can be modified
+
+'UserRequiresHTTPS': Called to determine whether a user needs
+to be switched to HTTPS.
+$user: User in question.
+&$https: Boolean whether $user should be switched to HTTPS.
+
+'UserResetAllOptions': Called in User::resetOptions() when user preferences
+have been requested to be reset. This hook can be used to exclude certain
+options from being reset even when the user has requested all prefs to be reset,
+because certain options might be stored in the user_properties database table
+despite not being visible and editable via Special:Preferences.
+$user: the User (object) whose preferences are being reset
+&$newOptions: array of new (site default) preferences
+$options: array of the user's old preferences
+$resetKinds: array containing the kinds of preferences to reset
+
+'UserRetrieveNewTalks': Called when retrieving "You have new messages!"
+message(s).
+&$user: user retrieving new talks messages
+&$talks: array of new talks page(s)
+
+'UserRights': DEPRECATED! Use UserGroupsChanged instead.
+After a user's group memberships are changed.
+&$user: User object that was changed
+$add: Array of strings corresponding to groups added
+$remove: Array of strings corresponding to groups removed
+
+'UserSaveOptions': Called just before saving user preferences. Hook handlers can either add or
+manipulate options, or reset one back to it's default to block changing it. Hook handlers are also
+allowed to abort the process by returning false, e.g. to save to a global profile instead. Compare
+to the UserSaveSettings hook, which is called after the preferences have been saved.
+$user: The User for which the options are going to be saved
+&$options: The users options as an associative array, modifiable
+
+'UserSaveSettings': Called directly after user preferences (user_properties in the database) have
+been saved. Compare to the UserSaveOptions hook, which is called before.
+$user: The User for which the options have been saved
+
+'UserSetCookies': DEPRECATED! If you're trying to replace core session cookie
+handling, you want to create a subclass of MediaWiki\Session\CookieSessionProvider
+instead. Otherwise, you can no longer count on user data being saved to cookies
+versus some other mechanism.
+Called when setting user cookies.
+$user: User object
+&$session: session array, will be added to the session
+&$cookies: cookies array mapping cookie name to its value
+
+'UserSetEmail': Called when changing user email address.
+$user: User object
+&$email: new email, change this to override new email address
+
+'UserSetEmailAuthenticationTimestamp': Called when setting the timestamp of
+email authentication.
+$user: User object
+&$timestamp: new timestamp, change this to override local email
+authentication timestamp
+
+'UserToolLinksEdit': Called when generating a list of user tool links, e.g.
+"Foobar (Talk | Contribs | Block)".
+$userId: User id of the current user
+$userText: User name of the current user
+&$items: Array of user tool links as HTML fragments
+
+'UsersPagerDoBatchLookups': Called in UsersPager::doBatchLookups() to give
+extensions providing user group data from an alternate source a chance to add
+their data into the cache array so that things like global user groups are
+displayed correctly in Special:ListUsers.
+$dbr: Read-only database handle
+$userIds: Array of user IDs whose groups we should look up
+&$cache: Array of user ID -> (array of internal group name (e.g. 'sysop') ->
+UserGroupMembership object)
+&$groups: Array of group name -> bool true mappings for members of a given user
+group
+
+'ValidateExtendedMetadataCache': Called to validate the cached metadata in
+FormatMetadata::getExtendedMeta (return false means cache will be
+invalidated and GetExtendedMetadata hook called again).
+$timestamp: The timestamp metadata was generated
+$file: The file the metadata is for
+
+'WantedPages::getQueryInfo': Called in WantedPagesPage::getQueryInfo(), can be
+used to alter the SQL query which gets the list of wanted pages.
+&$wantedPages: WantedPagesPage object
+&$query: query array, see QueryPage::getQueryInfo() for format documentation
+
+'WatchArticle': Before a watch is added to an article.
+&$user: user that will watch
+&$page: WikiPage object to be watched
+&$status: Status object to be returned if the hook returns false
+
+'WatchArticleComplete': After a watch is added to an article.
+&$user: user that watched
+&$page: WikiPage object watched
+
+'WatchedItemQueryServiceExtensions': Create a WatchedItemQueryServiceExtension.
+&$extensions: Add WatchedItemQueryServiceExtension objects to this array
+$watchedItemQueryService: Service object
+
+'WatchlistEditorBeforeFormRender': Before building the Special:EditWatchlist
+form, used to manipulate the list of pages or preload data based on that list.
+&$watchlistInfo: array of watchlisted pages in
+ [namespaceId => ['title1' => 1, 'title2' => 1]] format
+
+'WatchlistEditorBuildRemoveLine': when building remove lines in
+Special:Watchlist/edit.
+&$tools: array of extra links
+$title: Title object
+$redirect: whether the page is a redirect
+$skin: Skin object
+&$link: HTML link to title
+
+'WebRequestPathInfoRouter': While building the PathRouter to parse the
+REQUEST_URI.
+$router: The PathRouter instance
+
+'WebResponseSetCookie': when setting a cookie in WebResponse::setcookie().
+Return false to prevent setting of the cookie.
+&$name: Cookie name passed to WebResponse::setcookie()
+&$value: Cookie value passed to WebResponse::setcookie()
+&$expire: Cookie expiration, as for PHP's setcookie()
+&$options: Options passed to WebResponse::setcookie()
+
+'wfShellWikiCmd': Called when generating a shell-escaped command line string to
+run a MediaWiki cli script.
+&$script: MediaWiki cli script path
+&$parameters: Array of arguments and options to the script
+&$options: Associative array of options, may contain the 'php' and 'wrapper'
+ keys
+
+'wgQueryPages': Called when initialising list of QueryPage subclasses, use this
+to add new query pages to be updated with maintenance/updateSpecialPages.php.
+&$qp: The list of QueryPages
+
+'WhatLinksHereProps': Allows annotations to be added to WhatLinksHere
+$row: The DB row of the entry.
+$title: The Title of the page where the link comes FROM
+$target: The Title of the page where the link goes TO
+&$props: Array of HTML strings to display after the title.
+
+'WikiExporter::dumpStableQuery': Get the SELECT query for "stable" revisions
+dumps. One, and only one hook should set this, and return false.
+&$tables: Database tables to use in the SELECT query
+&$opts: Options to use for the query
+&$join: Join conditions
+
+'WikiPageDeletionUpdates': manipulate the list of DeferrableUpdates to be applied when
+a page is deleted. Called in WikiPage::getDeletionUpdates(). Note that updates
+specific to a content model should be provided by the respective Content's
+getDeletionUpdates() method.
+$page: the WikiPage
+$content: the Content to generate updates for, or null in case the page revision could not be
+ loaded. The delete will succeed despite this.
+&$updates: the array of objects that implement DeferrableUpdate. Hook function may want to add to
+ it.
+
+'WikiPageFactory': Override WikiPage class used for a title
+$title: Title of the page
+&$page: Variable to set the created WikiPage to.
+
+'XmlDumpWriterOpenPage': Called at the end of XmlDumpWriter::openPage, to allow
+extra metadata to be added.
+$obj: The XmlDumpWriter object.
+&$out: The output string.
+$row: The database row for the page.
+$title: The title of the page.
+
+'XmlDumpWriterWriteRevision': Called at the end of a revision in an XML dump, to
+add extra metadata.
+&$obj: The XmlDumpWriter object.
+&$out: The text being output.
+$row: The database row for the revision.
+$text: The revision text.
+
+More hooks might be available but undocumented, you can execute
+"php maintenance/findHooks.php" to find hidden ones.