Merge "docs/hooks.txt: fix incorrect description of UploadForm:* hooks"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 18 Jun 2018 18:07:33 +0000 (18:07 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 18 Jun 2018 18:07:33 +0000 (18:07 +0000)
1  2 
docs/hooks.txt

diff --combined docs/hooks.txt
@@@ -74,10 -74,10 +74,10 @@@ Using a hook-running strategy, we can a
  stuff in our mainline code. Using hooks, the function becomes:
  
        function showAnArticle( $article ) {
 -              if ( Hooks::run( 'ArticleShow', array( &$article ) ) ) {
 +              if ( Hooks::run( 'ArticleShow', [ &$article ] ) ) {
                        # code to actually show the article goes here
  
 -                      Hooks::run( 'ArticleShowComplete', array( &$article ) );
 +                      Hooks::run( 'ArticleShowComplete', [ &$article ] );
                }
        }
  
@@@ -137,13 -137,13 +137,13 @@@ Hooks are registered by adding them to 
  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'][] = [ 'someFunction', $someData ];
 +      $wgHooks['EventName'][] = [ '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
 +      $wgHooks['EventName'][] = [ $object, 'someMethod' ];
 +      $wgHooks['EventName'][] = [ $object, 'someMethod', $someData ];
 +      $wgHooks['EventName'][] = [ $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
@@@ -168,8 -168,8 +168,8 @@@ different: 'onArticleSave', 'onUserLogi
  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' );
 +      $wgHooks['PageContentSaveComplete'][] = [ 'ircNotify', 'TimStarling' ];
 +      $wgHooks['PageContentSaveComplete'][] = [ 'ircNotify', 'brion' ];
  
  This code would result in ircNotify being run twice when an article is saved:
  once for 'TimStarling', and once for 'brion'.
@@@ -187,7 -187,7 +187,7 @@@ The last result would be for cases wher
  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 );
 +      $wgHooks['UserLogin'][] = [ 'ldapLogin', $ldapServer ];
  
        function ldapLogin( $username, $password ) {
                # log user into LDAP
@@@ -232,7 -232,7 +232,7 @@@ wfRunHooks must be used, which was depr
  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
 +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
 +'AbortAutoAccount': DEPRECATED since 1.27! 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)
@@@ -259,7 -259,7 +259,7 @@@ $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.
 +'AbortLogin': DEPRECATED since 1.27! 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
  &$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.
 +'AbortNewAccount': DEPRECATED since 1.27! 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
@@@ -294,14 -294,14 +294,14 @@@ $name: name of the actio
  &$fields: HTMLForm descriptor array
  $article: Article object
  
 -'AddNewAccount': DEPRECATED! Use LocalUserCreated.
 +'AddNewAccount': DEPRECATED since 1.27! 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.
 +'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
@@@ -372,7 -372,7 +372,7 @@@ from ApiBase::addDeprecation()
  &$msgs: Message[] Messages to include in the help. Multiple messages will be
    joined with spaces.
  
 -'APIEditBeforeSave': DEPRECATED! Use EditFilterMergedContent instead.
 +'APIEditBeforeSave': DEPRECATED since 1.28! 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.
@@@ -409,8 -409,8 +409,8 @@@ $format: API format code for $text
  &$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.
 +'APIGetDescription': DEPRECATED since 1.25! Use APIGetDescriptionMessages
 +instead. Use this hook to modify a module's description.
  &$module: ApiBase Module object
  &$desc: String description, or array of description strings
  
  $module: ApiBase Module object
  &$msg: Array of Message objects
  
 -'APIGetParamDescription': DEPRECATED! Use APIGetParamDescriptionMessages
 -instead.
 +'APIGetParamDescription': DEPRECATED since 1.25! Use
 +APIGetParamDescriptionMessages instead.
  Use this hook to modify a module's parameter descriptions.
  &$module: ApiBase Module object
  &$desc: Array of parameter descriptions
@@@ -488,8 -488,8 +488,8 @@@ 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.
 +  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
@@@ -504,7 -504,7 +504,7 @@@ $module: ApiQueryBase module in questio
  &$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' 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
@@@ -514,26 -514,26 +514,26 @@@ $module: ApiQueryBase module in questio
  $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.
 +  '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
 +'APIQueryInfoTokens': DEPRECATED since 1.24! 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)
 +&$tokenFunctions: [ action => callback ]
  
 -'APIQueryRecentChangesTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes
 -instead.
 +'APIQueryRecentChangesTokens': DEPRECATED since 1.24! 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
@@@ -543,10 -543,9 +543,10 @@@ page associated to the revision the tok
  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)
 +&$tokenFunctions: [ action => callback ]
  
 -'APIQueryRevisionsTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
 +'APIQueryRevisionsTokens': DEPRECATED since 1.24! 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
@@@ -556,7 -555,7 +556,7 @@@ page associated to the revision the tok
  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)
 +&$tokenFunctions: [ action => callback ]
  
  'APIQuerySiteInfoGeneralInfo': Use this hook to add extra information to the
  sites general information.
