/**
* Can this title have a corresponding talk page?
*
- * @see NamespaceInfo::hasTalkNamespace
+ * False for relative section links (with getText() === ''),
+ * interwiki links (with getInterwiki() !== ''), and pages in NS_SPECIAL.
+ *
+ * @see NamespaceInfo::canHaveTalkPage
* @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 MediaWikiServices::getInstance()->getNamespaceInfo()->
- hasTalkNamespace( $this->mNamespace );
+ return MediaWikiServices::getInstance()->getNamespaceInfo()->canHaveTalkPage( $this );
}
/**
/**
* Can this title be added to a user's watchlist?
*
+ * False for relative section links (with getText() === ''),
+ * interwiki links (with getInterwiki() !== ''), and pages in NS_SPECIAL.
+ *
* @return bool
*/
public function isWatchable() {
- return !$this->isExternal() && MediaWikiServices::getInstance()->getNamespaceInfo()->
- isWatchable( $this->mNamespace );
+ $nsInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
+ return $this->getText() !== '' && !$this->isExternal() &&
+ $nsInfo->isWatchable( $this->mNamespace );
}
/**
/**
* Get a Title object associated with the talk page of this article
*
- * @deprecated since 1.34, use NamespaceInfo::getTalkPage
+ * @deprecated since 1.34, use getTalkPageIfDefined() or NamespaceInfo::getTalkPage()
+ * with NamespaceInfo::canHaveTalkPage().
* @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(
if (
!MediaWikiServices::getInstance()->getNamespaceInfo()->
hasSubpages( $this->mNamespace )
+ || strtok( $this->getText(), '/' ) === false
) {
return $this->getText();
}
->getPermissionErrors( $action, $user, $this, $rigor, $ignoreErrors );
}
- /**
- * Add the resulting error code to the errors array
- *
- * @param array $errors List of current errors
- * @param array|string|MessageSpecifier|false $result Result of errors
- *
- * @return array List of errors
- */
- private function resultToError( $errors, $result ) {
- if ( is_array( $result ) && count( $result ) && !is_array( $result[0] ) ) {
- // A single array representing an error
- $errors[] = $result;
- } elseif ( is_array( $result ) && is_array( $result[0] ) ) {
- // A nested array representing multiple errors
- $errors = array_merge( $errors, $result );
- } elseif ( $result !== '' && is_string( $result ) ) {
- // A string representing a message-id
- $errors[] = [ $result ];
- } elseif ( $result instanceof MessageSpecifier ) {
- // A message specifier representing an error
- $errors[] = [ $result ];
- } elseif ( $result === false ) {
- // a generic "We don't want them to do that"
- $errors[] = [ 'badaccess-group0' ];
- }
- return $errors;
- }
-
/**
* Get a filtered list of all restriction types supported by this wiki.
* @param bool $exists True to get all restriction types that apply to
$this->mHasSubpages = false;
$subpages = $this->getSubpages( 1 );
if ( $subpages instanceof TitleArray ) {
- $this->mHasSubpages = (bool)$subpages->count();
+ $this->mHasSubpages = (bool)$subpages->current();
}
}