Pass the user as an argument to 'isValidPassword' hook callbacks; see docs/hooks...
[lhc/web/wiklou.git] / includes / SpecialPage.php
index e8db18b..89fd15b 100644 (file)
@@ -17,8 +17,7 @@
  * SpecialPage::$mList. To remove a core static special page at runtime, use
  * a SpecialPage_initList hook.
  *
- * @package MediaWiki
- * @subpackage SpecialPage
+ * @addtogroup SpecialPage
  */
 
 /**
@@ -27,8 +26,8 @@
 
 /**
  * Parent special page class, also static functions for handling the special
- * page list
- * @package MediaWiki
+ * page list.
+ * @addtogroup SpecialPage
  */
 class SpecialPage
 {
@@ -95,31 +94,36 @@ class SpecialPage
                'Uncategorizedpages'        => array( 'SpecialPage', 'Uncategorizedpages' ),
                'Uncategorizedcategories'   => array( 'SpecialPage', 'Uncategorizedcategories' ),
                'Uncategorizedimages'       => array( 'SpecialPage', 'Uncategorizedimages' ),
+               'Uncategorizedtemplates'        => array( 'SpecialPage', 'Uncategorizedtemplates' ),
                'Unusedcategories'          => array( 'SpecialPage', 'Unusedcategories' ),
                'Unusedimages'              => array( 'SpecialPage', 'Unusedimages' ),
                'Wantedpages'               => array( 'IncludableSpecialPage', 'Wantedpages' ),
                'Wantedcategories'          => array( 'SpecialPage', 'Wantedcategories' ),
                'Mostlinked'                => array( 'SpecialPage', 'Mostlinked' ),
                'Mostlinkedcategories'      => array( 'SpecialPage', 'Mostlinkedcategories' ),
+               'Mostlinkedtemplates'           => array( 'SpecialPage', 'Mostlinkedtemplates' ),
                'Mostcategories'            => array( 'SpecialPage', 'Mostcategories' ),
                'Mostimages'                => array( 'SpecialPage', 'Mostimages' ),
                'Mostrevisions'             => array( 'SpecialPage', 'Mostrevisions' ),
+               'Fewestrevisions'             => array( 'SpecialPage', 'Fewestrevisions' ),
                'Shortpages'                => array( 'SpecialPage', 'Shortpages' ),
                'Longpages'                 => array( 'SpecialPage', 'Longpages' ),
                'Newpages'                  => array( 'IncludableSpecialPage', 'Newpages' ),
                'Ancientpages'              => array( 'SpecialPage', 'Ancientpages' ),
                'Deadendpages'              => array( 'SpecialPage', 'Deadendpages' ),
+               'Protectedpages'            => array( 'SpecialPage', 'Protectedpages' ),
                'Allpages'                  => array( 'IncludableSpecialPage', 'Allpages' ),
                'Prefixindex'               => array( 'IncludableSpecialPage', 'Prefixindex' ) ,
                'Ipblocklist'               => array( 'SpecialPage', 'Ipblocklist' ),
                'Specialpages'              => array( 'UnlistedSpecialPage', 'Specialpages' ),
-               'Contributions'             => array( 'UnlistedSpecialPage', 'Contributions' ),
+               'Contributions'             => array( 'SpecialPage', 'Contributions' ),
                'Emailuser'                 => array( 'UnlistedSpecialPage', 'Emailuser' ),
                'Whatlinkshere'             => array( 'UnlistedSpecialPage', 'Whatlinkshere' ),
                'Recentchangeslinked'       => array( 'UnlistedSpecialPage', 'Recentchangeslinked' ),
                'Movepage'                  => array( 'UnlistedSpecialPage', 'Movepage' ),
                'Blockme'                   => array( 'UnlistedSpecialPage', 'Blockme' ),
-               'Booksources'               => array( 'SpecialPage', 'Booksources' ),
+               'Resetpass'                 => array( 'UnlistedSpecialPage', 'Resetpass' ),
+               'Booksources'               => 'SpecialBookSources',
                'Categories'                => array( 'SpecialPage', 'Categories' ),
                'Export'                    => array( 'SpecialPage', 'Export' ),
                'Version'                   => array( 'SpecialPage', 'Version' ),
@@ -137,6 +141,7 @@ class SpecialPage
                'Revisiondelete'            => array( 'SpecialPage', 'Revisiondelete', 'deleterevision' ),
                'Unusedtemplates'           => array( 'SpecialPage', 'Unusedtemplates' ),
                'Randomredirect'            => array( 'SpecialPage', 'Randomredirect' ),
+               'Withoutinterwiki'                      => array( 'SpecialPage', 'Withoutinterwiki' ),
 
                'Mypage'                    => array( 'SpecialMypage' ),
                'Mytalk'                    => array( 'SpecialMytalk' ),
@@ -174,7 +179,7 @@ class SpecialPage
                }
 
                if( $wgEmailAuthentication ) {
-                       self::$mList['Confirmemail'] = array( 'UnlistedSpecialPage', 'Confirmemail' );
+                       self::$mList['Confirmemail'] = 'EmailConfirmation';
                }
 
                # Add extension special pages
