2004-02-18 02:15:00 +00:00
|
|
|
<?php
|
2004-09-02 23:28:24 +00:00
|
|
|
/**
|
|
|
|
|
* Include most things that's need to customize the site
|
2010-10-02 07:57:43 +00:00
|
|
|
*
|
|
|
|
|
* @file
|
2004-09-02 23:28:24 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This file is not a valid entry point, perform no further processing unless
|
|
|
|
|
* MEDIAWIKI is defined
|
|
|
|
|
*/
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( !defined( 'MEDIAWIKI' ) ) {
|
2006-07-14 05:35:31 +00:00
|
|
|
exit( 1 );
|
2008-04-14 07:45:50 +00:00
|
|
|
}
|
2004-08-06 22:30:47 +00:00
|
|
|
|
2003-04-14 23:10:40 +00:00
|
|
|
# The main wiki script and things like database
|
|
|
|
|
# conversion and maintenance scripts all share a
|
|
|
|
|
# common setup of including lots of classes and
|
|
|
|
|
# setting up a few globals.
|
|
|
|
|
#
|
|
|
|
|
|
2006-07-14 05:35:31 +00:00
|
|
|
$fname = 'Setup.php';
|
|
|
|
|
wfProfileIn( $fname );
|
|
|
|
|
|
2005-04-09 10:30:45 +00:00
|
|
|
// Check to see if we are at the file scope
|
2008-12-23 23:34:35 +00:00
|
|
|
if ( !isset( $wgVersion ) ) {
|
2006-01-14 02:49:43 +00:00
|
|
|
echo "Error, Setup.php must be included from the file scope, after DefaultSettings.php\n";
|
2006-06-07 06:40:24 +00:00
|
|
|
die( 1 );
|
2005-04-09 10:30:45 +00:00
|
|
|
}
|
2004-03-20 15:03:26 +00:00
|
|
|
|
2007-01-03 08:41:16 +00:00
|
|
|
// Set various default paths sensibly...
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( $wgScript === false ) $wgScript = "$wgScriptPath/index$wgScriptExtension";
|
|
|
|
|
if ( $wgRedirectScript === false ) $wgRedirectScript = "$wgScriptPath/redirect$wgScriptExtension";
|
|
|
|
|
if ( $wgLoadScript === false ) $wgLoadScript = "$wgScriptPath/load$wgScriptExtension";
|
2007-01-03 08:41:16 +00:00
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( $wgArticlePath === false ) {
|
|
|
|
|
if ( $wgUsePathInfo ) {
|
2008-12-23 23:34:35 +00:00
|
|
|
$wgArticlePath = "$wgScript/$1";
|
2007-01-03 08:41:16 +00:00
|
|
|
} else {
|
2008-12-23 23:34:35 +00:00
|
|
|
$wgArticlePath = "$wgScript?title=$1";
|
2007-01-03 08:41:16 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2011-05-13 11:41:17 +00:00
|
|
|
if ( !empty($wgActionPaths) && !isset($wgActionPaths['view']) ) {
|
|
|
|
|
# 'view' is assumed the default action path everywhere in the code
|
|
|
|
|
# but is rarely filled in $wgActionPaths
|
|
|
|
|
$wgActionPaths['view'] = $wgArticlePath ;
|
|
|
|
|
}
|
|
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( $wgStylePath === false ) $wgStylePath = "$wgScriptPath/skins";
|
|
|
|
|
if ( $wgLocalStylePath === false ) $wgLocalStylePath = "$wgScriptPath/skins";
|
|
|
|
|
if ( $wgStyleDirectory === false ) $wgStyleDirectory = "$IP/skins";
|
|
|
|
|
if ( $wgExtensionAssetsPath === false ) $wgExtensionAssetsPath = "$wgScriptPath/extensions";
|
2007-01-03 08:41:16 +00:00
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( $wgLogo === false ) $wgLogo = "$wgStylePath/common/images/wiki.png";
|
2007-01-03 08:41:16 +00:00
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( $wgUploadPath === false ) $wgUploadPath = "$wgScriptPath/images";
|
|
|
|
|
if ( $wgUploadDirectory === false ) $wgUploadDirectory = "$IP/images";
|
2007-01-03 08:41:16 +00:00
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( $wgTmpDirectory === false ) $wgTmpDirectory = "{$wgUploadDirectory}/tmp";
|
2007-01-03 08:41:16 +00:00
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( $wgReadOnlyFile === false ) $wgReadOnlyFile = "{$wgUploadDirectory}/lock_yBgMBwiR";
|
|
|
|
|
if ( $wgFileCacheDirectory === false ) $wgFileCacheDirectory = "{$wgUploadDirectory}/cache";
|
|
|
|
|
if ( $wgDeletedDirectory === false ) $wgDeletedDirectory = "{$wgUploadDirectory}/deleted";
|
2007-01-09 06:35:18 +00:00
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( isset( $wgFileStore['deleted']['directory'] ) ) {
|
2010-07-04 15:56:46 +00:00
|
|
|
$wgDeletedDirectory = $wgFileStore['deleted']['directory'];
|
2007-07-22 14:45:12 +00:00
|
|
|
}
|
2007-10-01 19:50:25 +00:00
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( isset( $wgFooterIcons['copyright'] ) &&
|
|
|
|
|
isset( $wgFooterIcons['copyright']['copyright'] ) &&
|
|
|
|
|
$wgFooterIcons['copyright']['copyright'] === array() )
|
|
|
|
|
{
|
2010-12-04 20:55:23 +00:00
|
|
|
if ( isset( $wgCopyrightIcon ) && $wgCopyrightIcon ) {
|
2011-01-14 21:42:38 +00:00
|
|
|
$wgFooterIcons['copyright']['copyright'] = $wgCopyrightIcon;
|
2010-12-04 20:55:23 +00:00
|
|
|
} elseif ( $wgRightsIcon || $wgRightsText ) {
|
2011-01-14 21:42:38 +00:00
|
|
|
$wgFooterIcons['copyright']['copyright'] = array(
|
|
|
|
|
'url' => $wgRightsUrl,
|
|
|
|
|
'src' => $wgRightsIcon,
|
|
|
|
|
'alt' => $wgRightsText,
|
2010-12-04 20:55:23 +00:00
|
|
|
);
|
|
|
|
|
} else {
|
2011-01-14 21:42:38 +00:00
|
|
|
unset( $wgFooterIcons['copyright']['copyright'] );
|
2010-12-04 20:55:23 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( isset( $wgFooterIcons['poweredby'] ) &&
|
|
|
|
|
isset( $wgFooterIcons['poweredby']['mediawiki'] ) &&
|
|
|
|
|
$wgFooterIcons['poweredby']['mediawiki']['src'] === null )
|
|
|
|
|
{
|
|
|
|
|
$wgFooterIcons['poweredby']['mediawiki']['src'] = "$wgStylePath/common/images/poweredby_mediawiki_88x31.png";
|
2010-12-04 20:55:23 +00:00
|
|
|
}
|
|
|
|
|
|
2008-08-31 13:03:30 +00:00
|
|
|
/**
|
2009-07-15 22:41:56 +00:00
|
|
|
* Unconditional protection for NS_MEDIAWIKI since otherwise it's too easy for a
|
|
|
|
|
* sysadmin to set $wgNamespaceProtection incorrectly and leave the wiki insecure.
|
2008-08-31 13:03:30 +00:00
|
|
|
*
|
2009-07-15 22:41:56 +00:00
|
|
|
* Note that this is the definition of editinterface and it can be granted to
|
2008-08-31 13:03:30 +00:00
|
|
|
* all users if desired.
|
|
|
|
|
*/
|
|
|
|
|
$wgNamespaceProtection[NS_MEDIAWIKI] = 'editinterface';
|
|
|
|
|
|
2008-11-27 20:27:05 +00:00
|
|
|
/**
|
|
|
|
|
* The canonical names of namespaces 6 and 7 are, as of v1.14, "File"
|
|
|
|
|
* and "File_talk". The old names "Image" and "Image_talk" are
|
|
|
|
|
* retained as aliases for backwards compatibility.
|
|
|
|
|
*/
|
2008-12-01 17:14:30 +00:00
|
|
|
$wgNamespaceAliases['Image'] = NS_FILE;
|
|
|
|
|
$wgNamespaceAliases['Image_talk'] = NS_FILE_TALK;
|
2008-11-27 20:27:05 +00:00
|
|
|
|
2007-05-30 21:02:32 +00:00
|
|
|
/**
|
|
|
|
|
* Initialise $wgLocalFileRepo from backwards-compatible settings
|
|
|
|
|
*/
|
2008-12-23 23:34:35 +00:00
|
|
|
if ( !$wgLocalFileRepo ) {
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( isset( $wgFileStore['deleted']['hash'] ) ) {
|
2010-07-04 15:56:46 +00:00
|
|
|
$deletedHashLevel = $wgFileStore['deleted']['hash'];
|
|
|
|
|
} else {
|
|
|
|
|
$deletedHashLevel = $wgHashedUploadDirectory ? 3 : 0;
|
|
|
|
|
}
|
2008-04-14 07:45:50 +00:00
|
|
|
$wgLocalFileRepo = array(
|
2007-05-30 21:02:32 +00:00
|
|
|
'class' => 'LocalRepo',
|
|
|
|
|
'name' => 'local',
|
|
|
|
|
'directory' => $wgUploadDirectory,
|
2010-07-02 19:54:46 +00:00
|
|
|
'scriptDirUrl' => $wgScriptPath,
|
|
|
|
|
'scriptExtension' => $wgScriptExtension,
|
2007-05-30 21:02:32 +00:00
|
|
|
'url' => $wgUploadBaseUrl ? $wgUploadBaseUrl . $wgUploadPath : $wgUploadPath,
|
|
|
|
|
'hashLevels' => $wgHashedUploadDirectory ? 2 : 0,
|
|
|
|
|
'thumbScriptUrl' => $wgThumbnailScriptPath,
|
|
|
|
|
'transformVia404' => !$wgGenerateThumbnailOnParse,
|
2010-07-04 15:56:46 +00:00
|
|
|
'deletedDir' => $wgDeletedDirectory,
|
|
|
|
|
'deletedHashLevels' => $deletedHashLevel
|
2007-05-30 21:02:32 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Initialise shared repo from backwards-compatible settings
|
|
|
|
|
*/
|
2008-12-23 23:34:35 +00:00
|
|
|
if ( $wgUseSharedUploads ) {
|
|
|
|
|
if ( $wgSharedUploadDBname ) {
|
2007-05-30 21:02:32 +00:00
|
|
|
$wgForeignFileRepos[] = array(
|
|
|
|
|
'class' => 'ForeignDBRepo',
|
|
|
|
|
'name' => 'shared',
|
|
|
|
|
'directory' => $wgSharedUploadDirectory,
|
|
|
|
|
'url' => $wgSharedUploadPath,
|
|
|
|
|
'hashLevels' => $wgHashedSharedUploadDirectory ? 2 : 0,
|
|
|
|
|
'thumbScriptUrl' => $wgSharedThumbnailScriptPath,
|
|
|
|
|
'transformVia404' => !$wgGenerateThumbnailOnParse,
|
|
|
|
|
'dbType' => $wgDBtype,
|
|
|
|
|
'dbServer' => $wgDBserver,
|
|
|
|
|
'dbUser' => $wgDBuser,
|
|
|
|
|
'dbPassword' => $wgDBpassword,
|
|
|
|
|
'dbName' => $wgSharedUploadDBname,
|
2011-01-14 21:42:38 +00:00
|
|
|
'dbFlags' => ( $wgDebugDumpSql ? DBO_DEBUG : 0 ) | DBO_DEFAULT,
|
2007-05-30 21:02:32 +00:00
|
|
|
'tablePrefix' => $wgSharedUploadDBprefix,
|
|
|
|
|
'hasSharedCache' => $wgCacheSharedUploads,
|
|
|
|
|
'descBaseUrl' => $wgRepositoryBaseUrl,
|
|
|
|
|
'fetchDescription' => $wgFetchCommonsDescriptions,
|
|
|
|
|
);
|
|
|
|
|
} else {
|
2008-04-14 07:45:50 +00:00
|
|
|
$wgForeignFileRepos[] = array(
|
2007-05-30 21:02:32 +00:00
|
|
|
'class' => 'FSRepo',
|
|
|
|
|
'name' => 'shared',
|
|
|
|
|
'directory' => $wgSharedUploadDirectory,
|
|
|
|
|
'url' => $wgSharedUploadPath,
|
|
|
|
|
'hashLevels' => $wgHashedSharedUploadDirectory ? 2 : 0,
|
|
|
|
|
'thumbScriptUrl' => $wgSharedThumbnailScriptPath,
|
|
|
|
|
'transformVia404' => !$wgGenerateThumbnailOnParse,
|
|
|
|
|
'descBaseUrl' => $wgRepositoryBaseUrl,
|
|
|
|
|
'fetchDescription' => $wgFetchCommonsDescriptions,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( $wgUseInstantCommons ) {
|
2009-11-06 15:38:47 +00:00
|
|
|
$wgForeignFileRepos[] = array(
|
2009-11-14 13:16:41 +00:00
|
|
|
'class' => 'ForeignAPIRepo',
|
|
|
|
|
'name' => 'wikimediacommons',
|
|
|
|
|
'apibase' => 'http://commons.wikimedia.org/w/api.php',
|
2009-11-25 18:02:03 +00:00
|
|
|
'hashLevels' => 2,
|
2009-11-14 13:16:41 +00:00
|
|
|
'fetchDescription' => true,
|
|
|
|
|
'descriptionCacheExpiry' => 43200,
|
|
|
|
|
'apiThumbCacheExpiry' => 86400,
|
2009-11-06 15:38:47 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2011-01-06 21:00:17 +00:00
|
|
|
if ( $wgRCFilterByAge ) {
|
2011-01-14 21:42:38 +00:00
|
|
|
# # Trim down $wgRCLinkDays so that it only lists links which are valid
|
|
|
|
|
# # as determined by $wgRCMaxAge.
|
|
|
|
|
# # Note that we allow 1 link higher than the max for things like 56 days but a 60 day link.
|
2011-01-06 21:00:17 +00:00
|
|
|
sort( $wgRCLinkDays );
|
2011-01-14 21:42:38 +00:00
|
|
|
for ( $i = 0; $i < count( $wgRCLinkDays ); $i++ ) {
|
|
|
|
|
if ( $wgRCLinkDays[$i] >= $wgRCMaxAge / ( 3600 * 24 ) ) {
|
2011-01-06 21:00:17 +00:00
|
|
|
$wgRCLinkDays = array_slice( $wgRCLinkDays, 0, $i + 1, false );
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( $wgSkipSkin ) {
|
|
|
|
|
$wgSkipSkins[] = $wgSkipSkin;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Set default shared prefix
|
|
|
|
|
if ( $wgSharedPrefix === false ) {
|
|
|
|
|
$wgSharedPrefix = $wgDBprefix;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( !$wgCookiePrefix ) {
|
|
|
|
|
if ( $wgSharedDB && $wgSharedPrefix && in_array( 'user', $wgSharedTables ) ) {
|
|
|
|
|
$wgCookiePrefix = $wgSharedDB . '_' . $wgSharedPrefix;
|
|
|
|
|
} elseif ( $wgSharedDB && in_array( 'user', $wgSharedTables ) ) {
|
|
|
|
|
$wgCookiePrefix = $wgSharedDB;
|
|
|
|
|
} elseif ( $wgDBprefix ) {
|
|
|
|
|
$wgCookiePrefix = $wgDBname . '_' . $wgDBprefix;
|
|
|
|
|
} else {
|
|
|
|
|
$wgCookiePrefix = $wgDBname;
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-01-14 21:42:38 +00:00
|
|
|
$wgCookiePrefix = strtr( $wgCookiePrefix, '=,; +."\'\\[', '__________' );
|
2011-01-06 21:00:17 +00:00
|
|
|
|
|
|
|
|
$wgUseEnotif = $wgEnotifUserTalk || $wgEnotifWatchlist;
|
|
|
|
|
|
|
|
|
|
if ( $wgMetaNamespace === false ) {
|
|
|
|
|
$wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
|
|
|
|
|
}
|
|
|
|
|
|
The beginnings of HipHop compiled mode support. It works now for parser cache hits.
* Work around HipHop issue 314 (volatile broken) and issue 308 (no compilation detection) by adding some large and ugly compilation detection code to WebStart.php and doMaintenance.php.
* Provide an MW_COMPILED constant which can be used to detect compiled mode throughout the codebase.
* Introduced wfIsHipHop(), which detects either compiled or interpreted mode. Used this to work around unusual eval() return value in eval.php.
* Work around lack of ini_get() in Maintenance.php, by duplicating wfIsHipHop().
* In Maintenance::shouldExecute(), accept "include" as an inclusion function name, since all kinds of inclusion give this string in HipHop.
* Introduced new class MWInit, which provides some static functions in the pre-autoloader environment.
* Introduced MWInit::compiledPath(), which provides a relative path for invoking a compiled file, and MWInit::interpretedPath(), which provides an absolute path for interpreting a PHP file. Used these new functions in the appropriate places.
* When we are running compiled code, don't include files which would generate duplicate class, function or constant definitions. Documented the new requirements on the contents of Defines.php and UtfNormalDefines.php.
* In HipHop compiled mode, it's not possible to have executable code in the same file as a class definition.
** Moved MimeMagic initialisation to the constructor.
** Moved Namespace.php global variable initialisation to Setup.php.
** Moved MemcachedSessions.php initialisation to the caller in GlobalFunctions.php.
** Moved Sanitizer.php constants and global variables to static class members. Introduced an accessor function for the attribs regex, as a new place to put code formerly at file level.
** Moved Language.php initialisation of $wgLanguageNames to Language::getLanguageNames(). Removed the global variable, marked "private" since forever.
* In two places: don't use error_log() with type=3 to append to a file, HipHop doesn't support it. Use file_put_contents() with FILE_APPEND instead.
* Work around the terrible breakage of class_exists() by using MWInit::classExists() instead in various places. In WebInstaller::getPageByName(), the class_exists() was marked with a fixme comment already, so I replaced it with an autoloader solution.
2011-04-04 12:59:55 +00:00
|
|
|
/**
|
|
|
|
|
* Definitions of the NS_ constants are in Defines.php
|
|
|
|
|
* @private
|
|
|
|
|
*/
|
|
|
|
|
$wgCanonicalNamespaceNames = array(
|
|
|
|
|
NS_MEDIA => 'Media',
|
|
|
|
|
NS_SPECIAL => 'Special',
|
|
|
|
|
NS_TALK => 'Talk',
|
|
|
|
|
NS_USER => 'User',
|
|
|
|
|
NS_USER_TALK => 'User_talk',
|
|
|
|
|
NS_PROJECT => 'Project',
|
|
|
|
|
NS_PROJECT_TALK => 'Project_talk',
|
|
|
|
|
NS_FILE => 'File',
|
|
|
|
|
NS_FILE_TALK => 'File_talk',
|
|
|
|
|
NS_MEDIAWIKI => 'MediaWiki',
|
|
|
|
|
NS_MEDIAWIKI_TALK => 'MediaWiki_talk',
|
|
|
|
|
NS_TEMPLATE => 'Template',
|
|
|
|
|
NS_TEMPLATE_TALK => 'Template_talk',
|
|
|
|
|
NS_HELP => 'Help',
|
|
|
|
|
NS_HELP_TALK => 'Help_talk',
|
|
|
|
|
NS_CATEGORY => 'Category',
|
|
|
|
|
NS_CATEGORY_TALK => 'Category_talk',
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/// @todo UGLY UGLY
|
|
|
|
|
if( is_array( $wgExtraNamespaces ) ) {
|
|
|
|
|
$wgCanonicalNamespaceNames = $wgCanonicalNamespaceNames + $wgExtraNamespaces;
|
|
|
|
|
}
|
|
|
|
|
|
2011-01-06 21:00:17 +00:00
|
|
|
# These are now the same, always
|
|
|
|
|
# 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';
|
|
|
|
|
}
|
|
|
|
|
|
2011-03-06 04:13:46 +00:00
|
|
|
# Doesn't make sense to have if disabled.
|
|
|
|
|
if ( !$wgEnotifMinorEdits ) {
|
|
|
|
|
$wgHiddenPrefs[] = 'enotifminoredits';
|
|
|
|
|
}
|
|
|
|
|
|
2011-04-14 10:38:29 +00:00
|
|
|
# $wgDisabledActions is deprecated as of 1.18
|
|
|
|
|
foreach( $wgDisabledActions as $action ){
|
|
|
|
|
$wgActions[$action] = false;
|
|
|
|
|
}
|
|
|
|
|
if( !$wgAllowPageInfo ){
|
|
|
|
|
$wgActions['info'] = false;
|
|
|
|
|
}
|
|
|
|
|
|
2011-01-06 21:00:17 +00:00
|
|
|
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';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Blacklisted file extensions shouldn't appear on the "allowed" list
|
|
|
|
|
$wgFileExtensions = array_diff ( $wgFileExtensions, $wgFileBlacklist );
|
|
|
|
|
|
2011-05-14 17:11:32 +00:00
|
|
|
if ( $wgArticleCountMethod === null ) {
|
|
|
|
|
$wgArticleCountMethod = $wgUseCommaCount ? 'comma' : 'link';
|
|
|
|
|
}
|
|
|
|
|
|
2011-01-06 21:00:17 +00:00
|
|
|
if ( $wgInvalidateCacheOnLocalSettingsChange ) {
|
|
|
|
|
$wgCacheEpoch = max( $wgCacheEpoch, gmdate( 'YmdHis', @filemtime( "$IP/LocalSettings.php" ) ) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( $wgAjaxUploadDestCheck ) {
|
|
|
|
|
$wgAjaxExportList[] = 'SpecialUpload::ajaxGetExistsWarning';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( $wgNewUserLog ) {
|
|
|
|
|
# Add a new log type
|
|
|
|
|
$wgLogTypes[] = 'newusers';
|
|
|
|
|
$wgLogNames['newusers'] = 'newuserlogpage';
|
|
|
|
|
$wgLogHeaders['newusers'] = 'newuserlogpagetext';
|
|
|
|
|
$wgLogActions['newusers/newusers'] = 'newuserlogentry'; // For compatibility with older log entries
|
|
|
|
|
$wgLogActions['newusers/create'] = 'newuserlog-create-entry';
|
|
|
|
|
$wgLogActions['newusers/create2'] = 'newuserlog-create2-entry';
|
|
|
|
|
$wgLogActions['newusers/autocreate'] = 'newuserlog-autocreate-entry';
|
|
|
|
|
}
|
|
|
|
|
|
The beginnings of HipHop compiled mode support. It works now for parser cache hits.
* Work around HipHop issue 314 (volatile broken) and issue 308 (no compilation detection) by adding some large and ugly compilation detection code to WebStart.php and doMaintenance.php.
* Provide an MW_COMPILED constant which can be used to detect compiled mode throughout the codebase.
* Introduced wfIsHipHop(), which detects either compiled or interpreted mode. Used this to work around unusual eval() return value in eval.php.
* Work around lack of ini_get() in Maintenance.php, by duplicating wfIsHipHop().
* In Maintenance::shouldExecute(), accept "include" as an inclusion function name, since all kinds of inclusion give this string in HipHop.
* Introduced new class MWInit, which provides some static functions in the pre-autoloader environment.
* Introduced MWInit::compiledPath(), which provides a relative path for invoking a compiled file, and MWInit::interpretedPath(), which provides an absolute path for interpreting a PHP file. Used these new functions in the appropriate places.
* When we are running compiled code, don't include files which would generate duplicate class, function or constant definitions. Documented the new requirements on the contents of Defines.php and UtfNormalDefines.php.
* In HipHop compiled mode, it's not possible to have executable code in the same file as a class definition.
** Moved MimeMagic initialisation to the constructor.
** Moved Namespace.php global variable initialisation to Setup.php.
** Moved MemcachedSessions.php initialisation to the caller in GlobalFunctions.php.
** Moved Sanitizer.php constants and global variables to static class members. Introduced an accessor function for the attribs regex, as a new place to put code formerly at file level.
** Moved Language.php initialisation of $wgLanguageNames to Language::getLanguageNames(). Removed the global variable, marked "private" since forever.
* In two places: don't use error_log() with type=3 to append to a file, HipHop doesn't support it. Use file_put_contents() with FILE_APPEND instead.
* Work around the terrible breakage of class_exists() by using MWInit::classExists() instead in various places. In WebInstaller::getPageByName(), the class_exists() was marked with a fixme comment already, so I replaced it with an autoloader solution.
2011-04-04 12:59:55 +00:00
|
|
|
if ( !defined( 'MW_COMPILED' ) ) {
|
|
|
|
|
if ( !MWInit::classExists( 'AutoLoader' ) ) {
|
|
|
|
|
require_once( "$IP/includes/AutoLoader.php" );
|
|
|
|
|
}
|
2006-06-08 13:27:11 +00:00
|
|
|
|
The beginnings of HipHop compiled mode support. It works now for parser cache hits.
* Work around HipHop issue 314 (volatile broken) and issue 308 (no compilation detection) by adding some large and ugly compilation detection code to WebStart.php and doMaintenance.php.
* Provide an MW_COMPILED constant which can be used to detect compiled mode throughout the codebase.
* Introduced wfIsHipHop(), which detects either compiled or interpreted mode. Used this to work around unusual eval() return value in eval.php.
* Work around lack of ini_get() in Maintenance.php, by duplicating wfIsHipHop().
* In Maintenance::shouldExecute(), accept "include" as an inclusion function name, since all kinds of inclusion give this string in HipHop.
* Introduced new class MWInit, which provides some static functions in the pre-autoloader environment.
* Introduced MWInit::compiledPath(), which provides a relative path for invoking a compiled file, and MWInit::interpretedPath(), which provides an absolute path for interpreting a PHP file. Used these new functions in the appropriate places.
* When we are running compiled code, don't include files which would generate duplicate class, function or constant definitions. Documented the new requirements on the contents of Defines.php and UtfNormalDefines.php.
* In HipHop compiled mode, it's not possible to have executable code in the same file as a class definition.
** Moved MimeMagic initialisation to the constructor.
** Moved Namespace.php global variable initialisation to Setup.php.
** Moved MemcachedSessions.php initialisation to the caller in GlobalFunctions.php.
** Moved Sanitizer.php constants and global variables to static class members. Introduced an accessor function for the attribs regex, as a new place to put code formerly at file level.
** Moved Language.php initialisation of $wgLanguageNames to Language::getLanguageNames(). Removed the global variable, marked "private" since forever.
* In two places: don't use error_log() with type=3 to append to a file, HipHop doesn't support it. Use file_put_contents() with FILE_APPEND instead.
* Work around the terrible breakage of class_exists() by using MWInit::classExists() instead in various places. In WebInstaller::getPageByName(), the class_exists() was marked with a fixme comment already, so I replaced it with an autoloader solution.
2011-04-04 12:59:55 +00:00
|
|
|
wfProfileIn( $fname . '-exception' );
|
|
|
|
|
require_once( "$IP/includes/Exception.php" );
|
|
|
|
|
wfInstallExceptionHandler();
|
|
|
|
|
wfProfileOut( $fname . '-exception' );
|
|
|
|
|
|
|
|
|
|
wfProfileIn( $fname . '-includes' );
|
2011-05-15 13:36:59 +00:00
|
|
|
require_once( "$IP/includes/normal/UtfNormalUtil.php" );
|
The beginnings of HipHop compiled mode support. It works now for parser cache hits.
* Work around HipHop issue 314 (volatile broken) and issue 308 (no compilation detection) by adding some large and ugly compilation detection code to WebStart.php and doMaintenance.php.
* Provide an MW_COMPILED constant which can be used to detect compiled mode throughout the codebase.
* Introduced wfIsHipHop(), which detects either compiled or interpreted mode. Used this to work around unusual eval() return value in eval.php.
* Work around lack of ini_get() in Maintenance.php, by duplicating wfIsHipHop().
* In Maintenance::shouldExecute(), accept "include" as an inclusion function name, since all kinds of inclusion give this string in HipHop.
* Introduced new class MWInit, which provides some static functions in the pre-autoloader environment.
* Introduced MWInit::compiledPath(), which provides a relative path for invoking a compiled file, and MWInit::interpretedPath(), which provides an absolute path for interpreting a PHP file. Used these new functions in the appropriate places.
* When we are running compiled code, don't include files which would generate duplicate class, function or constant definitions. Documented the new requirements on the contents of Defines.php and UtfNormalDefines.php.
* In HipHop compiled mode, it's not possible to have executable code in the same file as a class definition.
** Moved MimeMagic initialisation to the constructor.
** Moved Namespace.php global variable initialisation to Setup.php.
** Moved MemcachedSessions.php initialisation to the caller in GlobalFunctions.php.
** Moved Sanitizer.php constants and global variables to static class members. Introduced an accessor function for the attribs regex, as a new place to put code formerly at file level.
** Moved Language.php initialisation of $wgLanguageNames to Language::getLanguageNames(). Removed the global variable, marked "private" since forever.
* In two places: don't use error_log() with type=3 to append to a file, HipHop doesn't support it. Use file_put_contents() with FILE_APPEND instead.
* Work around the terrible breakage of class_exists() by using MWInit::classExists() instead in various places. In WebInstaller::getPageByName(), the class_exists() was marked with a fixme comment already, so I replaced it with an autoloader solution.
2011-04-04 12:59:55 +00:00
|
|
|
require_once( "$IP/includes/GlobalFunctions.php" );
|
|
|
|
|
require_once( "$IP/includes/Hooks.php" );
|
|
|
|
|
require_once( "$IP/includes/ProxyTools.php" );
|
|
|
|
|
require_once( "$IP/includes/ImageFunctions.php" );
|
|
|
|
|
wfProfileOut( $fname . '-includes' );
|
|
|
|
|
}
|
2011-05-10 19:03:23 +00:00
|
|
|
require_once( MWInit::compiledPath( 'includes/normal/UtfNormalDefines.php' ) );
|
|
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
wfProfileIn( $fname . '-misc1' );
|
2010-01-08 01:48:53 +00:00
|
|
|
|
2009-08-04 02:47:39 +00:00
|
|
|
# Raise the memory limit if it's too low
|
2009-08-05 01:33:18 +00:00
|
|
|
wfMemoryLimit();
|
2006-07-26 07:15:39 +00:00
|
|
|
|
2010-01-08 01:48:53 +00:00
|
|
|
/**
|
2010-09-04 00:18:01 +00:00
|
|
|
* Set up the timezone, suppressing the pseudo-security warning in PHP 5.1+
|
2010-01-08 01:48:53 +00:00
|
|
|
* 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();
|
|
|
|
|
|
2006-07-26 07:15:39 +00:00
|
|
|
# Can't stub this one, it sets up $_GET and $_REQUEST in its constructor
|
|
|
|
|
$wgRequest = new WebRequest;
|
2006-04-02 04:13:23 +00:00
|
|
|
|
2004-02-14 12:37:25 +00:00
|
|
|
# Useful debug output
|
2010-09-04 00:18:01 +00:00
|
|
|
global $wgCommandLineMode;
|
2008-12-23 23:34:35 +00:00
|
|
|
if ( $wgCommandLineMode ) {
|
2006-07-26 07:15:39 +00:00
|
|
|
wfDebug( "\n\nStart command line script $self\n" );
|
2010-01-27 17:21:18 +00:00
|
|
|
} else {
|
2011-02-19 13:09:17 +00:00
|
|
|
$debug = "Start request\n\n{$_SERVER['REQUEST_METHOD']} {$wgRequest->getRequestURL()}";
|
2010-01-27 17:21:18 +00:00
|
|
|
|
|
|
|
|
if ( $wgDebugPrintHttpHeaders ) {
|
2011-02-19 13:09:17 +00:00
|
|
|
$debug .= "\nHTTP HEADERS:\n";
|
|
|
|
|
|
|
|
|
|
foreach ( $wgRequest->getAllHeaders() as $name => $value ) {
|
|
|
|
|
$debug .= "$name: $value\n";
|
2010-01-29 04:29:26 +00:00
|
|
|
}
|
2010-01-27 17:21:18 +00:00
|
|
|
}
|
2011-02-19 13:09:17 +00:00
|
|
|
wfDebug( "$debug\n" );
|
2004-03-06 01:49:16 +00:00
|
|
|
}
|
2003-08-11 13:53:20 +00:00
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
wfProfileOut( $fname . '-misc1' );
|
|
|
|
|
wfProfileIn( $fname . '-memcached' );
|
2004-08-14 13:34:57 +00:00
|
|
|
|
* Rewrote ObjectCache.php to conform to the modern coding style, and to be less convoluted about how CACHE_ANYTHING and CACHE_ACCEL are resolved. Moved most functionality to static members of a new ObjectCache class.
* Moved the global functions to GlobalFunctions.php, where they are now just convenience wrappers. Made them return non-references. Updated callers (none found in extensions).
* Added an advanced configuration method, $wgObjectCaches, which allows a lot more detail in the object cache configuration than $wgMainCacheType.
* Made all object cache classes derive from BagOStuff.
* Split the MWMemcached class into a generic client class and a MediaWiki-specific wrapper class. The wrapper class presents a simple BagOStuff interface to calling code, hiding memcached client internals, and will simplify the task of supporting the PECL extension.
* Added some extra constructor parameters to MWMemcached, configurable via $wgObjectCaches.
* Removed the *_multi() methods from BagOStuff, my grepping indicates that they are not used.
* Rewrote FakeMemCachedClient as a BagOStuff subclass, called EmptyBagOStuff.
* Added an optional "server" parameter to SQLBagOStuff. This allows the server holding the objectcache table to be different from the server holding the core DB.
* Added MultiWriteBagOStuff: a cache class which writes to multiple locations, and reads from them in a defined fallback sequence. This can be used to extend the cache space by adding disk-backed storage to existing in-memory caches.
* Made MWMemcached::get() return false on failure instead of null, to match the BagOStuff documentation and the other BagOStuff subclasses. Anything that was relying on it returning null would have already been broken with SqlBagOStuff.
* Fixed a bug in the memcached client causing keys with spaces or line breaks in them to break the memcached protocol, injecting arbitrary commands or parameters. Since the PECL client apparently also has this flaw, I implemented the fix in the wrapper class.
* Renamed BagOStuff::set_debug() to setDebug(), since we aren't emulating the memcached client anymore
* Fixed spelling error in MWMemcached: persistant -> persistent
2011-03-03 09:37:37 +00:00
|
|
|
$wgMemc = wfGetMainCache();
|
|
|
|
|
$messageMemc = wfGetMessageCacheStorage();
|
|
|
|
|
$parserMemc = wfGetParserCacheStorage();
|
2004-08-21 10:04:30 +00:00
|
|
|
|
2010-01-27 17:21:18 +00:00
|
|
|
wfDebug( 'CACHES: ' . get_class( $wgMemc ) . '[main] ' .
|
|
|
|
|
get_class( $messageMemc ) . '[message] ' .
|
|
|
|
|
get_class( $parserMemc ) . "[parser]\n" );
|
2003-11-21 02:43:12 +00:00
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
wfProfileOut( $fname . '-memcached' );
|
2008-12-10 23:15:50 +00:00
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
# # Most of the config is out, some might want to run hooks here.
|
2008-12-10 23:15:50 +00:00
|
|
|
wfRunHooks( 'SetupAfterCache' );
|
|
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
wfProfileIn( $fname . '-session' );
|
2006-02-11 07:41:31 +00:00
|
|
|
|
2006-01-15 08:05:28 +00:00
|
|
|
# If session.auto_start is there, we can't touch session name
|
2011-01-06 21:00:17 +00:00
|
|
|
if ( !wfIniGetBool( 'session.auto_start' ) ) {
|
2006-07-04 04:20:14 +00:00
|
|
|
session_name( $wgSessionName ? $wgSessionName : $wgCookiePrefix . '_session' );
|
2011-01-06 21:00:17 +00:00
|
|
|
}
|
2005-05-14 09:27:24 +00:00
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
|
|
|
|
|
if ( $wgRequest->checkSessionCookie() || isset( $_COOKIE[$wgCookiePrefix . 'Token'] ) ) {
|
2010-11-01 11:50:00 +00:00
|
|
|
wfIncrStats( 'request_with_session' );
|
|
|
|
|
wfSetupSession();
|
|
|
|
|
$wgSessionStarted = true;
|
|
|
|
|
} else {
|
|
|
|
|
wfIncrStats( 'request_without_session' );
|
|
|
|
|
$wgSessionStarted = false;
|
2010-05-07 12:25:01 +00:00
|
|
|
}
|
2004-07-18 08:48:43 +00:00
|
|
|
}
|
|
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
wfProfileOut( $fname . '-session' );
|
|
|
|
|
wfProfileIn( $fname . '-globals' );
|
2004-06-15 15:00:54 +00:00
|
|
|
|
2011-04-23 15:19:38 +00:00
|
|
|
$wgContLang = Language::factory( $wgLanguageCode );
|
|
|
|
|
$wgContLang->initEncoding();
|
|
|
|
|
$wgContLang->initContLang();
|
2007-05-17 20:02:59 +00:00
|
|
|
|
|
|
|
|
// Now that variant lists may be available...
|
|
|
|
|
$wgRequest->interpolateTitle();
|
2011-04-23 13:55:27 +00:00
|
|
|
$wgUser = RequestContext::getMain()->getUser(); # BackCompat
|
2011-03-24 00:48:22 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @var Language
|
|
|
|
|
*/
|
2011-04-24 10:50:51 +00:00
|
|
|
$wgLang = new StubUserLang;
|
2011-03-24 00:48:22 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @var OutputPage
|
|
|
|
|
*/
|
2011-04-23 13:55:27 +00:00
|
|
|
$wgOut = RequestContext::getMain()->getOutput(); # BackCompat
|
2011-03-24 00:48:22 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @var Parser
|
|
|
|
|
*/
|
2007-11-20 10:55:08 +00:00
|
|
|
$wgParser = new StubObject( 'wgParser', $wgParserConf['class'], array( $wgParserConf ) );
|
|
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
if ( !is_object( $wgAuth ) ) {
|
2006-07-26 07:15:39 +00:00
|
|
|
$wgAuth = new StubObject( 'wgAuth', 'AuthPlugin' );
|
2006-11-30 07:47:34 +00:00
|
|
|
wfRunHooks( 'AuthPluginSetup', array( &$wgAuth ) );
|
2005-06-16 07:51:45 +00:00
|
|
|
}
|
2006-11-30 07:47:34 +00:00
|
|
|
|
2004-05-31 08:43:36 +00:00
|
|
|
# Placeholders in case of DB error
|
2006-07-26 07:15:39 +00:00
|
|
|
$wgTitle = null;
|
|
|
|
|
$wgArticle = null;
|
2004-05-31 08:43:36 +00:00
|
|
|
|
2011-01-06 21:00:17 +00:00
|
|
|
$wgDeferredUpdateList = array();
|
|
|
|
|
|
2011-01-14 21:42:38 +00:00
|
|
|
wfProfileOut( $fname . '-globals' );
|
|
|
|
|
wfProfileIn( $fname . '-extensions' );
|
2004-06-04 02:44:58 +00:00
|
|
|
|
2004-09-26 13:41:21 +00:00
|
|
|
# Extension setup functions for extensions other than skins
|
2005-07-03 04:00:33 +00:00
|
|
|
# Entries should be added to this variable during the inclusion
|
|
|
|
|
# of the extension file. This allows the extension to perform
|
2004-05-15 03:36:39 +00:00
|
|
|
# any necessary initialisation in the fully initialised environment
|
2008-12-23 23:34:35 +00:00
|
|
|
foreach ( $wgExtensionFunctions as $func ) {
|
2009-04-06 12:41:20 +00:00
|
|
|
# Allow closures in PHP 5.3+
|
2009-07-19 20:21:28 +00:00
|
|
|
if ( is_object( $func ) && $func instanceof Closure ) {
|
2011-01-14 21:42:38 +00:00
|
|
|
$profName = $fname . '-extensions-closure';
|
|
|
|
|
} elseif ( is_array( $func ) ) {
|
2009-07-19 20:21:28 +00:00
|
|
|
if ( is_object( $func[0] ) )
|
2011-01-14 21:42:38 +00:00
|
|
|
$profName = $fname . '-extensions-' . get_class( $func[0] ) . '::' . $func[1];
|
2009-07-19 20:21:28 +00:00
|
|
|
else
|
2011-01-14 21:42:38 +00:00
|
|
|
$profName = $fname . '-extensions-' . implode( '::', $func );
|
2009-07-19 20:21:28 +00:00
|
|
|
} else {
|
2011-01-14 21:42:38 +00:00
|
|
|
$profName = $fname . '-extensions-' . strval( $func );
|
2009-07-19 20:21:28 +00:00
|
|
|
}
|
2009-04-06 12:41:20 +00:00
|
|
|
|
2006-10-02 17:04:13 +00:00
|
|
|
wfProfileIn( $profName );
|
2005-12-14 16:46:27 +00:00
|
|
|
call_user_func( $func );
|
2006-10-02 17:04:13 +00:00
|
|
|
wfProfileOut( $profName );
|
2004-05-15 03:36:39 +00:00
|
|
|
}
|
|
|
|
|
|
2006-07-26 07:15:39 +00:00
|
|
|
wfDebug( "Fully initialised\n" );
|
2004-07-18 08:48:43 +00:00
|
|
|
$wgFullyInitialised = true;
|
2011-04-14 21:21:28 +00:00
|
|
|
|
2011-05-10 19:03:23 +00:00
|
|
|
wfProfileOut( $fname . '-extensions' );
|
2003-10-25 08:01:33 +00:00
|
|
|
wfProfileOut( $fname );
|