X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSetup.php;h=85ff3f32f663346262c697eeb67e9ba217ecdc98;hb=43f904b51a746d7f71ea2ab9951c5c98d269765b;hp=c86372286a515dd28ad09cf5977534a882757362;hpb=4a90614750f43532b0760f3f79c900053002645a;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Setup.php b/includes/Setup.php index c86372286a..85ff3f32f6 100644 --- a/includes/Setup.php +++ b/includes/Setup.php @@ -264,6 +264,7 @@ foreach ( $wgForeignFileRepos as &$repo ) { } unset( $repo ); // no global pollution; destroy reference +$rcMaxAgeDays = $wgRCMaxAge / ( 3600 * 24 ); if ( $wgRCFilterByAge ) { // Trim down $wgRCLinkDays so that it only lists links which are valid // as determined by $wgRCMaxAge. @@ -273,12 +274,22 @@ if ( $wgRCFilterByAge ) { // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed for ( $i = 0; $i < count( $wgRCLinkDays ); $i++ ) { // @codingStandardsIgnoreEnd - if ( $wgRCLinkDays[$i] >= $wgRCMaxAge / ( 3600 * 24 ) ) { + if ( $wgRCLinkDays[$i] >= $rcMaxAgeDays ) { $wgRCLinkDays = array_slice( $wgRCLinkDays, 0, $i + 1, false ); break; } } } +// Ensure that default user options are not invalid, since that breaks Special:Preferences +$wgDefaultUserOptions['rcdays'] = min( + $wgDefaultUserOptions['rcdays'], + ceil( $rcMaxAgeDays ) +); +$wgDefaultUserOptions['watchlistdays'] = min( + $wgDefaultUserOptions['watchlistdays'], + ceil( $rcMaxAgeDays ) +); +unset( $rcMaxAgeDays ); if ( $wgSkipSkin ) { $wgSkipSkins[] = $wgSkipSkin; @@ -486,10 +497,25 @@ if ( $wgMaximalPasswordLength !== false ) { $wgPasswordPolicy['policies']['default']['MaximalPasswordLength'] = $wgMaximalPasswordLength; } -// Backwards compatibility with deprecated alias -// Must be before call to wfSetupSession() -if ( $wgSessionsInMemcached ) { - $wgSessionsInObjectCache = true; +// Backwards compatibility warning +if ( !$wgSessionsInObjectCache && !$wgSessionsInMemcached ) { + wfDeprecated( '$wgSessionsInObjectCache = false', '1.27' ); + if ( $wgSessionHandler ) { + wfDeprecated( '$wgSessionsHandler', '1.27' ); + } + $cacheType = get_class( ObjectCache::getInstance( $wgSessionCacheType ) ); + wfDebugLog( + "Session data will be stored in \"$cacheType\" cache with " . + "expiry $wgObjectCacheSessionExpiry seconds" + ); +} +$wgSessionsInObjectCache = true; + +if ( $wgPHPSessionHandling !== 'enable' && + $wgPHPSessionHandling !== 'warn' && + $wgPHPSessionHandling !== 'disable' +) { + $wgPHPSessionHandling = 'warn'; } Profiler::instance()->scopedProfileOut( $ps_default ); @@ -512,13 +538,15 @@ require_once "$IP/includes/compat/normal/UtfNormalUtil.php"; $ps_validation = Profiler::instance()->scopedProfileIn( $fname . '-validation' ); // T48998: Bail out early if $wgArticlePath is non-absolute -if ( !preg_match( '/^(https?:\/\/|\/)/', $wgArticlePath ) ) { - throw new FatalError( - 'If you use a relative URL for $wgArticlePath, it must start ' . - 'with a slash (/).

See ' . - '' . - 'https://www.mediawiki.org/wiki/Manual:$wgArticlePath.' - ); +foreach ( array( 'wgArticlePath', 'wgVariantArticlePath' ) as $varName ) { + if ( $$varName && !preg_match( '/^(https?:\/\/|\/)/', $$varName ) ) { + throw new FatalError( + "If you use a relative URL for \$$varName, it must start " . + 'with a slash (/).

