From: jenkins-bot Date: Mon, 23 Sep 2019 15:28:03 +0000 (+0000) Subject: Merge "Add config for serving main Page from the domain root" X-Git-Tag: 1.34.0-rc.0~121 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=9e8439e79d67788916d488f645108f79016d9aca;hp=-c;ds=sidebyside Merge "Add config for serving main Page from the domain root" --- 9e8439e79d67788916d488f645108f79016d9aca diff --combined includes/DefaultSettings.php index fd1affce3d,6e01efc18a..1068700499 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@@ -2733,17 -2733,16 +2733,17 @@@ $wgExtensionInfoMTime = false * although they are sometimes still referred to as Squid settings for * historical reasons. * - * Achieving a high hit ratio with an HTTP proxy requires special - * configuration. See https://www.mediawiki.org/wiki/Manual:Squid_caching for - * more details. + * Achieving a high hit ratio with an HTTP proxy requires special configuration. + * See https://www.mediawiki.org/wiki/Manual:Performance_tuning#Page_view_caching + * for more details. * * @{ */ /** * Enable/disable CDN. - * See https://www.mediawiki.org/wiki/Manual:Squid_caching + * + * See https://www.mediawiki.org/wiki/Manual:Performance_tuning#Page_view_caching * * @since 1.34 Renamed from $wgUseSquid. */ @@@ -4445,8 -4444,7 +4445,8 @@@ $wgCentralIdLookupProvider = 'local' * The checks supported by core are: * - MinimalPasswordLength - Minimum length a user can set. * - MinimumPasswordLengthToLogin - Passwords shorter than this will - * not be allowed to login, regardless if it is correct. + * not be allowed to login, or offered a chance to reset their password + * as part of the login workflow, regardless if it is correct. * - MaximalPasswordLength - maximum length password a user is allowed * to attempt. Prevents DoS attacks with pbkdf2. * - PasswordCannotMatchUsername - Password cannot match the username. @@@ -4992,8 -4990,6 +4992,8 @@@ $wgBlockAllowsUTEdit = true /** * Allow sysops to ban users from accessing Emailuser + * @deprecated since 1.34; `$wgGroupPermissions['sysop']['blockemail'] = true;` + * should be used instead */ $wgSysopEmailBans = true; @@@ -9094,6 -9090,13 +9094,13 @@@ $wgSpecialSearchFormOptions = [] */ $wgNativeImageLazyLoading = false; + /** + * Option to whether serve the main page as the domain root + * @since 1.34 + * @var bool + */ + $wgMainPageIsDomainRoot = false; + /** * For really cool vim folding this needs to be at the end: * vim: foldmarker=@{,@} foldmethod=marker diff --combined includes/Title.php index 9843e81962,f9b5d0f1ee..6c15a062b0 --- a/includes/Title.php +++ b/includes/Title.php @@@ -1561,32 -1561,14 +1561,32 @@@ class Title implements LinkTarget, IDBA * Get a Title object associated with the talk page of this article * * @deprecated since 1.34, use getTalkPageIfDefined() or NamespaceInfo::getTalkPage() - * with NamespaceInfo::canHaveTalkPage(). + * with NamespaceInfo::canHaveTalkPage(). Note that the new method will + * throw if asked for the talk page of a section-only link, or of an interwiki + * link. * @return Title The object for the talk page * @throws MWException if $target doesn't have talk pages, e.g. because it's in NS_SPECIAL * or because it's a relative link, or an interwiki link. */ public function getTalkPage() { - return self::castFromLinkTarget( - MediaWikiServices::getInstance()->getNamespaceInfo()->getTalkPage( $this ) ); + // NOTE: The equivalent code in NamespaceInfo is less lenient about producing invalid titles. + // Instead of failing on invalid titles, let's just log the issue for now. + // See the discussion on T227817. + + // Is this the same title? + $talkNS = MediaWikiServices::getInstance()->getNamespaceInfo()->getTalk( $this->mNamespace ); + if ( $this->mNamespace == $talkNS ) { + return $this; + } + + $title = self::makeTitle( $talkNS, $this->mDbkeyform ); + + $this->warnIfPageCannotExist( $title, __METHOD__ ); + + return $title; + // TODO: replace the above with the code below: + // return self::castFromLinkTarget( + // MediaWikiServices::getInstance()->getNamespaceInfo()->getTalkPage( $this ) ); } /** @@@ -1614,51 -1596,8 +1614,51 @@@ * @return Title The object for the subject page */ public function getSubjectPage() { - return self::castFromLinkTarget( - MediaWikiServices::getInstance()->getNamespaceInfo()->getSubjectPage( $this ) ); + // Is this the same title? + $subjectNS = MediaWikiServices::getInstance()->getNamespaceInfo() + ->getSubject( $this->mNamespace ); + if ( $this->mNamespace == $subjectNS ) { + return $this; + } + // NOTE: The equivalent code in NamespaceInfo is less lenient about producing invalid titles. + // Instead of failing on invalid titles, let's just log the issue for now. + // See the discussion on T227817. + $title = self::makeTitle( $subjectNS, $this->mDbkeyform ); + + $this->warnIfPageCannotExist( $title, __METHOD__ ); + + return $title; + // TODO: replace the above with the code below: + // return self::castFromLinkTarget( + // MediaWikiServices::getInstance()->getNamespaceInfo()->getSubjectPage( $this ) ); + } + + /** + * @param Title $title + * @param string $method + * + * @return bool whether a warning was issued + */ + private function warnIfPageCannotExist( Title $title, $method ) { + if ( $this->getText() == '' ) { + wfLogWarning( + $method . ': called on empty title ' . $this->getFullText() . ', returning ' + . $title->getFullText() + ); + + return true; + } + + if ( $this->getInterwiki() !== '' ) { + wfLogWarning( + $method . ': called on interwiki title ' . $this->getFullText() . ', returning ' + . $title->getFullText() + ); + + return true; + } + + return false; } /** @@@ -1671,23 -1610,8 +1671,23 @@@ * @return Title */ public function getOtherPage() { - return self::castFromLinkTarget( - MediaWikiServices::getInstance()->getNamespaceInfo()->getAssociatedPage( $this ) ); + // NOTE: Depend on the methods in this class instead of their equivalent in NamespaceInfo, + // until their semantics has become exactly the same. + // See the discussion on T227817. + if ( $this->isSpecialPage() ) { + throw new MWException( 'Special pages cannot have other pages' ); + } + if ( $this->isTalkPage() ) { + return $this->getSubjectPage(); + } else { + if ( !$this->canHaveTalkPage() ) { + throw new MWException( "{$this->getPrefixedText()} does not have an other page" ); + } + return $this->getTalkPage(); + } + // TODO: replace the above with the code below: + // return self::castFromLinkTarget( + // MediaWikiServices::getInstance()->getNamespaceInfo()->getAssociatedPage( $this ) ); } /** @@@ -2062,7 -1986,7 +2062,7 @@@ * * @see self::getLocalURL for the arguments. * @see wfExpandUrl - * @param string|string[] $query + * @param string|array $query * @param string|string[]|bool $query2 * @param string|int|null $proto Protocol type to use in URL * @return string The URL @@@ -2123,7 -2047,7 +2123,7 @@@ * valid to link, locally, to the current Title. * @see self::newFromText to produce a Title object. * - * @param string|string[] $query An optional query string, + * @param string|array $query An optional query string, * not used for interwiki links. Can be specified as an associative array as well, * e.g., [ 'action' => 'edit' ] (keys and values will be URL-escaped). * Some query patterns will trigger various shorturl path replacements. @@@ -2137,7 -2061,7 +2137,7 @@@ * @return string String of the URL. */ public function getLocalURL( $query = '', $query2 = false ) { - global $wgArticlePath, $wgScript, $wgServer, $wgRequest; + global $wgArticlePath, $wgScript, $wgServer, $wgRequest, $wgMainPageIsDomainRoot; $query = self::fixUrlQueryArgs( $query, $query2 ); @@@ -2214,6 -2138,11 +2214,11 @@@ $url = $wgServer . $url; } } + + if ( $wgMainPageIsDomainRoot && $this->isMainPage() && $query === '' ) { + return '/'; + } + // Avoid PHP 7.1 warning from passing $this by reference $titleRef = $this; Hooks::run( 'GetLocalURL', [ &$titleRef, &$url, $query ] ); @@@ -2258,7 -2187,7 +2263,7 @@@ * protocol-relative, the URL will be expanded to http:// * * @see self::getLocalURL for the arguments. - * @param string|string[] $query + * @param string|array $query * @param string|bool $query2 Deprecated * @return string The URL */ @@@ -2281,7 -2210,7 +2286,7 @@@ * NOTE: Unlike getInternalURL(), the canonical URL includes the fragment * * @see self::getLocalURL for the arguments. - * @param string|string[] $query + * @param string|array $query * @param string|bool $query2 Deprecated * @return string The URL * @since 1.18