X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSetup.php;h=738abb4452af4d87333905210854abbb1ce863ff;hb=0af46ac5e13577b469727da03a7794343ed70018;hp=ee26068403e2c0d6b19c8b8710f91eff82d65220;hpb=d64197636f6ee2a16a6014d8bff972e4971a4f96;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Setup.php b/includes/Setup.php index ee26068403..738abb4452 100644 --- a/includes/Setup.php +++ b/includes/Setup.php @@ -1,7 +1,14 @@ $value) { wfDebug( "$name: $value\n" ); } wfDebug( "\n" ); -} else { +} elseif( isset( $_SERVER['REQUEST_URI'] ) ) { wfDebug( $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . "\n" ); } @@ -104,56 +105,18 @@ if (!$wgUseOldExistenceCheck) { wfProfileOut( $fname.'-misc1' ); wfProfileIn( $fname.'-memcached' ); -# Set up Memcached -# -class MemCachedClientforWiki extends memcached { - function _debugprint( $text ) { - wfDebug( "memcached: $text\n" ); - } -} - -# 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. - -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) { } -} - -if( $wgUseMemCached ) { - $wgMemc = new MemCachedClientforWiki( array('persistant' => true) ); - $wgMemc->set_servers( $wgMemCachedServers ); - $wgMemc->set_debug( $wgMemCachedDebug ); +$wgMemc =& wfGetMainCache(); +$messageMemc =& wfGetMessageCacheStorage(); +$parserMemc =& wfGetParserCacheStorage(); - $messageMemc = &$wgMemc; -} else { - $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.'Password'] ) ) ) { +if( !$wgCommandLineMode && ( isset( $_COOKIE[ini_get('session.name')] ) || isset( $_COOKIE[$wgDBname.'Token'] ) ) ) { User::SetupSession(); $wgSessionStarted = true; } else { @@ -174,91 +137,166 @@ if ( !$wgDBservers ) { 'flags' => ($wgDebugDumpSql ? DBO_DEBUG : 0) | DBO_DEFAULT )); } -$wgLoadBalancer = LoadBalancer::newFromParams( $wgDBservers ); +$wgLoadBalancer = LoadBalancer::newFromParams( $wgDBservers, false, $wgMasterWaitTimeout ); $wgLoadBalancer->loadMasterPos(); wfProfileOut( $fname.'-database' ); -wfProfileIn( $fname.'-language' ); -require_once( 'languages/Language.php' ); +wfProfileIn( $fname.'-language1' ); -$wgMessageCache = new MessageCache; +require_once( "$IP/languages/Language.php" ); -$wgLangClass = 'Language' . ucfirst( $wgLanguageCode ); -if( ! class_exists( $wgLangClass ) || ($wgLanguageCode == 'en' && !$wgUseLatin1) ) { - # Default to English/UTF-8 - require_once( 'languages/LanguageUtf8.php' ); - $wgLangClass = 'LanguageUtf8'; +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(); } -$wgLang = new $wgLangClass(); -if ( !is_object($wgLang) ) { - print "No language class ($wgLang)\N"; +if( !is_object( $wgAuth ) ) { + require_once( 'AuthPlugin.php' ); + $wgAuth = new AuthPlugin(); } -if( $wgUseLatin1 && $wgLanguageCode != 'en' ) { - # For non-UTF-8 non-English. - require_once( 'languages/LanguageLatin1.php' ); - $xxx = new LanguageLatin1( $wgLang ); - unset( $wgLang ); - $wgLang = $xxx; +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' ); + +function setupLangObj(&$langclass) { + global $IP; + + if( ! class_exists( $langclass ) ) { + # Default to English/UTF-8 + $baseclass = 'LanguageUtf8'; + require_once( "$IP/languages/$baseclass.php" ); + $lc = strtolower(substr($langclass, 8)); + $snip = " + class $langclass extends $baseclass { + function getVariants() { + return array(\"$lc\"); + } + + }"; + eval($snip); + } + + $lang = new $langclass(); + + return $lang; } + +# $wgLanguageCode may be changed later to fit with user preference. +# The content language will remain fixed as per the configuration, +# so let's keep it. +$wgContLanguageCode = $wgLanguageCode; +$wgContLangClass = 'Language' . str_replace( '-', '_', ucfirst( $wgContLanguageCode ) ); + +$wgContLang = setupLangObj( $wgContLangClass ); +$wgContLang->initEncoding(); + +// set default user option from content language +if( !$wgUser->mDataLoaded ) { + $wgUser->loadDefaultFromLanguage(); +} + +// wgLanguageCode now specifically means the UI language +$wgLanguageCode = $wgUser->getOption('language'); +# Validate $wgLanguageCode, which will soon be sent to an eval() +if( empty( $wgLanguageCode ) || !preg_match( '/^[a-z\-]*$/', $wgLanguageCode ) ) { + $wgLanguageCode = $wgContLanguageCode; +} + +$wgLangClass = 'Language'. str_replace( '-', '_', ucfirst( $wgLanguageCode ) ); + +if( $wgLangClass == $wgContLangClass ) { + $wgLang = &$wgContLang; +} else { + wfSuppressWarnings(); + include_once("$IP/languages/$wgLangClass.php"); + wfRestoreWarnings(); + + $wgLang = setupLangObj( $wgLangClass ); +} + wfProfileOut( $fname.'-language' ); wfProfileIn( $fname.'-MessageCache' ); -$wgMessageCache->initialise( $messageMemc, $wgUseDatabaseMessages, $wgMsgCacheExpiry, $wgDBname ); +$wgMessageCache = new MessageCache; +$wgMessageCache->initialise( $parserMemc, $wgUseDatabaseMessages, $wgMsgCacheExpiry, $wgDBname); wfProfileOut( $fname.'-MessageCache' ); + +# +# I guess the warning about UI switching might still apply... +# +# FIXME: THE ABOVE MIGHT BREAK NAMESPACES, VARIABLES, +# 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 +# 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 +# places, including namespaces, dates in signatures, magic words, +# and links +# +# TODO: Need to look at the issue of input/output encoding +# + + 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.'-User' ); - -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.'-misc2' ); $wgDeferredUpdateList = array(); +$wgPostCommitUpdateList = array(); + $wgLinkCache = new LinkCache(); $wgMagicWords = array(); $wgMwRedir =& MagicWord::get( MAG_REDIRECT ); -$wgParserCache = new ParserCache(); -$wgParser = new Parser(); +$wgParserCache = new ParserCache( $messageMemc ); + +if ( $wgUseXMLparser ) { + require_once( 'ParserXML.php' ); + $wgParser = new ParserXML(); +} else { + $wgParser = new Parser(); +} $wgOut->setParserOptions( ParserOptions::newFromUser( $wgUser ) ); -$wgDBConnections = array(); +$wgMsgParserOptions = ParserOptions::newFromUser($wgUser); wfSeedRandom(); # Placeholders in case of DB error -$wgTitle = Title::newFromText( wfMsg( 'badtitle' ) ); +$wgTitle = Title::makeTitle( NS_SPECIAL, 'Error' ); $wgArticle = new Article($wgTitle); wfProfileOut( $fname.'-misc2' ); wfProfileIn( $fname.'-extensions' ); -# Extension setup functions +# 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 # any necessary initialisation in the fully initialised environment @@ -266,6 +304,7 @@ foreach ( $wgExtensionFunctions as $func ) { $func(); } +wfDebug( "\n" ); $wgFullyInitialised = true; wfProfileOut( $fname.'-extensions' ); wfProfileOut( $fname );