/**
* @since 1.19
- *
+ *
* @param $row
* @return Revision
*/
return Revision::loadFromConds( $db, $conds );
}
+ /**
+ * Stores the origin wiki of a revision in case it is a foreign wiki
+ */
+ function setWikiID( $wikiID ) {
+ $this->mWikiID = $wikiID;
+ }
+
+ /**
+ * Load the current revision of a given page of a foreign wiki.
+ * The WikiID is stored for further use, such as loadText() and getTimestampFromId()
+ */
+ public static function loadFromTitleForeignWiki( $wikiID, $title ) {
+ $dbr = wfGetDB( DB_SLAVE, array(), $wikiID );
+
+ $revision = self::loadFromTitle( $dbr, $title );
+
+ if( $revision ) {
+ $revision->setWikiID( $wikiID );
+ }
+
+ return $revision;
+
+ }
+
/**
* Load either the current, or a specified, revision
* that's attached to a given page. If not attached
throw new MWException( 'Revision constructor passed invalid row format.' );
}
$this->mUnpatrolled = null;
+ $this->mWikiID = false;
}
/**
if( isset( $this->mTitle ) ) {
return $this->mTitle;
}
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_SLAVE, array(), $this->mWikiID );
+
$row = $dbr->selectRow(
array( 'page', 'revision' ),
array( 'page_namespace', 'page_title' ),
if( $this->mUnpatrolled !== null ) {
return $this->mUnpatrolled;
}
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_SLAVE, array(), $this->mWikiID );
$this->mUnpatrolled = $dbr->selectField( 'recentchanges',
'rc_id',
array( // Add redundant user,timestamp condition so we can use the existing index
// Caching may be beneficial for massive use of external storage
global $wgRevisionCacheExpiry, $wgMemc;
$textId = $this->getTextId();
+ if( isset( $this->mWikiID ) && $this->mWikiID !== false ) {
+ $key = wfForeignMemcKey( $this->mWikiID, null, 'revisiontext', 'textid', $textId );
+ } else {
$key = wfMemcKey( 'revisiontext', 'textid', $textId );
+ }
if( $wgRevisionCacheExpiry ) {
$text = $wgMemc->get( $key );
if( is_string( $text ) ) {
if( !$row ) {
// Text data is immutable; check slaves first.
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_SLAVE, array(), $this->mWikiID );
$row = $dbr->selectRow( 'text',
array( 'old_text', 'old_flags' ),
array( 'old_id' => $this->getTextId() ),
if( !$row && wfGetLB()->getServerCount() > 1 ) {
// Possible slave lag!
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = wfGetDB( DB_MASTER, array(), $this->mWikiID );
$row = $dbw->selectRow( 'text',
array( 'old_text', 'old_flags' ),
array( 'old_id' => $this->getTextId() ),
* @return String
*/
static function getTimestampFromId( $title, $id ) {
- $dbr = wfGetDB( DB_SLAVE );
+ $wikiId = wfWikiID();
+ $dbr = wfGetDB( DB_SLAVE, array(), $wikiId );
// Casting fix for DB2
if ( $id == '' ) {
$id = 0;
$timestamp = $dbr->selectField( 'revision', 'rev_timestamp', $conds, __METHOD__ );
if ( $timestamp === false && wfGetLB()->getServerCount() > 1 ) {
# Not in slave, try master
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = wfGetDB( DB_MASTER, array(), $wikiId );
$timestamp = $dbw->selectField( 'revision', 'rev_timestamp', $conds, __METHOD__ );
}
return wfTimestamp( TS_MW, $timestamp );