Partial fix to bug 23167
[lhc/web/wiklou.git] / includes / Setup.php
index b04319d..b37fb5e 100644 (file)
@@ -8,7 +8,6 @@
  * MEDIAWIKI is defined
  */
 if( !defined( 'MEDIAWIKI' ) ) {
-       echo "This file is part of MediaWiki, it is not a valid entry point.\n";
        exit( 1 );
 }
 
@@ -22,7 +21,7 @@ $fname = 'Setup.php';
 wfProfileIn( $fname );
 
 // Check to see if we are at the file scope
-if( !isset( $wgVersion ) ) {
+if ( !isset( $wgVersion ) ) {
        echo "Error, Setup.php must be included from the file scope, after DefaultSettings.php\n";
        die( 1 );
 }
@@ -33,14 +32,15 @@ if( $wgRedirectScript === false ) $wgRedirectScript = "$wgScriptPath/redirect$wg
 
 if( $wgArticlePath === false ) {
        if( $wgUsePathInfo ) {
-               $wgArticlePath = "$wgScript/$1";
+               $wgArticlePath      = "$wgScript/$1";
        } else {
-               $wgArticlePath = "$wgScript?title=$1";
+               $wgArticlePath      = "$wgScript?title=$1";
        }
 }
 
 if( $wgStylePath === false ) $wgStylePath = "$wgScriptPath/skins";
 if( $wgStyleDirectory === false) $wgStyleDirectory   = "$IP/skins";
+if( $wgExtensionAssetsPath === false ) $wgExtensionAssetsPath = "$wgScriptPath/extensions";
 
 if( $wgLogo === false ) $wgLogo = "$wgStylePath/common/images/wiki.png";
 
@@ -54,15 +54,15 @@ if( $wgTmpDirectory === false ) $wgTmpDirectory = "{$wgUploadDirectory}/tmp";
 if( $wgReadOnlyFile === false ) $wgReadOnlyFile = "{$wgUploadDirectory}/lock_yBgMBwiR";
 if( $wgFileCacheDirectory === false ) $wgFileCacheDirectory = "{$wgUploadDirectory}/cache";
 
-if( empty( $wgFileStore['deleted']['directory'] ) ) {
+if ( empty( $wgFileStore['deleted']['directory'] ) ) {
        $wgFileStore['deleted']['directory'] = "{$wgUploadDirectory}/deleted";
 }
 
 /**
- * Unconditional protection for NS_MEDIAWIKI since otherwise it's too easy for a 
- * sysadmin to set $wgNamespaceProtection incorrectly and leave the wiki insecure. 
+ * Unconditional protection for NS_MEDIAWIKI since otherwise it's too easy for a
+ * sysadmin to set $wgNamespaceProtection incorrectly and leave the wiki insecure.
  *
- * Note that this is the definition of editinterface and it can be granted to 
+ * Note that this is the definition of editinterface and it can be granted to
  * all users if desired.
  */
 $wgNamespaceProtection[NS_MEDIAWIKI] = 'editinterface';
@@ -78,7 +78,7 @@ $wgNamespaceAliases['Image_talk'] = NS_FILE_TALK;
 /**
  * Initialise $wgLocalFileRepo from backwards-compatible settings
  */
-if( !$wgLocalFileRepo ) {
+if ( !$wgLocalFileRepo ) {
        $wgLocalFileRepo = array(
                'class' => 'LocalRepo',
                'name' => 'local',
@@ -87,7 +87,6 @@ if( !$wgLocalFileRepo ) {
                'hashLevels' => $wgHashedUploadDirectory ? 2 : 0,
                'thumbScriptUrl' => $wgThumbnailScriptPath,
                'transformVia404' => !$wgGenerateThumbnailOnParse,
-               'initialCapital' => $wgCapitalLinks,
                'deletedDir' => $wgFileStore['deleted']['directory'],
                'deletedHashLevels' => $wgFileStore['deleted']['hash']
        );
@@ -95,8 +94,8 @@ if( !$wgLocalFileRepo ) {
 /**
  * Initialise shared repo from backwards-compatible settings
  */
-if( $wgUseSharedUploads ) {
-       if( $wgSharedUploadDBname ) {
+if ( $wgUseSharedUploads ) {
+       if ( $wgSharedUploadDBname ) {
                $wgForeignFileRepos[] = array(
                        'class' => 'ForeignDBRepo',
                        'name' => 'shared',
@@ -130,7 +129,21 @@ if( $wgUseSharedUploads ) {
                );
        }
 }
-require_once( "$IP/includes/AutoLoader.php" );
+if( $wgUseInstantCommons ) {
+       $wgForeignFileRepos[] = array(
+               'class'                   => 'ForeignAPIRepo',
+               'name'                    => 'wikimediacommons',
+               'apibase'                 => 'http://commons.wikimedia.org/w/api.php',
+               'hashLevels'              => 2,
+               'fetchDescription'        => true,
+               'descriptionCacheExpiry'  => 43200,
+               'apiThumbCacheExpiry'     => 86400,
+       );
+}
+
+if ( !class_exists( 'AutoLoader' ) ) {
+       require_once( "$IP/includes/AutoLoader.php" );
+}
 
 wfProfileIn( $fname.'-exception' );
 require_once( "$IP/includes/Exception.php" );
@@ -148,24 +161,52 @@ require_once( "$IP/includes/StubObject.php" );
 wfProfileOut( $fname.'-includes' );
 wfProfileIn( $fname.'-misc1' );
 
+# Raise the memory limit if it's too low
+wfMemoryLimit();
+
+/**
+ * Set up the timezone, suppressing the pseudo-security warning in PHP 5.1+ 
+ * that happens whenever you use a date function without the timezone being
+ * explicitly set. Inspired by phpMyAdmin's treatment of the problem.
+ */
+wfSuppressWarnings();
+date_default_timezone_set( date_default_timezone_get() );
+wfRestoreWarnings();
 
 $wgIP = false; # Load on demand
 # Can't stub this one, it sets up $_GET and $_REQUEST in its constructor
 $wgRequest = new WebRequest;
 
 # Useful debug output
-if( $wgCommandLineMode ) {
+if ( $wgCommandLineMode ) {
        wfDebug( "\n\nStart command line script $self\n" );
-} elseif( function_exists( 'getallheaders' ) ) {
-       wfDebug( "\n\nStart request\n" );
-       wfDebug( $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . "\n" );
-       $headers = getallheaders();
-       foreach ($headers as $name => $value) {
-               wfDebug( "$name: $value\n" );
+} else {
+       wfDebug( "Start request\n\n" );
+       # Output the REQUEST_URI. This is not supported by IIS in rewrite mode,
+       # so use an alternative
+       $requestUri = isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : 
+               ( isset( $_SERVER['HTTP_X_ORIGINAL_URL'] ) ? $_SERVER['HTTP_X_ORIGINAL_URL'] :
+               $_SERVER['PHP_SELF'] );
+       wfDebug( "{$_SERVER['REQUEST_METHOD']} {$requestUri}\n" );
+
+       if ( $wgDebugPrintHttpHeaders ) {
+               $headerOut = "HTTP HEADERS:\n";
+
+               if ( function_exists( 'getallheaders' ) ) {
+                       $headers = getallheaders();
+                       foreach ( $headers as $name => $value ) {
+                               $headerOut .= "$name: $value\n";
+                       }
+               } else {
+                       $headers = $_SERVER;
+                       foreach ( $headers as $name => $value ) {
+                               if ( substr( $name, 0, 5 ) !== 'HTTP_' ) continue;
+                               $name = substr( $name, 5 );
+                               $headerOut .= "$name: $value\n";
+                       }
+               }
+               wfDebug( "$headerOut\n" );
        }
-       wfDebug( "\n" );
-} elseif( isset( $_SERVER['REQUEST_URI'] ) ) {
-       wfDebug( $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . "\n" );
 }
 
 if( $wgRCFilterByAge ) {
@@ -181,13 +222,13 @@ if( $wgRCFilterByAge ) {
        }
 }
 
-if( $wgSkipSkin ) {
+if ( $wgSkipSkin ) {
        $wgSkipSkins[] = $wgSkipSkin;
 }
 
 $wgUseEnotif = $wgEnotifUserTalk || $wgEnotifWatchlist;
 
-if( $wgMetaNamespace === FALSE ) {
+if($wgMetaNamespace === FALSE) {
        $wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
 }
 
@@ -195,6 +236,27 @@ if( $wgMetaNamespace === FALSE ) {
 # To determine the user language, use $wgLang->getCode()
 $wgContLanguageCode = $wgLanguageCode;
 
+# Easy to forget to falsify $wgShowIPinHeader for static caches.
+# If file cache or squid cache is on, just disable this (DWIMD).
+if( $wgUseFileCache || $wgUseSquid ) $wgShowIPinHeader = false;
+
+# $wgAllowRealName and $wgAllowUserSkin were removed in 1.16
+# in favor of $wgHiddenPrefs, handle b/c here
+if( !$wgAllowRealName ) {
+       $wgHiddenPrefs[] = 'realname';
+}
+
+if( !$wgAllowUserSkin ) {
+       $wgHiddenPrefs[] = 'skin';
+}
+
+if ( !$wgHtml5Version && $wgHtml5 && $wgAllowRdfaAttributes ) {
+       # see http://www.w3.org/TR/rdfa-in-html/#document-conformance
+       if ( $wgMimeType == 'application/xhtml+xml' ) $wgHtml5Version = 'XHTML+RDFa 1.0';
+       else $wgHtml5Version = 'HTML+RDFa 1.0';
+}
+
+
 wfProfileOut( $fname.'-misc1' );
 wfProfileIn( $fname.'-memcached' );
 
@@ -202,9 +264,9 @@ $wgMemc =& wfGetMainCache();
 $messageMemc =& wfGetMessageCacheStorage();
 $parserMemc =& wfGetParserCacheStorage();
 
-wfDebug( 'Main cache: ' . get_class( $wgMemc ) .
-       "\nMessage cache: " . get_class( $messageMemc ) .
-       "\nParser cache: " . get_class( $parserMemc ) . "\n" );
+wfDebug( 'CACHES: ' . get_class( $wgMemc ) . '[main] ' .
+       get_class( $messageMemc ) . '[message] ' .
+       get_class( $parserMemc ) . "[parser]\n" );
 
 wfProfileOut( $fname.'-memcached' );
 
@@ -234,7 +296,7 @@ $wgCookiePrefix = strtr($wgCookiePrefix, "=,; +.\"'\\[", "__________");
 if( !wfIniGetBool( 'session.auto_start' ) )
        session_name( $wgSessionName ? $wgSessionName : $wgCookiePrefix . '_session' );
 
-if( !$wgCommandLineMode && ( $wgRequest->checkSessionCookie() || isset($_COOKIE[$wgCookiePrefix.'Token']) ) ) {
+if( !$wgCommandLineMode && ( $wgRequest->checkSessionCookie() || isset( $_COOKIE[$wgCookiePrefix.'Token'] ) ) ) {
        wfIncrStats( 'request_with_session' );
        wfSetupSession();
        $wgSessionStarted = true;
@@ -266,7 +328,7 @@ wfProfileIn( $fname.'-User' );
 # 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 ) {
+foreach ( $wgSkinExtensionFunctions as $func ) {
        call_user_func( $func );
 }
 
@@ -282,10 +344,8 @@ wfProfileIn( $fname.'-misc2' );
 $wgDeferredUpdateList = array();
 $wgPostCommitUpdateList = array();
 
-if( $wgAjaxWatch ) $wgAjaxExportList[] = 'wfAjaxWatch';
-if( $wgAjaxUploadDestCheck ) $wgAjaxExportList[] = 'UploadForm::ajaxGetExistsWarning';
-if( $wgAjaxLicensePreview )
-       $wgAjaxExportList[] = 'UploadForm::ajaxGetLicensePreview';
+if ( $wgAjaxWatch ) $wgAjaxExportList[] = 'wfAjaxWatch';
+if ( $wgAjaxUploadDestCheck ) $wgAjaxExportList[] = 'SpecialUpload::ajaxGetExistsWarning';
 
 # Placeholders in case of DB error
 $wgTitle = null;
@@ -298,8 +358,19 @@ wfProfileIn( $fname.'-extensions' );
 # 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 ) {
-       $profName = $fname.'-extensions-'.strval( $func );
+foreach ( $wgExtensionFunctions as $func ) {
+       # Allow closures in PHP 5.3+
+       if ( is_object( $func ) && $func instanceof Closure ) {
+               $profName = $fname.'-extensions-closure';
+       } elseif( is_array( $func ) ) {
+               if ( is_object( $func[0] ) )
+                       $profName = $fname.'-extensions-'.get_class( $func[0] ).'::'.$func[1];
+               else
+                       $profName = $fname.'-extensions-'.implode( '::', $func );
+       } else {
+               $profName = $fname.'-extensions-'.strval( $func );
+       }
+
        wfProfileIn( $profName );
        call_user_func( $func );
        wfProfileOut( $profName );