@@@ -570,11 -569,10 +570,11 @@@ sites statistics information
  '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() )
 +&$salts: [ type => salt to pass to User::getEditToken(), or array of salt
 +  and key to pass to Session::getToken() ]
  
 -'APIQueryUsersTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
 +'APIQueryUsersTokens': DEPRECATED since 1.24! 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
@@@ -582,7 -580,7 +582,7 @@@ false if the user isn't allowed to obta
  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)
 +&$tokenFunctions: [ action => callback ]
  
  'ApiQueryWatchlistExtractOutputData': Extract row data for ApiQueryWatchlist.
  $module: ApiQueryWatchlist instance
@@@ -602,7 -600,7 +602,7 @@@ key for the array that represents the s
  key-value-pair identified by the apiLink key is required.
  &$apis: array of services
  
 -'ApiTokensGetTokenTypes': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
 +'ApiTokensGetTokenTypes': DEPRECATED since 1.24! 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.
@@@ -780,8 -778,7 +780,8 @@@ redirect was followed
  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).
 +$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.
 +$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.
 +'AuthPluginAutoCreate': DEPRECATED since 1.27! 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.
 +'AuthPluginSetup': DEPRECATED since 1.27! 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.
@@@ -976,9 -972,9 +976,9 @@@ No return data is accepted; this hook i
  $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.
 +'ChangePasswordForm': DEPRECATED since 1.27! 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.
  
@@@ -995,8 -991,8 +995,8 @@@ $rows: The data that will be rendered. 
  $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.
 +'ChangesListSpecialPageFilters': DEPRECATED since 1.29! Use
 +'ChangesListSpecialPageStructuredFilters' instead.
  Called after building form options on pages
  inheriting from ChangesListSpecialPage (in core: RecentChanges,
  RecentChangesLinked and Watchlist).
@@@ -1079,9 -1075,8 +1079,9 @@@ $rc_id: recentchanges table i
  $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
 +$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
@@@ -1191,16 -1186,16 +1191,16 @@@ $lossy:   boolean indicating whether lo
    converted Content object. Note that $result->getContentModel() must return
    $toModel.
  
 -'ContentSecurityPolicyDefaultSource': Modify the allowed CSP load sources. This affects all
 -directives except for the script directive. If you want to add a script
 -source, see ContentSecurityPolicyScriptSource hook.
 +'ContentSecurityPolicyDefaultSource': Modify the allowed CSP load sources. This
 +affects all directives except for the script directive. If you want to add a
 +script source, see ContentSecurityPolicyScriptSource hook.
  &$defaultSrc: Array of Content-Security-Policy allowed sources
  $policyConfig: Current configuration for the Content-Security-Policy header
 -$mode: ContentSecurityPolicy::REPORT_ONLY_MODE or ContentSecurityPolicy::FULL_MODE
 -  depending on type of header
 +$mode: ContentSecurityPolicy::REPORT_ONLY_MODE or
 +  ContentSecurityPolicy::FULL_MODE depending on type of header
  
 -'ContentSecurityPolicyDirectives': Modify the content security policy directives.
 -Use this only if ContentSecurityPolicyDefaultSource and
 +'ContentSecurityPolicyDirectives': Modify the content security policy
 +directives. Use this only if ContentSecurityPolicyDefaultSource and
  ContentSecurityPolicyScriptSource do not meet your needs.
  &$directives: Array of CSP directives
  $policyConfig: Current configuration for the CSP header
