2004-02-18 02:15:00 +00:00
|
|
|
<?php
|
2004-09-02 23:28:24 +00:00
|
|
|
/**
|
2012-05-10 15:51:44 +00:00
|
|
|
* Include most things that's need to customize the site.
|
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
* (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
* http://www.gnu.org/copyleft/gpl.html
|
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...
|
2013-04-20 22:49:30 +00:00
|
|
|
if ( $wgScript === false ) {
|
|
|
|
|
$wgScript = "$wgScriptPath/index$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 ) {
|
2013-01-26 18:32:03 +00:00
|
|
|
$wgArticlePath = "$wgScript/$1";
|
2007-01-03 08:41:16 +00:00
|
|
|
} else {
|
2013-01-26 18:32:03 +00:00
|
|
|
$wgArticlePath = "$wgScript?title=$1";
|
2007-01-03 08:41:16 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-02-03 20:05:24 +00:00
|
|
|
if ( !empty( $wgActionPaths ) && !isset( $wgActionPaths['view'] ) ) {
|
2011-05-13 11:41:17 +00:00
|
|
|
# 'view' is assumed the default action path everywhere in the code
|
2011-05-16 09:40:19 +00:00
|
|
|
# but is rarely filled in $wgActionPaths
|
|
|
|
|
$wgActionPaths['view'] = $wgArticlePath;
|
2011-05-13 11:41:17 +00:00
|
|
|
}
|
|
|
|
|
|
2013-04-20 22:49:30 +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
|
|
|
|
2013-04-20 22:49:30 +00:00
|
|
|
if ( $wgLogo === false ) {
|
|
|
|
|
$wgLogo = "$wgStylePath/common/images/wiki.png";
|
|
|
|
|
}
|
2007-01-03 08:41:16 +00:00
|
|
|
|
2013-04-20 22:49:30 +00:00
|
|
|
if ( $wgUploadPath === false ) {
|
|
|
|
|
$wgUploadPath = "$wgScriptPath/images";
|
|
|
|
|
}
|
|
|
|
|
if ( $wgUploadDirectory === false ) {
|
|
|
|
|
$wgUploadDirectory = "$IP/images";
|
|
|
|
|
}
|
|
|
|
|
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
|
|
|
|
2011-12-20 03:52:06 +00:00
|
|
|
/**
|
|
|
|
|
* Initialise $wgLockManagers to include basic FS version
|
|
|
|
|
*/
|
|
|
|
|
$wgLockManagers[] = array(
|
2013-04-20 22:49:30 +00:00
|
|
|
'name' => 'fsLockManager',
|
|
|
|
|
'class' => 'FSLockManager',
|
2011-12-20 03:52:06 +00:00
|
|
|
'lockDirectory' => "{$wgUploadDirectory}/lockdir",
|
|
|
|
|
);
|
|
|
|
|
$wgLockManagers[] = array(
|
2013-04-20 22:49:30 +00:00
|
|
|
'name' => 'nullLockManager',
|
|
|
|
|
'class' => 'NullLockManager',
|
2011-12-20 03:52:06 +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(
|
2011-12-20 19:25:23 +00:00
|
|
|
'class' => 'FileRepo',
|
2007-05-30 21:02:32 +00:00
|
|
|
'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(
|
2013-04-20 22:49:30 +00:00
|
|
|
'class' => 'ForeignAPIRepo',
|
|
|
|
|
'name' => 'wikimediacommons',
|
|
|
|
|
'apibase' => WebRequest::detectProtocol() === 'https' ?
|
2012-01-02 18:26:09 +00:00
|
|
|
'https://commons.wikimedia.org/w/api.php' :
|
|
|
|
|
'http://commons.wikimedia.org/w/api.php',
|
2013-04-20 22:49:30 +00:00
|
|
|
'hashLevels' => 2,
|
|
|
|
|
'fetchDescription' => true,
|
2012-01-02 15:34:35 +00:00
|
|
|
'descriptionCacheExpiry' => 43200,
|
2013-04-20 22:49:30 +00:00
|
|
|
'apiThumbCacheExpiry' => 86400,
|
2009-11-06 15:38:47 +00:00
|
|
|
);
|
|
|
|
|
}
|
2011-12-20 03:52:06 +00:00
|
|
|
/*
|
2011-12-22 01:06:19 +00:00
|
|
|
* Add on default file backend config for file repos.
|
|
|
|
|
* FileBackendGroup will handle initializing the backends.
|
2011-12-20 03:52:06 +00:00
|
|
|
*/
|
|
|
|
|
if ( !isset( $wgLocalFileRepo['backend'] ) ) {
|
2011-12-22 01:06:19 +00:00
|
|
|
$wgLocalFileRepo['backend'] = $wgLocalFileRepo['name'] . '-backend';
|
2011-12-20 03:52:06 +00:00
|
|
|
}
|
|
|
|
|
foreach ( $wgForeignFileRepos as &$repo ) {
|
2011-12-22 01:06:19 +00:00
|
|
|
if ( !isset( $repo['directory'] ) && $repo['class'] === 'ForeignAPIRepo' ) {
|
|
|
|
|
$repo['directory'] = $wgUploadDirectory; // b/c
|
|
|
|
|
}
|
2011-12-20 03:52:06 +00:00
|
|
|
if ( !isset( $repo['backend'] ) ) {
|
2011-12-22 01:06:19 +00:00
|
|
|
$repo['backend'] = $repo['name'] . '-backend';
|
2011-12-20 03:52:06 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
unset( $repo ); // no global pollution; destroy reference
|
2009-11-06 15:38:47 +00:00
|
|
|
|
2011-10-15 20:30:37 +00:00
|
|
|
if ( is_null( $wgEnableAutoRotation ) ) {
|
|
|
|
|
// Only enable auto-rotation when the bitmap handler can rotate
|
|
|
|
|
$wgEnableAutoRotation = BitmapHandler::canRotate();
|
|
|
|
|
}
|
|
|
|
|
|
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
|
2013-04-20 22:49:30 +00:00
|
|
|
if ( is_array( $wgExtraNamespaces ) ) {
|
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
|
|
|
$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).
|
2012-02-07 21:30:41 +00:00
|
|
|
# Do the same for $wgDebugToolbar.
|
2011-01-06 21:00:17 +00:00
|
|
|
if ( $wgUseFileCache || $wgUseSquid ) {
|
|
|
|
|
$wgShowIPinHeader = false;
|
2012-02-07 21:30:41 +00:00
|
|
|
$wgDebugToolbar = false;
|
2011-01-06 21:00:17 +00:00
|
|
|
}
|
|
|
|
|
|
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
|
2013-04-20 22:49:30 +00:00
|
|
|
foreach ( $wgDisabledActions as $action ) {
|
2011-04-14 10:38:29 +00:00
|
|
|
$wgActions[$action] = 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
|
2013-02-24 07:15:11 +00:00
|
|
|
$wgFileExtensions = array_values( array_diff ( $wgFileExtensions, $wgFileBlacklist ) );
|
2011-01-06 21:00:17 +00:00
|
|
|
|
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
|
2013-02-03 20:05:24 +00:00
|
|
|
$wgLogTypes[] = 'newusers';
|
|
|
|
|
$wgLogNames['newusers'] = 'newuserlogpage';
|
|
|
|
|
$wgLogHeaders['newusers'] = 'newuserlogpagetext';
|
2012-06-18 14:46:47 +00:00
|
|
|
$wgLogActionsHandlers['newusers/newusers'] = 'NewUsersLogFormatter';
|
|
|
|
|
$wgLogActionsHandlers['newusers/create'] = 'NewUsersLogFormatter';
|
|
|
|
|
$wgLogActionsHandlers['newusers/create2'] = 'NewUsersLogFormatter';
|
2013-01-22 20:03:44 +00:00
|
|
|
$wgLogActionsHandlers['newusers/byemail'] = 'NewUsersLogFormatter';
|
2012-06-18 14:46:47 +00:00
|
|
|
$wgLogActionsHandlers['newusers/autocreate'] = 'NewUsersLogFormatter';
|
2011-01-06 21:00:17 +00:00
|
|
|
}
|
|
|
|
|
|
2011-06-16 05:13:29 +00:00
|
|
|
if ( $wgCookieSecure === 'detect' ) {
|
2012-09-27 00:20:15 +00:00
|
|
|
$wgCookieSecure = ( WebRequest::detectProtocol() === 'https' );
|
2011-06-16 05:13:29 +00:00
|
|
|
}
|
|
|
|
|
|
2012-02-21 16:48:46 +00:00
|
|
|
// Disable MWDebug for command line mode, this prevents MWDebug from eating up
|
|
|
|
|
// all the memory from logging SQL queries on maintenance scripts
|
|
|
|
|
global $wgCommandLineMode;
|
|
|
|
|
if ( $wgDebugToolbar && !$wgCommandLineMode ) {
|
2012-01-16 13:44:46 +00:00
|
|
|
MWDebug::init();
|
|
|
|
|
}
|
2011-12-04 18:29:57 +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
|
|
|
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' );
|
2011-05-30 00:18:10 +00:00
|
|
|
MWExceptionHandler::installHandler();
|
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
|
|
|
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/ProxyTools.php" );
|
2011-05-27 06:25:21 +00:00
|
|
|
require_once( "$IP/includes/normal/UtfNormalDefines.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
|
|
|
wfProfileOut( $fname . '-includes' );
|
|
|
|
|
}
|
2011-05-10 19:03:23 +00:00
|
|
|
|
2012-10-08 04:21:08 +00:00
|
|
|
if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
|
|
|
|
|
$wgSecureLogin = false;
|
|
|
|
|
wfWarn( 'Secure login was enabled on a server that only supports HTTP or HTTPS. Disabling secure login.' );
|
|
|
|
|
}
|
|
|
|
|
|
2012-05-26 03:19:55 +00:00
|
|
|
# Now that GlobalFunctions is loaded, set defaults that depend
|
|
|
|
|
# on it.
|
|
|
|
|
if ( $wgTmpDirectory === false ) {
|
|
|
|
|
$wgTmpDirectory = wfTempDir();
|
|
|
|
|
}
|
|
|
|
|
|
Per CR on r44412 and my promise in the commit summary of r94990, stop abusing $wgInternalServer (intended for Squid URLs) for IRC/e-mail URLs and introduce $wgCanonicalServer for these purposes instead. This revision introduces two new hooks for WMF hacks, in exchange for making the core code saner.
* Introduce $wgCanonicalServer, which should typically be a fully qualified version of $wgServer but in practice can be anything that you'd like to be used in IRC/e-mail notifs
** Default value is $wgServer, expanded to http:// if protocol-relative
** This means you can easily set HTTPS as the 'default' protocol to use in IRC and e-mail notifs by setting $wgCanonicalServer to https://example.com
* Introduce Title::getCanonicalURL(). Similar to getInternalURL(), including a hook for WMF usage (which will be needed as long as secure.wikimedia.org is used)
** Also add escapeCanonicalURL(). Due to some ridiculous accident of history, the other escapeFooURL() functions don't have a $variant parameter; I decided not to follow that bad example
* Reinstate the spirit of r44406 and r44412: instead of calling getInternalURL() (or getCanonicalURL()) and regexing the title parameter out, obtain the path to index.php using $wgCanonicalServer . $wgScript and append params to that. Sadly, we need to add a hook here to support the secure server hack for WMF, but that's the price of saner code in this case
* Introduce the {{canonicalurl:}} and {{canonicalurle:}} parser functions, which work just like {{fullurl:}} and {{fullurle:}} except that they use getCanonicalURL() instead of getFullURL()
* Use {{canonicalurl:}} in the enotif_body message, fixing bug 29993 (protocol-relative URLs appear in e-mail notifications)
2011-08-19 11:23:17 +00:00
|
|
|
if ( $wgCanonicalServer === false ) {
|
|
|
|
|
$wgCanonicalServer = wfExpandUrl( $wgServer, PROTO_HTTP );
|
|
|
|
|
}
|
|
|
|
|
|
2012-04-06 20:27:10 +00:00
|
|
|
// Initialize $wgHTCPMulticastRouting from backwards-compatible settings
|
|
|
|
|
if ( !$wgHTCPMulticastRouting && $wgHTCPMulticastAddress ) {
|
|
|
|
|
$wgHTCPMulticastRouting = array(
|
|
|
|
|
'' => array(
|
|
|
|
|
'host' => $wgHTCPMulticastAddress,
|
|
|
|
|
'port' => $wgHTCPPort,
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
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.
|
|
|
|
|
*/
|
2013-03-24 10:01:51 +00:00
|
|
|
if ( is_null( $wgLocaltimezone ) ) {
|
2011-05-15 13:56:12 +00:00
|
|
|
wfSuppressWarnings();
|
|
|
|
|
$wgLocaltimezone = date_default_timezone_get();
|
|
|
|
|
wfRestoreWarnings();
|
|
|
|
|
}
|
2010-01-08 01:48:53 +00:00
|
|
|
|
2011-05-15 13:42:10 +00:00
|
|
|
date_default_timezone_set( $wgLocaltimezone );
|
2013-04-20 22:49:30 +00:00
|
|
|
if ( is_null( $wgLocalTZoffset ) ) {
|
2011-05-16 09:40:19 +00:00
|
|
|
$wgLocalTZoffset = date( 'Z' ) / 60;
|
2011-05-15 13:42:10 +00:00
|
|
|
}
|
|
|
|
|
|
2004-02-14 12:37:25 +00:00
|
|
|
# Useful debug output
|
2008-12-23 23:34:35 +00:00
|
|
|
if ( $wgCommandLineMode ) {
|
2011-07-05 15:05:14 +00:00
|
|
|
$wgRequest = new FauxRequest( array() );
|
|
|
|
|
|
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-07-05 15:05:14 +00:00
|
|
|
# Can't stub this one, it sets up $_GET and $_REQUEST in its constructor
|
|
|
|
|
$wgRequest = new WebRequest;
|
|
|
|
|
|
2012-08-07 06:33:41 +00:00
|
|
|
$debug = "\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n";
|
2010-01-27 17:21:18 +00:00
|
|
|
|
|
|
|
|
if ( $wgDebugPrintHttpHeaders ) {
|
2012-03-12 19:01:44 +00:00
|
|
|
$debug .= "HTTP HEADERS:\n";
|
2011-02-19 13:09:17 +00:00
|
|
|
|
|
|
|
|
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
|
|
|
}
|
2012-03-12 19:01:44 +00:00
|
|
|
wfDebug( $debug );
|
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();
|
2012-04-06 19:45:49 +00:00
|
|
|
$wgLangConvMemc = wfGetLangConverterCacheStorage();
|
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
|
|
|
wfSetupSession();
|
|
|
|
|
$wgSessionStarted = true;
|
|
|
|
|
} else {
|
|
|
|
|
$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
|
|
|
|
|
|
|
|
/**
|
2012-02-09 17:41:50 +00:00
|
|
|
* @var $wgLang Language
|
2011-03-24 00:48:22 +00:00
|
|
|
*/
|
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
|
|
|
|
|
|
|
|
/**
|
2012-02-09 17:41:50 +00:00
|
|
|
* @var $wgParser Parser
|
2011-03-24 00:48:22 +00:00
|
|
|
*/
|
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;
|
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 ) ) {
|
2013-04-20 22:49:30 +00:00
|
|
|
if ( is_object( $func[0] ) ) {
|
2011-01-14 21:42:38 +00:00
|
|
|
$profName = $fname . '-extensions-' . get_class( $func[0] ) . '::' . $func[1];
|
2013-04-20 22:49:30 +00:00
|
|
|
} else {
|
2011-01-14 21:42:38 +00:00
|
|
|
$profName = $fname . '-extensions-' . implode( '::', $func );
|
2013-04-20 22:49:30 +00:00
|
|
|
}
|
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 );
|