See ' . + "" . + "https://www.mediawiki.org/wiki/Manual:\$$varName." + ); + } } Profiler::instance()->scopedProfileOut( $ps_validation ); @@ -606,15 +634,13 @@ if ( !$wgDBerrorLogTZ ) { $wgDBerrorLogTZ = $wgLocaltimezone; } +// initialize the request object in $wgRequest +$wgRequest = RequestContext::getMain()->getRequest(); // BackCompat + // Useful debug output if ( $wgCommandLineMode ) { - $wgRequest = new FauxRequest( array() ); - wfDebug( "\n\nStart command line script $self\n" ); } else { - // Can't stub this one, it sets up $_GET and $_REQUEST in its constructor - $wgRequest = new WebRequest; - $debug = "\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n"; if ( $wgDebugPrintHttpHeaders ) { @@ -646,20 +672,6 @@ Profiler::instance()->scopedProfileOut( $ps_memcached ); // Most of the config is out, some might want to run hooks here. Hooks::run( 'SetupAfterCache' ); -$ps_session = Profiler::instance()->scopedProfileIn( $fname . '-session' ); - -if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) { - // If session.auto_start is there, we can't touch session name - if ( !wfIniGetBool( 'session.auto_start' ) ) { - session_name( $wgSessionName ? $wgSessionName : $wgCookiePrefix . '_session' ); - } - - if ( $wgRequest->checkSessionCookie() || isset( $_COOKIE[$wgCookiePrefix . 'Token'] ) ) { - wfSetupSession(); - } -} - -Profiler::instance()->scopedProfileOut( $ps_session ); $ps_globals = Profiler::instance()->scopedProfileIn( $fname . '-globals' ); /** @@ -672,6 +684,65 @@ $wgContLang->initContLang(); // Now that variant lists may be available... $wgRequest->interpolateTitle(); +if ( !is_object( $wgAuth ) ) { + $wgAuth = new AuthPlugin; + Hooks::run( 'AuthPluginSetup', array( &$wgAuth ) ); +} + +// Set up the session +$ps_session = Profiler::instance()->scopedProfileIn( $fname . '-session' ); +/** + * @var MediaWiki\\Session\\SessionId|null $wgInitialSessionId The persistent + * session ID (if any) loaded at startup + */ +$wgInitialSessionId = null; +if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) { + // If session.auto_start is there, we can't touch session name + if ( $wgPHPSessionHandling !== 'disable' && !wfIniGetBool( 'session.auto_start' ) ) { + session_name( $wgSessionName ? $wgSessionName : $wgCookiePrefix . '_session' ); + } + + // Create the SessionManager singleton and set up our session handler + MediaWiki\Session\PHPSessionHandler::install( + MediaWiki\Session\SessionManager::singleton() + ); + + // Initialize the session + try { + $session = MediaWiki\Session\SessionManager::getGlobalSession(); + } catch ( OverflowException $ex ) { + if ( isset( $ex->sessionInfos ) && count( $ex->sessionInfos ) >= 2 ) { + // The exception is because the request had multiple possible + // sessions tied for top priority. Report this to the user. + $list = array(); + foreach ( $ex->sessionInfos as $info ) { + $list[] = $info->getProvider()->describe( $wgContLang ); + } + $list = $wgContLang->listToText( $list ); + throw new HttpError( 400, + Message::newFromKey( 'sessionmanager-tie', $list )->inLanguage( $wgContLang )->plain() + ); + } + + // Not the one we want, rethrow + throw $ex; + } + + if ( $session->isPersistent() ) { + $wgInitialSessionId = $session->getSessionId(); + } + + $session->renew(); + if ( MediaWiki\Session\PHPSessionHandler::isEnabled() && + ( $session->isPersistent() || $session->shouldRememberUser() ) + ) { + // Start the PHP-session for backwards compatibility + session_id( $session->getId() ); + MediaWiki\quietCall( 'session_start' ); + } +} +Profiler::instance()->scopedProfileOut( $ps_session ); + /** * @var User $wgUser */ @@ -692,11 +763,6 @@ $wgOut = RequestContext::getMain()->getOutput(); // BackCompat */ $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], array( $wgParserConf ) ); -if ( !is_object( $wgAuth ) ) { - $wgAuth = new AuthPlugin; - Hooks::run( 'AuthPluginSetup', array( &$wgAuth ) ); -} - /** * @var Title $wgTitle */ @@ -728,6 +794,16 @@ foreach ( $wgExtensionFunctions as $func ) { Profiler::instance()->scopedProfileOut( $ps_ext_func ); } +// If the session user has a 0 id but a valid name, that means we need to +// autocreate it. +$sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser(); +if ( $sessionUser->getId() === 0 && User::isValidUserName( $sessionUser->getName() ) ) { + $ps_autocreate = Profiler::instance()->scopedProfileIn( $fname . '-autocreate' ); + MediaWiki\Session\SessionManager::autoCreateUser( $sessionUser ); + Profiler::instance()->scopedProfileOut( $ps_autocreate ); +} +unset( $sessionUser ); + wfDebug( "Fully initialised\n" ); $wgFullyInitialised = true;