X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FTitle.php;h=c4fe858ac8ba5b715d17d654baf93bbb0f9e65fb;hb=a52f0fdb944dc72762abb05518befafdfe031a86;hp=2203ccbc0b6927e66f1d207828ce29f38bc8c1f6;hpb=090f6daa1b388b772a724984debf7ba287a8bebe;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Title.php b/includes/Title.php index 2203ccbc0b..c4fe858ac8 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -618,7 +618,7 @@ class Title implements LinkTarget, IDBAccessObject { // NOTE: ideally, this would just call makeTitle() and then isValid(), // but presently, that means more overhead on a potential performance hotspot. - if ( !MWNamespace::exists( $ns ) ) { + if ( !MediaWikiServices::getInstance()->getNamespaceInfo()->exists( $ns ) ) { return null; } @@ -820,7 +820,8 @@ class Title implements LinkTarget, IDBAccessObject { $canonicalNamespace = false ) { if ( $canonicalNamespace ) { - $namespace = MWNamespace::getCanonicalName( $ns ); + $namespace = MediaWikiServices::getInstance()->getNamespaceInfo()-> + getCanonicalName( $ns ); } else { $namespace = MediaWikiServices::getInstance()->getContentLanguage()->getNsText( $ns ); } @@ -862,13 +863,13 @@ class Title implements LinkTarget, IDBAccessObject { * @return bool */ public function isValid() { - if ( !MWNamespace::exists( $this->mNamespace ) ) { + $services = MediaWikiServices::getInstance(); + if ( !$services->getNamespaceInfo()->exists( $this->mNamespace ) ) { return false; } try { - $parser = MediaWikiServices::getInstance()->getTitleParser(); - $parser->parseTitle( $this->mDbkeyform, $this->mNamespace ); + $services->getTitleParser()->parseTitle( $this->mDbkeyform, $this->mNamespace ); return true; } catch ( MalformedTitleException $ex ) { return false; @@ -1086,7 +1087,8 @@ class Title implements LinkTarget, IDBAccessObject { if ( $this->isExternal() ) { // This probably shouldn't even happen, except for interwiki transclusion. // If possible, use the canonical name for the foreign namespace. - $nsText = MWNamespace::getCanonicalName( $this->mNamespace ); + $nsText = MediaWikiServices::getInstance()->getNamespaceInfo()-> + getCanonicalName( $this->mNamespace ); if ( $nsText !== false ) { return $nsText; } @@ -1107,8 +1109,9 @@ class Title implements LinkTarget, IDBAccessObject { * @return string Namespace text */ public function getSubjectNsText() { - return MediaWikiServices::getInstance()->getContentLanguage()-> - getNsText( MWNamespace::getSubject( $this->mNamespace ) ); + $services = MediaWikiServices::getInstance(); + return $services->getContentLanguage()-> + getNsText( $services->getNamespaceInfo()->getSubject( $this->mNamespace ) ); } /** @@ -1117,20 +1120,22 @@ class Title implements LinkTarget, IDBAccessObject { * @return string Namespace text */ public function getTalkNsText() { - return MediaWikiServices::getInstance()->getContentLanguage()-> - getNsText( MWNamespace::getTalk( $this->mNamespace ) ); + $services = MediaWikiServices::getInstance(); + return $services->getContentLanguage()-> + getNsText( $services->getNamespaceInfo()->getTalk( $this->mNamespace ) ); } /** * Can this title have a corresponding talk page? * - * @see MWNamespace::hasTalkNamespace + * @see NamespaceInfo::hasTalkNamespace * @since 1.30 * * @return bool True if this title either is a talk page or can have a talk page associated. */ public function canHaveTalkPage() { - return MWNamespace::hasTalkNamespace( $this->mNamespace ); + return MediaWikiServices::getInstance()->getNamespaceInfo()-> + hasTalkNamespace( $this->mNamespace ); } /** @@ -1148,7 +1153,8 @@ class Title implements LinkTarget, IDBAccessObject { * @return bool */ public function isWatchable() { - return !$this->isExternal() && MWNamespace::isWatchable( $this->mNamespace ); + return !$this->isExternal() && MediaWikiServices::getInstance()->getNamespaceInfo()-> + isWatchable( $this->mNamespace ); } /** @@ -1209,7 +1215,8 @@ class Title implements LinkTarget, IDBAccessObject { * @since 1.19 */ public function inNamespace( $ns ) { - return MWNamespace::equals( $this->mNamespace, $ns ); + return MediaWikiServices::getInstance()->getNamespaceInfo()-> + equals( $this->mNamespace, $ns ); } /** @@ -1248,7 +1255,8 @@ class Title implements LinkTarget, IDBAccessObject { * @return bool */ public function hasSubjectNamespace( $ns ) { - return MWNamespace::subjectEquals( $this->mNamespace, $ns ); + return MediaWikiServices::getInstance()->getNamespaceInfo()-> + subjectEquals( $this->mNamespace, $ns ); } /** @@ -1259,7 +1267,8 @@ class Title implements LinkTarget, IDBAccessObject { * @return bool */ public function isContentPage() { - return MWNamespace::isContent( $this->mNamespace ); + return MediaWikiServices::getInstance()->getNamespaceInfo()-> + isContent( $this->mNamespace ); } /** @@ -1269,7 +1278,10 @@ class Title implements LinkTarget, IDBAccessObject { * @return bool */ public function isMovable() { - if ( !MWNamespace::isMovable( $this->mNamespace ) || $this->isExternal() ) { + if ( + !MediaWikiServices::getInstance()->getNamespaceInfo()-> + isMovable( $this->mNamespace ) || $this->isExternal() + ) { // Interwiki title or immovable namespace. Hooks don't get to override here return false; } @@ -1299,7 +1311,8 @@ class Title implements LinkTarget, IDBAccessObject { * @return bool */ public function isSubpage() { - return MWNamespace::hasSubpages( $this->mNamespace ) + return MediaWikiServices::getInstance()->getNamespaceInfo()-> + hasSubpages( $this->mNamespace ) ? strpos( $this->getText(), '/' ) !== false : false; } @@ -1495,16 +1508,19 @@ class Title implements LinkTarget, IDBAccessObject { * @return bool */ public function isTalkPage() { - return MWNamespace::isTalk( $this->mNamespace ); + return MediaWikiServices::getInstance()->getNamespaceInfo()-> + isTalk( $this->mNamespace ); } /** * Get a Title object associated with the talk page of this article * + * @deprecated since 1.34, use NamespaceInfo::getTalkPage * @return Title The object for the talk page */ public function getTalkPage() { - return self::makeTitle( MWNamespace::getTalk( $this->mNamespace ), $this->mDbkeyform ); + return self::castFromLinkTarget( + MediaWikiServices::getInstance()->getNamespaceInfo()->getTalkPage( $this ) ); } /** @@ -1528,37 +1544,26 @@ class Title implements LinkTarget, IDBAccessObject { * Get a title object associated with the subject page of this * talk page * + * @deprecated since 1.34, use NamespaceInfo::getSubjectPage * @return Title The object for the subject page */ public function getSubjectPage() { - // Is this the same title? - $subjectNS = MWNamespace::getSubject( $this->mNamespace ); - if ( $this->mNamespace == $subjectNS ) { - return $this; - } - return self::makeTitle( $subjectNS, $this->mDbkeyform ); + return self::castFromLinkTarget( + MediaWikiServices::getInstance()->getNamespaceInfo()->getSubjectPage( $this ) ); } /** * Get the other title for this page, if this is a subject page * get the talk page, if it is a subject page get the talk page * + * @deprecated since 1.34, use NamespaceInfo::getAssociatedPage * @since 1.25 * @throws MWException If the page doesn't have an other page * @return Title */ public function getOtherPage() { - 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(); - } + return self::castFromLinkTarget( + MediaWikiServices::getInstance()->getNamespaceInfo()->getAssociatedPage( $this ) ); } /** @@ -1733,7 +1738,10 @@ class Title implements LinkTarget, IDBAccessObject { * @since 1.20 */ public function getRootText() { - if ( !MWNamespace::hasSubpages( $this->mNamespace ) ) { + if ( + !MediaWikiServices::getInstance()->getNamespaceInfo()-> + hasSubpages( $this->mNamespace ) + ) { return $this->getText(); } @@ -1769,7 +1777,10 @@ class Title implements LinkTarget, IDBAccessObject { */ public function getBaseText() { $text = $this->getText(); - if ( !MWNamespace::hasSubpages( $this->mNamespace ) ) { + if ( + !MediaWikiServices::getInstance()->getNamespaceInfo()-> + hasSubpages( $this->mNamespace ) + ) { return $text; } @@ -1810,7 +1821,10 @@ class Title implements LinkTarget, IDBAccessObject { * @return string Subpage name */ public function getSubpageText() { - if ( !MWNamespace::hasSubpages( $this->mNamespace ) ) { + if ( + !MediaWikiServices::getInstance()->getNamespaceInfo()-> + hasSubpages( $this->mNamespace ) + ) { return $this->mTextform; } $parts = explode( '/', $this->mTextform ); @@ -2877,7 +2891,10 @@ class Title implements LinkTarget, IDBAccessObject { * @return bool */ public function hasSubpages() { - if ( !MWNamespace::hasSubpages( $this->mNamespace ) ) { + if ( + !MediaWikiServices::getInstance()->getNamespaceInfo()-> + hasSubpages( $this->mNamespace ) + ) { # Duh return false; } @@ -2905,7 +2922,10 @@ class Title implements LinkTarget, IDBAccessObject { * doesn't allow subpages */ public function getSubpages( $limit = -1 ) { - if ( !MWNamespace::hasSubpages( $this->mNamespace ) ) { + if ( + !MediaWikiServices::getInstance()->getNamespaceInfo()-> + hasSubpages( $this->mNamespace ) + ) { return []; } @@ -3139,7 +3159,8 @@ class Title implements LinkTarget, IDBAccessObject { * @return string Containing capitalized title */ public static function capitalize( $text, $ns = NS_MAIN ) { - if ( MWNamespace::isCapitalized( $ns ) ) { + $services = MediaWikiServices::getInstance(); + if ( $services->getNamespaceInfo()->isCapitalized( $ns ) ) { return MediaWikiServices::getInstance()->getContentLanguage()->ucfirst( $text ); } else { return $text; @@ -3445,19 +3466,10 @@ class Title implements LinkTarget, IDBAccessObject { array $changeTags = [] ) { global $wgUser; - $err = $this->isValidMoveOperation( $nt, $auth, $reason ); - if ( is_array( $err ) ) { - // Auto-block user's IP if the account was "hard" blocked - $wgUser->spreadAnyEditBlock(); - return $err; - } - // Check suppressredirect permission - if ( $auth && !$wgUser->isAllowed( 'suppressredirect' ) ) { - $createRedirect = true; - } $mp = new MovePage( $this, $nt ); - $status = $mp->move( $wgUser, $reason, $createRedirect, $changeTags ); + $method = $auth ? 'moveIfAllowed' : 'move'; + $status = $mp->$method( $wgUser, $reason, $createRedirect, $changeTags ); if ( $status->isOK() ) { return true; } else { @@ -3468,6 +3480,7 @@ class Title implements LinkTarget, IDBAccessObject { /** * Move this page's subpages to be subpages of $nt * + * @deprecated since 1.34, use MovePage instead * @param Title $nt Move target * @param bool $auth Whether $wgUser's permissions should be checked * @param string $reason The reason for the move @@ -3482,7 +3495,6 @@ class Title implements LinkTarget, IDBAccessObject { public function moveSubpages( $nt, $auth = true, $reason = '', $createRedirect = true, array $changeTags = [] ) { - global $wgMaximumMovedPages; // Check permissions if ( !$this->userCan( 'move-subpages' ) ) { return [ @@ -3490,57 +3502,33 @@ class Title implements LinkTarget, IDBAccessObject { ]; } // Do the source and target namespaces support subpages? - if ( !MWNamespace::hasSubpages( $this->mNamespace ) ) { + $nsInfo = MediaWikiServices::getInstance()->getNamespaceInfo(); + if ( !$nsInfo->hasSubpages( $this->mNamespace ) ) { return [ - [ 'namespace-nosubpages', MWNamespace::getCanonicalName( $this->mNamespace ) ], + [ 'namespace-nosubpages', $nsInfo->getCanonicalName( $this->mNamespace ) ], ]; } - if ( !MWNamespace::hasSubpages( $nt->getNamespace() ) ) { + if ( !$nsInfo->hasSubpages( $nt->getNamespace() ) ) { return [ - [ 'namespace-nosubpages', MWNamespace::getCanonicalName( $nt->getNamespace() ) ], + [ 'namespace-nosubpages', $nsInfo->getCanonicalName( $nt->getNamespace() ) ], ]; } - $subpages = $this->getSubpages( $wgMaximumMovedPages + 1 ); - $retval = []; - $count = 0; - foreach ( $subpages as $oldSubpage ) { - $count++; - if ( $count > $wgMaximumMovedPages ) { - $retval[$oldSubpage->getPrefixedText()] = [ - [ 'movepage-max-pages', $wgMaximumMovedPages ], - ]; - break; - } + global $wgUser; + $mp = new MovePage( $this, $nt ); + $method = $auth ? 'moveSubpagesIfAllowed' : 'moveSubpages'; + $result = $mp->$method( $wgUser, $reason, $createRedirect, $changeTags ); - // We don't know whether this function was called before - // or after moving the root page, so check both - // $this and $nt - if ( $oldSubpage->getArticleID() == $this->getArticleID() - || $oldSubpage->getArticleID() == $nt->getArticleID() - ) { - // When moving a page to a subpage of itself, - // don't move it twice - continue; - } - $newPageName = preg_replace( - '#^' . preg_quote( $this->mDbkeyform, '#' ) . '#', - StringUtils::escapeRegexReplacement( $nt->getDBkey() ), # T23234 - $oldSubpage->getDBkey() ); - if ( $oldSubpage->isTalkPage() ) { - $newNs = $nt->getTalkPage()->getNamespace(); - } else { - $newNs = $nt->getSubjectPage()->getNamespace(); - } - # T16385: we need makeTitleSafe because the new page names may - # be longer than 255 characters. - $newSubpage = self::makeTitleSafe( $newNs, $newPageName ); + if ( !$result->isOk() ) { + return $result->getErrorsArray(); + } - $success = $oldSubpage->moveTo( $newSubpage, $auth, $reason, $createRedirect, $changeTags ); - if ( $success === true ) { - $retval[$oldSubpage->getPrefixedText()] = $newSubpage->getPrefixedText(); + $retval = []; + foreach ( $result->getValue() as $key => $status ) { + if ( $status->isOK() ) { + $retval[$key] = $status->getValue(); } else { - $retval[$oldSubpage->getPrefixedText()] = $success; + $retval[$key] = $status->getErrorsArray(); } } return $retval; @@ -4000,14 +3988,14 @@ class Title implements LinkTarget, IDBAccessObject { /** * Compare with another title. * - * @param Title $title + * @param LinkTarget $title * @return bool */ - public function equals( Title $title ) { + public function equals( LinkTarget $title ) { // Note: === is necessary for proper matching of number-like titles. - return $this->mInterwiki === $title->mInterwiki - && $this->mNamespace == $title->mNamespace - && $this->mDbkeyform === $title->mDbkeyform; + return $this->mInterwiki === $title->getInterwiki() + && $this->mNamespace == $title->getNamespace() + && $this->mDbkeyform === $title->getDBkey(); } /** @@ -4311,9 +4299,10 @@ class Title implements LinkTarget, IDBAccessObject { */ public function getNamespaceKey( $prepend = 'nstab-' ) { // Gets the subject namespace of this title - $subjectNS = MWNamespace::getSubject( $this->mNamespace ); + $nsInfo = MediaWikiServices::getInstance()->getNamespaceInfo(); + $subjectNS = $nsInfo->getSubject( $this->mNamespace ); // Prefer canonical namespace name for HTML IDs - $namespaceKey = MWNamespace::getCanonicalName( $subjectNS ); + $namespaceKey = $nsInfo->getCanonicalName( $subjectNS ); if ( $namespaceKey === false ) { // Fallback to localised text $namespaceKey = $this->getSubjectNsText(); @@ -4409,7 +4398,8 @@ class Title implements LinkTarget, IDBAccessObject { public function canUseNoindex() { global $wgExemptFromUserRobotsControl; - $bannedNamespaces = $wgExemptFromUserRobotsControl ?? MWNamespace::getContentNamespaces(); + $bannedNamespaces = $wgExemptFromUserRobotsControl ?? + MediaWikiServices::getInstance()->getNamespaceInfo()->getContentNamespaces(); return !in_array( $this->mNamespace, $bannedNamespaces ); } @@ -4576,7 +4566,10 @@ class Title implements LinkTarget, IDBAccessObject { } } - if ( MWNamespace::hasSubpages( $this->mNamespace ) ) { + if ( + MediaWikiServices::getInstance()->getNamespaceInfo()-> + hasSubpages( $this->mNamespace ) + ) { // Optional notice for page itself and any parent page $editnotice_base = $editnotice_ns; foreach ( explode( '/', $this->mDbkeyform ) as $part ) {