protected $mContentFormat;
/**
- * @var Content
+ * @var Content|null|bool
*/
protected $mContent;
$this->mTimestamp = $row->rev_timestamp;
$this->mDeleted = intval( $row->rev_deleted );
- if( !isset( $row->rev_parent_id ) ) {
- $this->mParentId = is_null( $row->rev_parent_id ) ? null : 0;
+ if ( !isset( $row->rev_parent_id ) ) {
+ $this->mParentId = null;
} else {
$this->mParentId = intval( $row->rev_parent_id );
}
- if( !isset( $row->rev_len ) || is_null( $row->rev_len ) ) {
+ if ( !isset( $row->rev_len ) ) {
$this->mSize = null;
} else {
$this->mSize = intval( $row->rev_len );
}
/**
- * Gets the content object for the revision
+ * Gets the content object for the revision (or null on failure).
+ *
+ * Note that for mutable Content objects, each call to this method will return a
+ * fresh clone.
*
* @since 1.21
- * @return Content
+ * @return Content|null the Revision's content, or null on failure.
*/
protected function getContentInternal() {
if( is_null( $this->mContent ) ) {
// Revision is immutable. Load on demand:
-
- $handler = $this->getContentHandler();
- $format = $this->getContentFormat();
-
if( is_null( $this->mText ) ) {
- // Load text on demand:
$this->mText = $this->loadText();
}
- $this->mContent = is_null( $this->mText ) ? null : $handler->unserializeContent( $this->mText, $format );
+ if ( $this->mText !== null && $this->mText !== false ) {
+ // Unserialize content
+ $handler = $this->getContentHandler();
+ $format = $this->getContentFormat();
+
+ $this->mContent = $handler->unserializeContent( $this->mText, $format );
+ } else {
+ $this->mContent = false; // negative caching!
+ }
}
- return $this->mContent->copy(); // NOTE: copy() will return $this for immutable content objects
+ // NOTE: copy() will return $this for immutable content objects
+ return $this->mContent ? $this->mContent->copy() : null;
}
/**
*
* @param $row Object: the text data
* @param $prefix String: table prefix (default 'old_')
+ * @param $wiki String|false: the name of the wiki to load the revision text from
+ * (same as the the wiki $row was loaded from) or false to indicate the local
+ * wiki (this is the default). Otherwise, it must be a symbolic wiki database
+ * identifier as understood by the LoadBalancer class.
* @return String: text the text requested or false on failure
*/
- public static function getRevisionText( $row, $prefix = 'old_' ) {
+ public static function getRevisionText( $row, $prefix = 'old_', $wiki = false ) {
wfProfileIn( __METHOD__ );
# Get data
wfProfileOut( __METHOD__ );
return false;
}
- $text = ExternalStore::fetchFromURL( $url );
+ $text = ExternalStore::fetchFromURL( $url, array( 'wiki' => $wiki ) );
}
// If the text was fetched without an error, convert it
$content = $this->getContent( Revision::RAW );
- if ( !$content->isValid() ) {
+ if ( !$content || !$content->isValid() ) {
$t = $title->getPrefixedDBkey();
throw new MWException( "Content of $t is not valid! Content model is $model" );
* Lazy-load the revision's text.
* Currently hardcoded to the 'text' table storage engine.
*
- * @return String
+ * @return String|bool the revision's text, or false on failure
*/
protected function loadText() {
wfProfileIn( __METHOD__ );