/**
* A codec for %MediaWiki page titles.
*
- * @note: Normalization and validation is applied while parsing, not when formatting.
+ * @note Normalization and validation is applied while parsing, not when formatting.
* It's possible to construct a TitleValue with an invalid title, and use MediaWikiTitleCodec
* to generate an (invalid) title string from it. TitleValues should be constructed only
* via parseTitle() or from a (semi)trusted source, such as the database.
* @see https://www.mediawiki.org/wiki/Requests_for_comment/TitleValue
*/
class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
-
/**
* @var Language
*/
protected $localInterwikis;
/**
- * @param Language $language the language object to use for localizing namespace names.
- * @param GenderCache $genderCache the gender cache for generating gendered namespace names
+ * @param Language $language The language object to use for localizing namespace names.
+ * @param GenderCache $genderCache The gender cache for generating gendered namespace names
* @param string[]|string $localInterwikis
*/
public function __construct( Language $language, GenderCache $genderCache,
* @param int $namespace
* @param string $text
*
- * @throws InvalidArgumentException if the namespace is invalid
+ * @throws InvalidArgumentException If the namespace is invalid
* @return string
*/
public function getNamespaceName( $namespace, $text ) {
if ( $this->language->needsGenderDistinction() &&
- MWNamespace::hasGenderDistinction( $namespace ) ) {
+ MWNamespace::hasGenderDistinction( $namespace )
+ ) {
//NOTE: we are assuming here that the title text is a user name!
$gender = $this->genderCache->getGenderOf( $text, __METHOD__ );
* Underscores will be replaced.
* @param string $fragment The fragment name (may be empty).
*
- * @throws InvalidArgumentException if the namespace is invalid
+ * @throws InvalidArgumentException If the namespace is invalid
* @return string
*/
public function formatTitle( $namespace, $text, $fragment = '' ) {
* namespace prefixes, sets the other forms, and canonicalizes
* everything.
*
- * @todo: this method is only exposed as a temporary measure to ease refactoring.
+ * @todo this method is only exposed as a temporary measure to ease refactoring.
* It was copied with minimal changes from Title::secureAndSplit().
*
- * @todo: This method should be split up and an appropriate interface
+ * @todo This method should be split up and an appropriate interface
* defined for use by the Title class.
*
* @param string $text
# Initialisation
$parts = array(
'interwiki' => '',
+ 'local_interwiki' => false,
'fragment' => '',
'namespace' => $defaultNamespace,
'dbkey' => $dbkey,
foreach ( $this->localInterwikis as $localIW ) {
if ( 0 == strcasecmp( $parts['interwiki'], $localIW ) ) {
if ( $dbkey == '' ) {
- # Can't have an empty self-link
- throw new MalformedTitleException( 'Local interwiki with empty title: ' . $text );
+ # Empty self-links should point to the Main Page, to ensure
+ # compatibility with cross-wiki transclusions and the like.
+ $mainPage = Title::newMainPage();
+ return array(
+ 'interwiki' => $mainPage->getInterwiki(),
+ 'local_interwiki' => true,
+ 'fragment' => $mainPage->getFragment(),
+ 'namespace' => $mainPage->getNamespace(),
+ 'dbkey' => $mainPage->getDBkey(),
+ 'user_case_dbkey' => $mainPage->getUserCaseDBKey()
+ );
}
$parts['interwiki'] = '';
+ # local interwikis should behave like initial-colon links
+ $parts['local_interwiki'] = true;
# Do another namespace split...
continue 2;
# Fill fields
$parts['dbkey'] = $dbkey;
+
return $parts;
}
-
}