* @note Consider using a TitleValue object instead. TitleValue is more lightweight
* and does not rely on global state or the database.
*/
-class Title {
+class Title implements LinkTarget {
/** @var HashBagOStuff */
static private $titleCache = null;
* Avoid usage of this singleton by using TitleValue
* and the associated services when possible.
*
- * @return TitleParser
+ * @return MediaWikiTitleCodec
*/
- private static function getTitleParser() {
+ private static function getMediaWikiTitleCodec() {
global $wgContLang, $wgLocalInterwikis;
static $titleCodec = null;
* @return TitleFormatter
*/
private static function getTitleFormatter() {
- // NOTE: we know that getTitleParser() returns a MediaWikiTitleCodec,
+ // NOTE: we know that getMediaWikiTitleCodec() returns a MediaWikiTitleCodec,
// which implements TitleFormatter.
- return self::getTitleParser();
+ return self::getMediaWikiTitleCodec();
}
function __construct() {
* @return Title
*/
public static function newFromTitleValue( TitleValue $titleValue ) {
+ return self::newFromLinkTarget( $titleValue );
+ }
+
+ /**
+ * Create a new Title from a LinkTarget
+ *
+ * @param LinkTarget $linkTarget Assumed to be safe.
+ *
+ * @return Title
+ */
+ public static function newFromLinkTarget( LinkTarget $linkTarget ) {
return self::makeTitle(
- $titleValue->getNamespace(),
- $titleValue->getText(),
- $titleValue->getFragment() );
+ $linkTarget->getNamespace(),
+ $linkTarget->getText(),
+ $linkTarget->getFragment() );
}
/**
* Create a new Title from text, such as what one would find in a link. De-
* codes any HTML entities in the text.
*
- * @param string|null $text The link text; spaces, prefixes, and an
+ * @param string|int|null $text The link text; spaces, prefixes, and an
* initial ':' indicating the main namespace are accepted.
* @param int $defaultNamespace The namespace to use if none is specified
* by a prefix. If you want to force a specific namespace even if
if ( is_object( $text ) ) {
throw new InvalidArgumentException( '$text must be a string.' );
}
- if ( $text !== null && !is_string( $text ) ) {
+ // DWIM: Integers can be passed in here when page titles are used as array keys.
+ if ( $text !== null && !is_string( $text ) && !is_int( $text ) ) {
wfDebugLog( 'T76305', wfGetAllCallers( 5 ) );
return null;
}
}
try {
- return Title::newFromTextThrow( $text, $defaultNamespace );
+ return Title::newFromTextThrow( strval( $text ), $defaultNamespace );
} catch ( MalformedTitleException $ex ) {
return null;
}
return;
}
- $method = __METHOD__;
- $dbw = wfGetDB( DB_MASTER );
- $dbw->onTransactionIdle( function () use ( $dbw, $method ) {
- $dbw->delete(
- 'page_restrictions',
- array( 'pr_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ),
- $method
- );
- $dbw->delete(
- 'protected_titles',
- array( 'pt_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ),
- $method
- );
- } );
+ DeferredUpdates::addUpdate( new AtomicSectionUpdate(
+ wfGetDB( DB_MASTER ),
+ __METHOD__,
+ function ( IDatabase $dbw, $fname ) {
+ $dbw->delete(
+ 'page_restrictions',
+ array( 'pr_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ),
+ $fname
+ );
+ $dbw->delete(
+ 'protected_titles',
+ array( 'pt_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ),
+ $fname
+ );
+ }
+ ) );
}
/**
// @note: splitTitleString() is a temporary hack to allow MediaWikiTitleCodec to share
// the parsing code with Title, while avoiding massive refactoring.
// @todo: get rid of secureAndSplit, refactor parsing code.
- $titleParser = self::getTitleParser();
+ $titleParser = self::getMediaWikiTitleCodec();
// MalformedTitleException can be thrown here
$parts = $titleParser->splitTitleString( $dbkey, $this->getDefaultNamespace() );
if ( $pageLang->hasVariants() ) {
$variants = $pageLang->getVariants();
foreach ( $variants as $vCode ) {
- $urls[] = $this->getInternalURL( '', $vCode );
+ $urls[] = $this->getInternalURL( $vCode );
}
}
// Checking $wgLanguageCode hasn't changed for the benefit of unit
// tests.
$contentHandler = ContentHandler::getForTitle( $this );
- $langObj = wfGetLangObj( $contentHandler->getPageLanguage( $this ) );
+ $langObj = $contentHandler->getPageLanguage( $this );
$this->mPageLanguage = array( $langObj->getCode(), $wgLanguageCode );
} else {
$langObj = wfGetLangObj( $this->mPageLanguage[0] );