Tell regexp parser to use extra analysis on external link regexp;
[lhc/web/wiklou.git] / includes / User.php
index 7f0bce7..f51edcd 100644 (file)
@@ -137,6 +137,11 @@ class User {
         * if we have an available language object.
         */
        function loadDefaults() {
+               static $n=0;
+               $n++;
+               $fname = 'User::loadDefaults' . $n;
+               wfProfileIn( $fname );
+               
                global $wgContLang, $wgIP;
                global $wgNamespacesToBeSearchedDefault;
 
@@ -149,9 +154,11 @@ class User {
                $this->mGroups = array();
                
                // Getting user defaults only if we have an available language
-               if(isset($wgContLang)) { $this->loadDefaultFromLanguage(); }
+               if( isset( $wgContLang ) ) {
+                       $this->loadDefaultFromLanguage();
+               }
                
-               foreach ($wgNamespacesToBeSearchedDefault as $nsnum => $val) {
+               foreach( $wgNamespacesToBeSearchedDefault as $nsnum => $val ) {
                        $this->mOptions['searchNs'.$nsnum] = $val;
                }
                unset( $this->mSkin );
@@ -160,6 +167,7 @@ class User {
                $this->mTouched = '0'; # Allow any pages to be cached
                $this->setToken(); # Random
                $this->mHash = false;
+               wfProfileOut( $fname );
        }
 
        /**
@@ -168,16 +176,25 @@ class User {
         * a language object.
         */     
        function loadDefaultFromLanguage(){
-               global $wgContLang;
-               $defOpt = $wgContLang->getDefaultUserOptions() ;
-               foreach ( $defOpt as $oname => $val ) {
-                       $this->mOptions[$oname] = $val;
-               }               
-               /* 
-                 default language setting
-               */
-               $this->setOption('variant', $wgContLang->getPreferredVariant());
-               $this->setOption('language', $wgContLang->getPreferredVariant());
+               $fname = 'User::loadDefaultFromLanguage';
+               wfProfileIn( $fname );
+               
+               /**
+                * Site defaults will override the global/language defaults
+                */
+               global $wgContLang, $wgDefaultUserOptions;
+               $defOpt = $wgDefaultUserOptions + $wgContLang->getDefaultUserOptions();
+               
+               /**
+                * default language setting
+                */
+               $variant = $wgContLang->getPreferredVariant();
+               $defOpt['variant'] = $variant;
+               $defOpt['language'] = $variant;
+               
+               $this->mOptions = $defOpt;
+               
+               wfProfileOut();
        }
 
        /**
@@ -340,6 +357,10 @@ class User {
                if(!$this->mId) {
                        /** Get rights */
                        $anong = Group::newFromId($wgAnonGroupId);
+                       if (!$anong) 
+                               wfDebugDieBacktrace("Please update your database schema "
+                                       ."and populate initial group data from "
+                                       ."maintenance/archives patches");
                        $anong->loadFromDatabase();
                        $this->mRights = explode(',', $anong->getRights());
                        $this->mDataLoaded = true;
@@ -640,10 +661,14 @@ class User {
         * @todo FIXME : need to check the old failback system [AV]
         */
        function &getSkin() {
-               global $IP, $wgUsePHPTal;
+               global $IP;
                if ( ! isset( $this->mSkin ) ) {
+                       $fname = 'User::getSkin';
+                       wfProfileIn( $fname );
+                       
                        # get all skin names available
                        $skinNames = Skin::getSkinNames();
+                       
                        # get the user skin
                        $userSkin = $this->getOption( 'skin' );
                        if ( $userSkin == '' ) { $userSkin = 'standard'; }
@@ -684,7 +709,8 @@ class User {
                                $className = 'SkinStandard';
                                require_once( $IP.'/skins/Standard.php' );
                        }
-                       $this->mSkin = new $className;
+                       $this->mSkin =& new $className;
+                       wfProfileOut( $fname );
                }
                return $this->mSkin;
        }
@@ -873,8 +899,8 @@ class User {
                $this->mId = $dbw->insertId();
                $dbw->insert( 'user_rights',
                        array(
-                               'ur_user_id' => $this->mId,
-                               'ur_user_rights' => implode( ',', $this->mRights )
+                               'ur_user' => $this->mId,
+                               'ur_rights' => implode( ',', $this->mRights )
                        ), $fname
                );
                
@@ -1010,6 +1036,15 @@ class User {
         */
        function checkPassword( $password ) {
                $this->loadFromDatabase();
+               
+               global $wgAuth;
+               if( $wgAuth->authenticate( $this->getName(), $password ) ) {
+                       return true;
+               } elseif( $wgAuth->strict() ) {
+                       /* Auth plugin doesn't allow local authentication */
+                       return false;
+               }
+               
                $ep = $this->encryptPassword( $password );
                if ( 0 == strcmp( $ep, $this->mPassword ) ) {
                        return true;