@@ -271,6 +276,30 @@ class SpecialPage
                unset( self::$mList[$name] );
        }
 
+       /**
+        * Check if a given name exist as a special page or as a special page alias
+        * @param $name string: name of a special page
+        * @return boolean: true if a special page exists with this name
+        */
+       static function exists( $name ) {
+               global $wgContLang;
+               if ( !self::$mListInitialised ) {
+                       self::initList();
+               }
+               if( !self::$mAliases ) {
+                       self::initAliasList();
+               }
+
+               # Remove special pages inline parameters:
+               $bits = explode( '/', $name );
+               $name = $wgContLang->caseFold($bits[0]);
+
+               return
+                       array_key_exists( $name, self::$mList )
+                       or array_key_exists( $name, self::$mAliases )
+               ;
+       }
+
        /**
         * Find the object with a given name and return it (or NULL)
         * @static
@@ -409,7 +438,7 @@ class SpecialPage
                        $query = $_GET;
                        unset( $query['title'] );
                        $query = wfArrayToCGI( $query );
-                       $title = $page->getTitle();
+                       $title = $page->getTitle( $par );
                        $url = $title->getFullUrl( $query );
                        $wgOut->redirect( $url );
                        wfProfileOut( __METHOD__ );
@@ -534,7 +563,7 @@ class SpecialPage
                        $this->mFunction = $function;
                }
                if ( $file === 'default' ) {
-                       $this->mFile = "Special{$name}.php";
+                       $this->mFile = dirname(__FILE__) . "/Special{$name}.php";
                } else {
                        $this->mFile = $file;
                }
@@ -666,7 +695,7 @@ class SpecialPage
         * If the special page is a redirect, then get the Title object it redirects to. 
         * False otherwise.
         */
-       function getRedirect( $subpage = false ) {
+       function getRedirect( $subpage ) {
                return false;
        }
 
@@ -690,7 +719,7 @@ class SpecialPage
 
 /**
  * Shortcut to construct a special page which is unlisted by default
- * @package MediaWiki
+ * @addtogroup SpecialPage
  */
 class UnlistedSpecialPage extends SpecialPage
 {
@@ -701,7 +730,7 @@ class UnlistedSpecialPage extends SpecialPage
 
 /**
  * Shortcut to construct an includable special  page
- * @package MediaWiki
+ * @addtogroup SpecialPage
  */
 class IncludableSpecialPage extends SpecialPage
 {
@@ -710,6 +739,10 @@ class IncludableSpecialPage extends SpecialPage
        }
 }
 
+/**
+ * Shortcut to construct a special page alias.
+ * @addtogroup SpecialPage
+ */
 class SpecialRedirectToSpecial extends UnlistedSpecialPage {
        var $redirName, $redirSubpage;
 
@@ -729,6 +762,17 @@ class SpecialRedirectToSpecial extends UnlistedSpecialPage {
        }
 }
 
+/** SpecialMypage, SpecialMytalk and SpecialMycontributions special pages
+ * are used to get user independant links pointing to the user page, talk
+ * page and list of contributions.
+ * This can let us cache a single copy of any generated content for all
+ * users.
+ */
+
+/**
+ * Shortcut to construct a special page pointing to current user user's page.
+ * @addtogroup SpecialPage
+ */
 class SpecialMypage extends UnlistedSpecialPage {
        function __construct() {
                parent::__construct( 'Mypage' );
@@ -745,6 +789,10 @@ class SpecialMypage extends UnlistedSpecialPage {
        }
 }
 
+/**
+ * Shortcut to construct a special page pointing to current user talk page.
+ * @addtogroup SpecialPage
+ */
 class SpecialMytalk extends UnlistedSpecialPage {
        function __construct() {
                parent::__construct( 'Mytalk' );
@@ -761,6 +809,10 @@ class SpecialMytalk extends UnlistedSpecialPage {
        }
 }
 
+/**
+ * Shortcut to construct a special page pointing to current user contributions.
+ * @addtogroup SpecialPage
+ */
 class SpecialMycontributions extends UnlistedSpecialPage {
        function __construct() {
                parent::__construct(  'Mycontributions' );
@@ -772,4 +824,4 @@ class SpecialMycontributions extends UnlistedSpecialPage {
        }
 }
 
-?>
+