In PHP 8, but not in PHP 7.4, every class with a __toString() function implicitly implements the Stringable interface. Therefore, the behavior of checks like "instanceof Stringable" differs between these PHP versions when such classes are involved. Make every such class implement the interface so that the behavior will be consistent. The PHP 7.4 fallback for the Stringable interface is provided by symfony/polyfill-php80. Change-Id: I3f0330c2555c7d3bf99b654ed3c0b0303e257ea1
124 lines
3.3 KiB
PHP
124 lines
3.3 KiB
PHP
<?php
|
|
/**
|
|
* A structure to hold the title of a page on a foreign MediaWiki installation
|
|
*
|
|
* 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
|
|
*
|
|
* @file
|
|
* @author This, that and the other
|
|
*/
|
|
|
|
namespace MediaWiki\Title;
|
|
|
|
use RuntimeException;
|
|
use Stringable;
|
|
|
|
/**
|
|
* A simple, immutable structure to hold the title of a page on a foreign
|
|
* MediaWiki installation.
|
|
*/
|
|
class ForeignTitle implements Stringable {
|
|
/**
|
|
* @var int|null
|
|
* Null if we don't know the namespace ID (e.g. interwiki links)
|
|
*/
|
|
private $namespaceId;
|
|
/** @var string */
|
|
private $namespaceName;
|
|
/** @var string */
|
|
private $pageName;
|
|
|
|
/**
|
|
* Creates a new ForeignTitle object.
|
|
*
|
|
* @param int|null $namespaceId Null if the namespace ID is unknown (e.g.
|
|
* interwiki links)
|
|
* @param string $namespaceName
|
|
* @param string $pageName
|
|
*/
|
|
public function __construct( $namespaceId, $namespaceName, $pageName ) {
|
|
if ( $namespaceId === null ) {
|
|
$this->namespaceId = null;
|
|
} else {
|
|
$this->namespaceId = intval( $namespaceId );
|
|
}
|
|
$this->namespaceName = str_replace( ' ', '_', $namespaceName );
|
|
$this->pageName = str_replace( ' ', '_', $pageName );
|
|
}
|
|
|
|
/**
|
|
* Do we know the namespace ID of the page on the foreign wiki?
|
|
* @return bool
|
|
*/
|
|
public function isNamespaceIdKnown() {
|
|
return $this->namespaceId !== null;
|
|
}
|
|
|
|
/**
|
|
* @note Callers should make sure that isNamespaceIdKnown() is true before calling this method.
|
|
* @return int
|
|
*/
|
|
public function getNamespaceId() {
|
|
if ( $this->namespaceId === null ) {
|
|
throw new RuntimeException(
|
|
"Attempted to call getNamespaceId when the namespace ID is not known" );
|
|
}
|
|
return $this->namespaceId;
|
|
}
|
|
|
|
/** @return string */
|
|
public function getNamespaceName() {
|
|
return $this->namespaceName;
|
|
}
|
|
|
|
/** @return string */
|
|
public function getText() {
|
|
return $this->pageName;
|
|
}
|
|
|
|
/** @return string */
|
|
public function getFullText() {
|
|
$result = '';
|
|
if ( $this->namespaceName ) {
|
|
$result .= $this->namespaceName . ':';
|
|
}
|
|
$result .= $this->pageName;
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* Returns a string representation of the title, for logging. This is purely
|
|
* informative and must not be used programmatically. Use the appropriate
|
|
* ImportTitleFactory to generate the correct string representation for a
|
|
* given use.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function __toString() {
|
|
$name = '';
|
|
if ( $this->isNamespaceIdKnown() ) {
|
|
$name .= '{ns' . $this->namespaceId . '}';
|
|
} else {
|
|
$name .= '{ns??}';
|
|
}
|
|
$name .= $this->namespaceName . ':' . $this->pageName;
|
|
|
|
return $name;
|
|
}
|
|
}
|
|
|
|
/** @deprecated class alias since 1.41 */
|
|
class_alias( ForeignTitle::class, 'ForeignTitle' );
|