@@@ -1213,8 -1208,8 +1213,8 @@@ want non-script sources to be loaded fr
  whatever you add.
  &$scriptSrc: Array of CSP directives
  $policyConfig: Current configuration for the CSP header
 -$mode: ContentSecurityPolicy::REPORT_ONLY_MODE or ContentSecurityPolicy::FULL_MODE
 -  depending on type of header
 +$mode: ContentSecurityPolicy::REPORT_ONLY_MODE or
 +  ContentSecurityPolicy::FULL_MODE depending on type of header
  
  'CustomEditor': When invoking the page editor
  Return true to allow the normal editor to be used, or false if implementing
@@@ -1245,15 -1240,12 +1245,15 @@@ $row: the DB row for this lin
    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.
 +'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()
@@@ -1268,88 -1260,82 +1268,88 @@@ checking if the variable's value is nul
  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".
 +'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.
 +'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.
 +'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
 +  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
 +  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)
 +  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
 +  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.
 +'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
 +  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)
 +  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
 +  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
 +'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.
 +'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.
 +'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.
 +'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
 +'DifferenceEngineShowDiffPage': Add additional output via the available
 +OutputPage object into the diff view
  $out: OutputPage object
  
  'DifferenceEngineShowDiffPageMaybeShowMissingRevision': called in
@@@ -1375,7 -1361,7 +1375,7 @@@ an articl
  &$article: article (object) being viewed
  &$oldid: oldid (int) being viewed
  
 -'DoEditSectionLink': DEPRECATED! Use SkinEditSectionLinks instead.
 +'DoEditSectionLink': DEPRECATED since 1.25! 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
@@@ -1395,6 -1381,7 +1395,6 @@@ $section: Section being edite
  &$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,
@@@ -1402,7 -1389,7 +1402,7 @@@ and to provide a reason for disallowin
  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.
 +  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.
@@@ -1430,9 -1417,9 +1430,9 @@@ $resultDetails: Result details arra
  
  'EditPage::importFormData': allow extensions to read additional data
  posted in the form
 +Return value is ignored (should always return true)
  $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)
@@@ -1474,11 -1461,18 +1474,11 @@@ textarea in the edit form
  &$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.
 +Hook subscribers can return false to avoid the default toolbar code being
 +loaded.
  &$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.
@@@ -1489,8 -1483,8 +1489,8 @@@ $title: title of page being edite
  '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.
 +&$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
@@@ -1526,8 -1520,7 +1526,8 @@@ true to allow those checks to occur, an
  &$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.
 +&$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
@@@ -1562,8 -1555,7 +1562,8 @@@ $block: The RecentChanges objects in th
  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
 +&$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
  '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
 +&$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
