Merge "Using ULS in Special:PageLanguage"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 16 Sep 2014 13:16:19 +0000 (13:16 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 16 Sep 2014 13:16:19 +0000 (13:16 +0000)
1  2 
docs/hooks.txt
includes/specials/SpecialPageLanguage.php

diff --combined docs/hooks.txt
@@@ -333,6 -333,11 +333,6 @@@ $ig: Gallery, an object of one of the g
  ImageGalleryBase)
  $html: HTML generated by the gallery
  
 -'AjaxAddScript': Called in output page just before the initialisation
 -of the javascript ajax engine. The hook is only called when ajax
 -is enabled ( $wgUseAjax = true; ).
 -&$output: OutputPage object
 -
  '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
@@@ -393,6 -398,16 +393,6 @@@ descriptions
  &$module: ApiBase Module object
  &$desc: Array of parameter descriptions
  
 -'APIGetResultProperties': Use this hook to modify the properties in a module's
 -result.
 -&$module: ApiBase Module object
 -&$properties: Array of properties
 -
 -'APIGetPossibleErrors': Use this hook to modify the module's list of possible
 -errors.
 -$module: ApiBase Module object
 -&$possibleErrors: Array of possible errors
 -
  'APIQueryAfterExecute': After calling the execute() method of an
  action=query submodule. Use this to extend core API modules.
  &$module: Module object
@@@ -402,39 -417,36 +402,39 @@@ an action=query submodule. Use this to 
  &$module: Module object
  &$resultPageSet: ApiPageSet object
  
 -'APIQueryInfoTokens': 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).
 +'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)
  
 -'APIQueryRevisionsTokens': 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
 +'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)
  
 -'APIQueryRecentChangesTokens': 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).
 +'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)
  
  'APIQuerySiteInfoGeneralInfo': Use this hook to add extra information to the
@@@ -446,19 -458,13 +446,19 @@@ $module: the current ApiQuerySiteInfo m
  sites statistics information.
  &$results: array of results, add things here
  
 -'APIQueryUsersTokens': 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).
 +'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() )
 +
 +'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)
  
  'ApiMain::onException': Called by ApiMain::executeActionWithErrorHandling() when
@@@ -472,8 -478,8 +472,8 @@@ key for the array that represents the s
  key-value-pair identified by the apiLink key is required.
  &$apis: array of services
  
 -'ApiTokensGetTokenTypes': Use this hook to extend action=tokens with new token
 -types.
 +'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.
  
@@@ -863,14 -869,6 +863,14 @@@ $name: name of the special page, e.g. '
  &$join_conds: join conditions for the tables
  $opts: FormOptions for this request
  
 +'LoginUserMigrated': 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.
 +
  '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
@@@ -1550,6 -1548,10 +1550,10 @@@ $title: The page's Title
    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': 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
@@@ -1643,13 -1645,6 +1647,13 @@@ $code: language cod
  &$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
@@@ -1766,30 -1761,6 +1770,30 @@@ caches
  $title: name of the page changed.
  $text: new contents of the page.
  
 +'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.
 +
 +'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).
 +
 +'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).
 +
  'ModifyExportQuery': Modify the query used by the exporter.
  $db: The database object to be queried.
  &$tables: Tables in the query.
  &$opts: Options for the query.
  &$join_conds: Join conditions for the query.
  
 -'MonoBookTemplateToolboxEnd': DEPRECATED. Called by Monobook skin after toolbox
 -links have been rendered (useful for adding more). Note: this is only run for
 -the Monobook skin. To add items to the toolbox you should use the
 -SkinTemplateToolboxEnd hook instead, which works for all "SkinTemplate"-type
 -skins.
 -$tools: array of tools
 -
  '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
@@@ -2155,11 -2133,17 +2159,11 @@@ $oldSessionID: old session i
  $newSessionID: new session id
  
  'ResourceLoaderGetConfigVars': Called at the end of
 -ResourceLoaderStartUpModule::getConfig(). Use this to export static
 +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 )
  
 -'ResourceLoaderGetStartupModules': DEPRECATED. Run once the startup module is being
 -generated. This allows you to add modules to the startup module. This hook
 -should be used sparingly since any module added here will be loaded on all
 -pages. This hook is useful if you want to make code available to module loader
 -scripts.
 -
  'ResourceLoaderRegisterModules': Right before modules information is required,
  such as when responding to a resource
  loader request or generating HTML output.
@@@ -2307,11 -2291,6 +2311,11 @@@ $type: 'normal' or 'history' for old/di
  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().
  &$subpages: Subpage links HTML
  $skin: Skin object
@@@ -2330,9 -2309,8 +2334,9 @@@ $nav_urls: array of tab
  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
 +$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.
  
  To alter the structured navigation links in SkinTemplates, there are three
  hooks called in different spots:
@@@ -2377,6 -2355,11 +2381,6 @@@ $dummy: Called when SkinTemplateToolbox
    dummy parameter with "$dummy=false" in their code and return without echoing
    any HTML to avoid creating duplicate toolbox items.
  
 -'SkinVectorStyleModules': Called when defining the list of module styles to be
 -loaded by the Vector skin.
 -$skin: SkinVector object
 -&$styles: Array of module names whose style will be loaded for the skin
 -
  'SoftwareInfo': Called by Special:Version for returning information about the
  software.
  $software: The array of software in format 'name' => 'version'. See
