2014-12-10 11:24:47 +00:00
|
|
|
<?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
|
|
|
|
|
*/
|
|
|
|
|
|
2023-09-18 15:00:50 +00:00
|
|
|
namespace MediaWiki\Title;
|
|
|
|
|
|
2023-06-09 22:25:07 +00:00
|
|
|
use RuntimeException;
|
2024-06-12 23:59:33 +00:00
|
|
|
use Stringable;
|
2023-09-18 15:00:50 +00:00
|
|
|
|
2014-12-10 11:24:47 +00:00
|
|
|
/**
|
|
|
|
|
* A simple, immutable structure to hold the title of a page on a foreign
|
|
|
|
|
* MediaWiki installation.
|
|
|
|
|
*/
|
2024-06-12 23:59:33 +00:00
|
|
|
class ForeignTitle implements Stringable {
|
2014-12-10 11:24:47 +00:00
|
|
|
/**
|
|
|
|
|
* @var int|null
|
|
|
|
|
* Null if we don't know the namespace ID (e.g. interwiki links)
|
|
|
|
|
*/
|
2016-01-26 18:36:52 +00:00
|
|
|
private $namespaceId;
|
2014-12-10 11:24:47 +00:00
|
|
|
/** @var string */
|
2016-01-26 18:36:52 +00:00
|
|
|
private $namespaceName;
|
2014-12-10 11:24:47 +00:00
|
|
|
/** @var string */
|
2016-01-26 18:36:52 +00:00
|
|
|
private $pageName;
|
2014-12-10 11:24:47 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 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 ) {
|
2020-01-09 23:48:34 +00:00
|
|
|
if ( $namespaceId === null ) {
|
2014-12-10 11:24:47 +00:00
|
|
|
$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() {
|
2020-01-09 23:48:34 +00:00
|
|
|
return $this->namespaceId !== null;
|
2014-12-10 11:24:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2023-06-09 22:25:07 +00:00
|
|
|
* @note Callers should make sure that isNamespaceIdKnown() is true before calling this method.
|
2014-12-10 11:24:47 +00:00
|
|
|
* @return int
|
|
|
|
|
*/
|
|
|
|
|
public function getNamespaceId() {
|
2020-01-09 23:48:34 +00:00
|
|
|
if ( $this->namespaceId === null ) {
|
2023-06-09 22:25:07 +00:00
|
|
|
throw new RuntimeException(
|
2014-12-10 11:24:47 +00:00
|
|
|
"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;
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-09-18 15:00:50 +00:00
|
|
|
|
2024-03-07 21:56:58 +00:00
|
|
|
/** @deprecated class alias since 1.41 */
|
2023-09-18 15:00:50 +00:00
|
|
|
class_alias( ForeignTitle::class, 'ForeignTitle' );
|