@@@ -1681,10 -1672,10 +1681,10 @@@ underscore) magic words. Called by Magi
  
  'GetExtendedMetadata': Get extended file metadata for the API
  &$combinedMeta: Array of the form:
 -      'MetadataPropName' => array(
 +      'MetadataPropName' => [
                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
@@@ -1782,7 -1773,7 +1782,7 @@@ $lang: Language that will be used to re
  '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
 +[ 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
@@@ -1796,12 -1787,12 +1796,12 @@@ $action: Action being checke
  '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.
 +populate $result with the reason in the form of [ 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
@@@ -1835,9 -1826,6 +1835,9 @@@ just modify a few things using call-by-
    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
 +$parser: Parser instance
 +&$query: Query params for desc URL
 +&$widthOption: Used by the parser to remember the user preference thumbnailsize
  
  'ImageOpenShowImageInlineBefore': Call potential extension just before showing
  the image on an image page.
@@@ -1898,9 -1886,9 +1898,9 @@@ $revisionInfo: Array of revision inform
  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.
 +'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.
@@@ -1984,7 -1972,7 +1984,7 @@@ $user: User the password is being valid
  $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
 +'LanguageGetMagic': DEPRECATED since 1.16! 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
@@@ -2019,11 -2007,11 +2019,11 @@@ $title: The page's Title
  $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.
 +'LinkBegin': DEPRECATED since 1.28! 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
  &$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
 +'LinkEnd': DEPRECATED since 1.28! 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
@@@ -2219,11 -2207,11 +2219,11 @@@ 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.
 +'LoginUserMigrated': DEPRECATED since 1.27! 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.
@@@ -2277,18 -2265,6 +2277,18 @@@ $wcOnlySysopsCanPatrol: config setting 
    sysop to patrol the edit.
  $auto: true if the edit is being marked as patrolled automatically
  
 +'ApiMaxLagInfo': When lag information is being requested via API. Use this to
 +override lag information. Generally a hook function should only replace
 +$lagInfo if the new $lagInfo['lag'] is greater than the current $lagInfo['lag'].
 +&$lagInfo: Maximum lag information array. Fields in the array are:
 +  'lag' is the number of seconds of lag.
 +  'host' is the host name on which the lag exists.
 +  'type' is an indication of the type of lag,
 +    e.g. "db" for database replication lag or "jobqueue" for job queue size
 +    converted to pseudo-seconds.
 +  It is possible to add more fields and they will be returned to the user in
 +  the API response.
 +
  '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.
@@@ -2383,8 -2359,8 +2383,8 @@@ $new: the ?new= param value from the ur
  '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)
 +$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
@@@ -2623,7 -2599,7 +2623,7 @@@ cache or return false to not use it
  &$parser: Parser object
  &$varCache: variable cache (array)
  
 -'ParserLimitReport': DEPRECATED! Use ParserLimitReportPrepare and
 +'ParserLimitReport': DEPRECATED since 1.22! Use ParserLimitReportPrepare and
  ParserLimitReportFormat instead.
  Called at the end of Parser:parse() when the parser will
  include comments about size of the text parsed.
@@@ -2660,8 -2636,7 +2660,8 @@@ change the default value for an option
  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.
 +&$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.
@@@ -2691,8 -2666,7 +2691,8 @@@ run. Use when page save hooks require t
  that tests continue to run properly.
  &$tables: array of table names
  
 -'ParserOutputStashForEdit': Called when an edit stash parse finishes, before the output is cached.
 +'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
@@@ -2754,8 -2728,7 +2754,8 @@@ $key: the section nam
  &$legend: the legend text. Defaults to wfMessage( "prefs-$key" )->text() but may
    be overridden
  
 -'PrefixSearchBackend': DEPRECATED! Override SearchEngine::completionSearchBackend instead.
 +'PrefixSearchBackend': DEPRECATED since 1.27! 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
@@@ -2851,7 -2824,7 +2851,7 @@@ $context: ResourceLoaderContext|nul
  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 )
 +&$vars: [ variable name => value ]
  
  'ResourceLoaderJqueryMsgModuleMagicWords': Called in
  ResourceLoaderJqueryMsgModule to allow adding magic words for jQueryMsg.
@@@ -2870,10 -2843,10 +2870,10 @@@ called after the addition of 'qunit' an
  &$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(
 +      $testModules['qunit']['myext.tests'] = [
                '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.
 +'RevisionInsertComplete': DEPRECATED since 1.31! Use RevisionRecordInserted hook
 +instead. Called after a revision is inserted into the database.
  $revision: the Revision
  $data: DEPRECATED! Always null!
  $flags: DEPRECATED! Always null!
@@@ -2930,12 -2903,10 +2930,12 @@@ $engine: SearchEngine for which the ind
  
  '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.
 +&$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
@@@ -3018,13 -2989,11 +3018,13 @@@ $terms: Search terms, for highlightin
  
  '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.
 +&$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.
 +&$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.
@@@ -3202,7 -3171,7 +3202,7 @@@ $pager: The UsersPager instanc
  
  'SpecialListusersFormatRow': Called right before the end of
  UsersPager::formatRow().
 -&$item: HTML to be returned. Will be wrapped in <li></li> after the hook finishes
 +&$item: HTML to be returned. Will be wrapped in an <li> after the hook finishes
  $row: Database row object
  
  'SpecialListusersHeader': Called after adding the submit button in
@@@ -3279,8 -3248,8 +3279,8 @@@ use this to change some selection crite
  &$title: If the hook returns false, a Title object to use instead of the
    result from the normal query
  
 -'SpecialRecentChangesFilters': DEPRECATED! Use ChangesListSpecialPageStructuredFilters
 -instead.
 +'SpecialRecentChangesFilters': DEPRECATED since 1.23! 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
@@@ -3292,8 -3261,8 +3292,8 @@@ SpecialRecentChanges
  &$extraOpts: array of added items, to which can be added
  $opts: FormOptions for this request
  
 -'SpecialRecentChangesQuery': DEPRECATED! Use ChangesListSpecialPageStructuredFilters
 -or ChangesListSpecialPageQuery instead.
 +'SpecialRecentChangesQuery': DEPRECATED since 1.23! Use
 +ChangesListSpecialPageStructuredFilters or ChangesListSpecialPageQuery instead.
  Called when building SQL query for SpecialRecentChanges and
  SpecialRecentChangesLinked.
  &$conds: array of WHERE conditionals for query
@@@ -3306,10 -3275,10 +3306,10 @@@ $opts: FormOptions for this reques
  '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.
@@@ -3322,8 -3291,7 +3322,8 @@@ $url does a standard redirect to $title
  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
 +&$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
@@@ -3381,14 -3349,11 +3381,14 @@@ $engine: the search engin
    message key to use in the name column,
  $context: IContextSource object
  
 -'SpecialTrackingCategories::preprocess': Called after LinkBatch on Special:TrackingCategories
 +'SpecialTrackingCategories::preprocess': Called after LinkBatch on
 +Special:TrackingCategories
  $specialPage: The SpecialTrackingCategories object
 -$trackingCategories: Array of data from Special:TrackingCategories with msg and cats
 +$trackingCategories: Array of data from Special:TrackingCategories with msg and
 +  cats
  
 -'SpecialTrackingCategories::generateCatLink': Called for each cat link on Special:TrackingCategories
 +'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
@@@ -3401,8 -3366,8 +3401,8 @@@ Special:Upload
  $wgVersion: Current $wgVersion for you to use
  &$versionUrl: Raw url to link to (eg: release notes)
  
 -'SpecialWatchlistFilters': DEPRECATED! Use ChangesListSpecialPageStructuredFilters
 -instead.
 +'SpecialWatchlistFilters': DEPRECATED since 1.23! 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
@@@ -3414,8 -3379,8 +3414,8 @@@ SpecialWatchlist. Allows extensions to 
  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.
 +'SpecialWatchlistQuery': DEPRECATED since 1.23! 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
@@@ -3478,8 -3443,7 +3478,8 @@@ $old: old titl
  $nt: new title
  $user: user who does the move
  
 -'TitleMoveStarting': Before moving an article (title), but just after the atomic DB section starts.
 +'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
@@@ -3552,8 -3516,8 +3552,8 @@@ $title: Title object of the page that w
  $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.
 +'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
  
@@@ -3565,7 -3529,7 +3565,7 @@@ Since 1.24: Paths pointing to a directo
  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,
 +'UnknownAction': DEPRECATED since 1.19! 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
@@@ -3592,11 -3556,11 +3592,11 @@@ $type: (string) the requested upload ty
  &$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
+ 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 UploadVerifyUpload or UploadVerifyFile instead.
+ &$upload: SpecialUpload object
  
  'UploadForm:getInitialPageText': After the initial page text for file uploads
  is generated, to allow it to be altered.
@@@ -3607,7 -3571,7 +3607,7 @@@ $config: Config objec
  '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
+ &$upload: SpecialUpload object
  
  'UploadFormInitDescriptor': After the descriptor for the upload form as been
  assembled.
@@@ -3626,12 -3590,12 +3626,12 @@@ being uploaded, use UploadVerifyFile o
  $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).
 +&$error: output: If the file stashing should be prevented, set this to the
 +  reason in the form of [ 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.
 +'UploadVerification': DEPRECATED since 1.28! 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
@@@ -3644,10 -3608,10 +3644,10 @@@ 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).
 +&$error: (object) output: true if the file is valid. Otherwise, set this to the
 +  reason in the form of [ 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
@@@ -3658,7 -3622,7 +3658,7 @@@ $props: (array) File properties, as ret
  $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
 +  in the form of [ messagename, param1, param2, ... ] or a MessageSpecifier
    instance (you might want to use ApiMessage to provide machine-readable details
    for the API).
  
@@@ -3701,8 -3665,8 +3701,8 @@@ messages!" message, return false to no
  &$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.
 +'UserCreateForm': DEPRECATED since 1.27! Create an AuthenticationProvider
 +instead. Manipulate the login form.
  &$template: SimpleTemplate instance for the form
  
  'UserEffectiveGroups': Called in User::getEffectiveGroups().
@@@ -3729,7 -3693,7 +3729,7 @@@ $user: User objec
  &$timestamp: timestamp, change this to override local email authentication
    timestamp
  
 -'UserGetImplicitGroups': DEPRECATED!
 +'UserGetImplicitGroups': DEPRECATED since 1.25!
  Called in User::getImplicitGroups().
  &$groups: List of implicit (automatically-assigned) groups
  
@@@ -3795,8 -3759,7 +3795,8 @@@ $name: user nam
  $user: user object
  &$s: database query object
  
 -'UserLoadFromSession': DEPRECATED! Create a MediaWiki\Session\SessionProvider instead.
 +'UserLoadFromSession': DEPRECATED since 1.27! Create a
 +MediaWiki\Session\SessionProvider instead.
  Called to authenticate users on external/environmental means; occurs before
  session is loaded.
  $user: user object being loaded
@@@ -3811,17 -3774,16 +3811,17 @@@ $user: User objec
  '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.
 +'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.
 +$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.
 +'UserLoginForm': DEPRECATED since 1.27! Create an AuthenticationProvider
 +instead. Manipulate the login form.
  &$template: QuickTemplate instance for the form
  
  'UserLogout': Before a user logs out.
@@@ -3839,26 -3801,21 +3839,26 @@@ $to: Array of MailAddress objects for t
  
  '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
 +&$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.
 +'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
 +&$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.
 +'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
 +&$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
  
@@@ -3887,29 -3844,27 +3887,29 @@@ message(s)
  &$user: user retrieving new talks messages
  &$talks: array of new talks page(s)
  
 -'UserRights': DEPRECATED! Use UserGroupsChanged instead.
 +'UserRights': DEPRECATED since 1.26! 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.
 +'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.
 +'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.
 +'UserSetCookies': DEPRECATED since 1.27! 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
@@@ -3938,7 -3893,7 +3938,7 @@@ displayed correctly in Special:ListUser
  $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)
 +  UserGroupMembership object)
  &$groups: Array of group name -> bool true mappings for members of a given user
  group
  
@@@ -4013,15 -3968,15 +4013,15 @@@ dumps. One, and only one hook should se
  &$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.
 +'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.
 +$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