X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSetup.php;h=efcbbc98f32a9c98c788bc28b5d8a28eb85e27ba;hb=0db8ece2b11070d5cd923743af27ed4ba8429042;hp=0f55446313b868d0469960c78886252ca4d0a9ba;hpb=798270581d38271fa87b2744fa157f77f2d2db80;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Setup.php b/includes/Setup.php index 0f55446313..efcbbc98f3 100644 --- a/includes/Setup.php +++ b/includes/Setup.php @@ -16,51 +16,43 @@ if( defined( 'MEDIAWIKI' ) ) { # setting up a few globals. # -global $wgProfiling, $wgProfileSampleRate, $wgIP, $wgUseSquid, $IP; +// Check to see if we are at the file scope +if ( !isset( $wgVersion ) ) { + die( "Error, Setup.php must be included from the file scope, after DefaultSettings.php\n" ); +} if( !isset( $wgProfiling ) ) $wgProfiling = false; -if ( $wgProfiling and (0 == rand() % $wgProfileSampleRate ) ) { +if ( $wgProfiling and (0 == rand() % $wgProfileSampleRate ) ) { require_once( 'Profiling.php' ); } else { - function wfProfileIn( $fn = '' ) {} - function wfProfileOut( $fn = '' ) {} + function wfProfileIn( $fn = '' ) { + global $hackwhere, $wgDBname; + $hackwhere[] = $fn; + if (function_exists("setproctitle")) + setproctitle($fn . " [$wgDBname]"); + } + function wfProfileOut( $fn = '' ) { + global $hackwhere, $wgDBname; + if (count($hackwhere)) + array_pop($hackwhere); + if (function_exists("setproctitle") && count($hackwhere)) + setproctitle($hackwhere[count($hackwhere)-1] . " [$wgDBname]"); + } function wfGetProfilingOutput( $s, $e ) {} function wfProfileClose() {} -} - -/* collect the originating ips */ -if( $wgUseSquid && isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { - # If the web server is behind a reverse proxy, we need to find - # out where our requests are really coming from. - $hopips = array_map( 'trim', explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] ) ); - - while(in_array(trim(end($hopips)), $wgSquidServers)){ - array_pop($hopips); - } - $wgIP = trim(end($hopips)); -} elseif( isset( $_SERVER['REMOTE_ADDR'] ) ) { - $wgIP = $_SERVER['REMOTE_ADDR']; -} else { - # Running on CLI? - $wgIP = '127.0.0.1'; -} - -if ( $wgUseData ) { - $wgExtraNamespaces[20] = 'Data' ; - $wgExtraNamespaces[21] = 'Data_talk' ; + function wfLogProfilingData() {} } $fname = 'Setup.php'; wfProfileIn( $fname ); -global $wgUseDynamicDates; wfProfileIn( $fname.'-includes' ); require_once( 'GlobalFunctions.php' ); require_once( 'Hooks.php' ); require_once( 'Namespace.php' ); -require_once( 'RecentChange.php' ); +require_once( 'RecentChange.php' ); require_once( 'User.php' ); require_once( 'Skin.php' ); require_once( 'OutputPage.php' ); @@ -70,119 +62,68 @@ require_once( 'Article.php' ); require_once( 'MagicWord.php' ); require_once( 'Block.php' ); require_once( 'MessageCache.php' ); -require_once( 'BlockCache.php' ); require_once( 'Parser.php' ); -require_once( 'ParserXML.php' ); require_once( 'ParserCache.php' ); require_once( 'WebRequest.php' ); require_once( 'LoadBalancer.php' ); require_once( 'HistoryBlob.php' ); - -$wgRequest = new WebRequest(); +require_once( 'ProxyTools.php' ); +require_once( 'ObjectCache.php' ); +require_once( 'WikiError.php' ); +require_once( 'SpecialPage.php' ); + +if ( $wgUseDynamicDates ) { + require_once( 'DateFormatter.php' ); +} wfProfileOut( $fname.'-includes' ); wfProfileIn( $fname.'-misc1' ); -global $wgUser, $wgLang, $wgContLang, $wgOut, $wgTitle; -global $wgLangClass, $wgContLangClass; -global $wgArticle, $wgDeferredUpdateList, $wgLinkCache; -global $wgMemc, $wgMagicWords, $wgMwRedir, $wgDebugLogFile; -global $wgMessageCache, $wgUseMemCached, $wgUseDatabaseMessages; -global $wgMsgCacheExpiry, $wgCommandLineMode; -global $wgBlockCache, $wgParserCache, $wgParser, $wgMsgParserOptions; -global $wgLoadBalancer, $wgDBservers, $wgDebugDumpSql; -global $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, $wgDBtype; -global $wgUseOldExistenceCheck, $wgEnablePersistentLC; - -global $wgFullyInitialised; + +$wgIP = false; # Load on demand +$wgRequest = new WebRequest(); # Useful debug output if ( $wgCommandLineMode ) { # wfDebug( '"' . implode( '" "', $argv ) . '"' ); } elseif ( function_exists( 'getallheaders' ) ) { - wfDebug( "\nStart request\n" ); + wfDebug( "\n\nStart request\n" ); wfDebug( $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . "\n" ); $headers = getallheaders(); foreach ($headers as $name => $value) { wfDebug( "$name: $value\n" ); } wfDebug( "\n" ); -} else { +} elseif( isset( $_SERVER['REQUEST_URI'] ) ) { wfDebug( $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . "\n" ); } -# Disable linkscc except if the old existence check method is enabled -if (!$wgUseOldExistenceCheck) { - $wgEnablePersistentLC = false; +if ( $wgSkipSkin ) { + $wgSkipSkins[] = $wgSkipSkin; } +$wgUseEnotif = $wgEnotifUserTalk || $wgEnotifWatchlist; + wfProfileOut( $fname.'-misc1' ); wfProfileIn( $fname.'-memcached' ); -# FakeMemCachedClient imitates the API of memcached-client v. 0.1.2. -# It acts as a memcached server with no RAM, that is, all objects are -# cleared the moment they are set. All set operations succeed and all -# get operations return null. - -if( $wgUseMemCached ) { - # Set up Memcached - # - require_once( 'memcached-client.php' ); - - /** - * - * @package MediaWiki - */ - class MemCachedClientforWiki extends memcached { - function _debugprint( $text ) { - wfDebug( "memcached: $text\n" ); - } - } +$wgMemc =& wfGetMainCache(); +$messageMemc =& wfGetMessageCacheStorage(); +$parserMemc =& wfGetParserCacheStorage(); - $wgMemc = new MemCachedClientforWiki( array('persistant' => true) ); - $wgMemc->set_servers( $wgMemCachedServers ); - $wgMemc->set_debug( $wgMemCachedDebug ); - - $messageMemc = &$wgMemc; -} elseif ( $wgUseTurckShm ) { - # Turck shared memory - # - require_once( 'ObjectCache.php' ); - $wgMemc = new TurckBagOStuff; - $messageMemc = &$wgMemc; -} else { - /** - * No shared memory - * @package MediaWiki - */ - class FakeMemCachedClient { - function add ($key, $val, $exp = 0) { return true; } - function decr ($key, $amt=1) { return null; } - function delete ($key, $time = 0) { return false; } - function disconnect_all () { } - function enable_compress ($enable) { } - function forget_dead_hosts () { } - function get ($key) { return null; } - function get_multi ($keys) { return array_pad(array(), count($keys), null); } - function incr ($key, $amt=1) { return null; } - function replace ($key, $value, $exp=0) { return false; } - function run_command ($sock, $cmd) { return null; } - function set ($key, $value, $exp=0){ return true; } - function set_compress_threshold ($thresh){ } - function set_debug ($dbg) { } - function set_servers ($list) { } - } - $wgMemc = new FakeMemCachedClient(); - - # Give the message cache a separate cache in the DB. - # This is a speedup over separately querying every message used - require_once( 'ObjectCache.php' ); - $messageMemc = new MediaWikiBagOStuff('objectcache'); -} +wfDebug( 'Main cache: ' . get_class( $wgMemc ) . + "\nMessage cache: " . get_class( $messageMemc ) . + "\nParser cache: " . get_class( $parserMemc ) . "\n" ); wfProfileOut( $fname.'-memcached' ); wfProfileIn( $fname.'-SetupSession' ); -if( !$wgCommandLineMode && ( isset( $_COOKIE[ini_get('session.name')] ) || isset( $_COOKIE[$wgDBname.'Token'] ) ) ) { +if ( $wgDBprefix ) { + session_name( $wgDBname . '_' . $wgDBprefix . '_session' ); +} else { + session_name( $wgDBname . '_session' ); +} + +if( !$wgCommandLineMode && ( isset( $_COOKIE[session_name()] ) || isset( $_COOKIE[$wgDBname.'Token'] ) ) ) { User::SetupSession(); $wgSessionStarted = true; } else { @@ -193,7 +134,7 @@ wfProfileOut( $fname.'-SetupSession' ); wfProfileIn( $fname.'-database' ); if ( !$wgDBservers ) { - $wgDBservers = array(array( + $wgDBservers = array(array( 'host' => $wgDBserver, 'user' => $wgDBuser, 'password' => $wgDBpassword, @@ -203,7 +144,7 @@ if ( !$wgDBservers ) { 'flags' => ($wgDebugDumpSql ? DBO_DEBUG : 0) | DBO_DEFAULT )); } -$wgLoadBalancer = LoadBalancer::newFromParams( $wgDBservers ); +$wgLoadBalancer = LoadBalancer::newFromParams( $wgDBservers, false, $wgMasterWaitTimeout ); $wgLoadBalancer->loadMasterPos(); wfProfileOut( $fname.'-database' ); @@ -211,40 +152,12 @@ wfProfileIn( $fname.'-language1' ); require_once( "$IP/languages/Language.php" ); -wfProfileOut( $fname.'-language1' ); -wfProfileIn( $fname.'-User' ); - -# Skin setup functions -# Entries can be added to this variable during the inclusion -# of the extension file. Skins can then perform any necessary initialisation. -foreach ( $wgSkinExtensionFunctions as $func ) { - $func(); -} - -if( !is_object( $wgAuth ) ) { - require_once( 'AuthPlugin.php' ); - $wgAuth = new AuthPlugin(); -} - -if( $wgCommandLineMode ) { - # Used for some maintenance scripts; user session cookies can screw things up - # when the database is in an in-between state. - $wgUser = new User(); -} else { - $wgUser = User::loadFromSession(); -} - -wfProfileOut( $fname.'-User' ); -wfProfileIn( $fname.'-language2' ); - -function setupLangObj(&$langclass) { - global $wgUseLatin1, $IP; +function setupLangObj($langclass) { + global $IP; if( ! class_exists( $langclass ) ) { - # Default to English/UTF-8, or for non-UTF-8, to latin-1 + # Default to English/UTF-8 $baseclass = 'LanguageUtf8'; - if( $wgUseLatin1 ) - $baseclass = 'LanguageLatin1'; require_once( "$IP/languages/$baseclass.php" ); $lc = strtolower(substr($langclass, 8)); $snip = " @@ -254,7 +167,6 @@ function setupLangObj(&$langclass) { } }"; - eval($snip); } @@ -270,17 +182,42 @@ $wgContLanguageCode = $wgLanguageCode; $wgContLangClass = 'Language' . str_replace( '-', '_', ucfirst( $wgContLanguageCode ) ); $wgContLang = setupLangObj( $wgContLangClass ); +$wgContLang->initEncoding(); + +wfProfileOut( $fname.'-language1' ); +wfProfileIn( $fname.'-User' ); + +# Skin setup functions +# Entries can be added to this variable during the inclusion +# of the extension file. Skins can then perform any necessary initialisation. +foreach ( $wgSkinExtensionFunctions as $func ) { + $func(); +} + +if( !is_object( $wgAuth ) ) { + require_once( 'AuthPlugin.php' ); + $wgAuth = new AuthPlugin(); +} -// set default user option from content language -if( !$wgUser->mDataLoaded ) { - $wgUser->loadDefaultFromLanguage(); +if( $wgCommandLineMode ) { + # Used for some maintenance scripts; user session cookies can screw things up + # when the database is in an in-between state. + $wgUser = new User(); + # Prevent loading User settings from the DB. + $wgUser->setLoaded( true ); +} else { + $wgUser = User::loadFromSession(); } +wfProfileOut( $fname.'-User' ); +wfProfileIn( $fname.'-language2' ); + // wgLanguageCode now specifically means the UI language -$wgLanguageCode = $wgUser->getOption('language'); -if( empty( $wgLanguageCode ) ) { - # Quick hack for upgrades where this will be blank, - # and it's not handled right. Set to default. +$wgLanguageCode = $wgRequest->getText('uselang', ''); +if ($wgLanguageCode == '') + $wgLanguageCode = $wgUser->getOption('language'); +# Validate $wgLanguageCode, which will soon be sent to an eval() +if( empty( $wgLanguageCode ) || !preg_match( '/^[a-z]+(-[a-z]+)?$/', $wgLanguageCode ) ) { $wgLanguageCode = $wgContLanguageCode; } @@ -296,11 +233,11 @@ if( $wgLangClass == $wgContLangClass ) { $wgLang = setupLangObj( $wgLangClass ); } -wfProfileOut( $fname.'-language' ); +wfProfileOut( $fname.'-language2' ); wfProfileIn( $fname.'-MessageCache' ); $wgMessageCache = new MessageCache; -$wgMessageCache->initialise( $messageMemc, $wgUseDatabaseMessages, $wgMsgCacheExpiry, $wgDBname); +$wgMessageCache->initialise( $parserMemc, $wgUseDatabaseMessages, $wgMsgCacheExpiry, $wgDBname); wfProfileOut( $fname.'-MessageCache' ); @@ -311,14 +248,14 @@ wfProfileOut( $fname.'-MessageCache' ); # SEARCH INDEX UPDATES, AND MANY MANY THINGS. # DO NOT USE THIS MODE EXCEPT FOR TESTING RIGHT NOW. # -# To disable it, the easiest thing could be to uncomment the +# To disable it, the easiest thing could be to uncomment the # following; they should effectively disable the UI switch functionality # # $wgLangClass = $wgContLangClass; # $wgLanguageCode = $wgContLanguageCode; # $wgLang = $wgContLang; # -# TODO: Need to change reference to $wgLang to $wgContLang at proper +# TODO: Need to change reference to $wgLang to $wgContLang at proper # places, including namespaces, dates in signatures, magic words, # and links # @@ -329,33 +266,24 @@ wfProfileOut( $fname.'-MessageCache' ); wfProfileIn( $fname.'-OutputPage' ); $wgOut = new OutputPage(); -wfDebug( "\n\n" ); wfProfileOut( $fname.'-OutputPage' ); -wfProfileIn( $fname.'-DateFormatter' ); - -if ( $wgUseDynamicDates ) { - require_once( 'DateFormatter.php' ); - global $wgDateFormatter; - $wgDateFormatter = new DateFormatter; -} - -wfProfileOut( $fname.'-DateFormatter' ); -wfProfileIn( $fname.'-BlockCache' ); - -$wgBlockCache = new BlockCache( true ); - -wfProfileOut( $fname.'-BlockCache' ); wfProfileIn( $fname.'-misc2' ); $wgDeferredUpdateList = array(); +$wgPostCommitUpdateList = array(); + $wgLinkCache = new LinkCache(); $wgMagicWords = array(); $wgMwRedir =& MagicWord::get( MAG_REDIRECT ); $wgParserCache = new ParserCache( $messageMemc ); -if ( $wgUseXMLparser ) $wgParser = new ParserXML(); -else $wgParser = new Parser(); +if ( $wgUseXMLparser ) { + require_once( 'ParserXML.php' ); + $wgParser = new ParserXML(); +} else { + $wgParser = new Parser(); +} $wgOut->setParserOptions( ParserOptions::newFromUser( $wgUser ) ); $wgMsgParserOptions = ParserOptions::newFromUser($wgUser); wfSeedRandom(); @@ -368,13 +296,14 @@ wfProfileOut( $fname.'-misc2' ); wfProfileIn( $fname.'-extensions' ); # Extension setup functions for extensions other than skins -# Entries should be added to this variable during the inclusion -# of the extension file. This allows the extension to perform +# Entries should be added to this variable during the inclusion +# of the extension file. This allows the extension to perform # any necessary initialisation in the fully initialised environment foreach ( $wgExtensionFunctions as $func ) { $func(); } +wfDebug( "\n" ); $wgFullyInitialised = true; wfProfileOut( $fname.'-extensions' ); wfProfileOut( $fname );