@@@ -2391,7 -2374,7 +2395,7 @@@ $sp: SpecialPage object, for contex
  &$fields: Current HTMLForm fields
  
  'SpecialContributionsBeforeMainOutput': Before the form on Special:Contributions
 -$id: User id number, only provided for backwards-compatability
 +$id: User id number, only provided for backwards-compatibility
  $user: User object representing user contributions are being fetched for
  $sp: SpecialPage instance, providing context
  
@@@ -2534,11 -2517,16 +2538,11 @@@ $specialSearch: SpecialSearch object ($
  $output: $wgOut
  $term: Search term specified by the user
  
 -'SpecialSearchResults': Called before search result display when there are
 -matches.
 +'SpecialSearchResults': Called before search result display
  $term: string of search term
  &$titleMatches: empty or SearchResultSet object
  &$textMatches: empty or SearchResultSet object
  
 -'SpecialSearchNoResults': Called before search result display when there are no
 -matches.
 -$term: string of search term
 -
  'SpecialStatsAddExtra': Add extra statistic at the end of Special:Statistics.
  &$extraStats: Array to save the new stats
    ( $extraStats['<name of statistic>'] => <value>; )
@@@ -2737,11 -2725,11 +2741,11 @@@ string &$error: output: message key fo
    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
 +'UploadVerifyFile': extra file verification, based on MIME type, etc. Preferred
  in most cases over UploadVerification.
  object $upload: an instance of UploadBase, with all info about the upload
 -string $mime: The uploaded file's mime type, as detected by MediaWiki. Handlers
 -  will typically only apply for specific mime types.
 +string $mime: The uploaded file's MIME type, as detected by MediaWiki. Handlers
 +  will typically only apply for specific MIME types.
  object &$error: output: true if the file is valid. Otherwise, an indexed array
    representing the problem with the file, where the first element is the message
    key and the remaining elements are used as parameters to the message.
@@@ -2783,9 -2771,26 +2787,9 @@@ 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)
  
 -'UserComparePasswords': Called when checking passwords, return false to
 -override the default password checks.
 -&$hash: String of the password hash (from the database)
 -&$password: String of the plaintext password the user entered
 -&$userId: Integer of the user's ID or Boolean false if the user ID was not
 -  supplied
 -&$result: If the hook returns false, this Boolean value will be checked to
 -  determine if the password was valid
 -
  'UserCreateForm': change to manipulate the login form
  $template: SimpleTemplate instance for the form
  
 -'UserCryptPassword': Called when hashing a password, return false to implement
 -your own hashing method.
 -&$password: String of the plaintext password to encrypt
 -&$salt: String of the password salt or Boolean false if no salt is provided
 -&$wgPasswordSalt: Boolean of whether the salt is used in the default hashing
 -  method
 -&$hash: If the hook returns false, this String will be used as the hash
 -
  'UserEffectiveGroups': Called in User::getEffectiveGroups().
  $user: User to get groups for
  &$groups: Current effective groups
@@@ -2895,15 -2900,6 +2899,15 @@@ 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).
@@@ -2944,11 -2940,6 +2948,11 @@@ invalidated and GetExtendedMetadata hoo
  $timestamp: The timestamp metadata was generated
  $file: The file the metadata is for
  
 +'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
 +
  'WantedPages::getQueryInfo': Called in WantedPagesPage::getQueryInfo(), can be
  used to alter the SQL query which gets the list of wanted pages.
  &$wantedPages: WantedPagesPage object
@@@ -2963,18 -2954,12 +2967,18 @@@ $page: WikiPage object to be watche
  $user: user that watched
  $page: WikiPage object watched
  
 +'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.
@@@ -30,7 -30,7 +30,7 @@@
   */
  class SpecialPageLanguage extends FormSpecialPage {
        /**
 -       * @var $goToUrl URL to go to if language change successful
 +       * @var string URL to go to if language change successful
         */
        private $goToUrl;
  
@@@ -43,6 -43,7 +43,6 @@@
        }
  
        protected function getFormFields() {
 -              global $wgLanguageCode;
                // Get default from the subpage of Special page
                $defaultName = $this->par;
  
  
                $page['language'] = array(
                        'id' => 'mw-pl-languageselector',
+                       'cssclass' => 'mw-languageselector',
                        'type' => 'select',
                        'options' => $options,
                        'label-message' => 'pagelang-language',
 -                      'default' => $wgLanguageCode
 +                      'default' => $this->getConfig()->get( 'LanguageCode' ),
                );
  
                return $page;
        }
  
 +      protected function postText() {
 +              return $this->showLogFragment( $this->par );
 +      }
 +
        public function alterForm( HTMLForm $form ) {
                $form->setDisplayFormat( 'vform' );
                $form->setWrapperLegend( false );
+               wfRunHooks( 'LanguageSelector', array( $this->getOutput(), 'mw-languageselector' ) );
        }
  
        /**
         *
         * @param array $data
 +       * @return bool
         */
        public function onSubmit( array $data ) {
                $title = Title::newFromText( $data['pagename'] );
                // Returns the default since the page is not loaded from DB
                $defLang = $title->getPageLanguage()->getCode();
  
 -              $pageId =  $title->getArticleID();
 +              $pageId = $title->getArticleID();
  
                // Check if article exists
                if ( !$pageId ) {
                // Success causes a redirect
                $this->getOutput()->redirect( $this->goToUrl );
        }
 +
 +      function showLogFragment( $title ) {
 +              $moveLogPage = new LogPage( 'pagelang' );
 +              $out1 = Xml::element( 'h2', null, $moveLogPage->getName()->text() );
 +              $out2 = '';
 +              LogEventsList::showLogExtract( $out2, 'pagelang', $title );
 +              return $out1 . $out2;
 +      }
  }