*
* @param int $id
* @param int $flags (optional)
- * @param Title $title (optional) If known you can pass the Title in here.
- * Passing no Title may result in another DB query if there are recent writes.
* @return Revision|null
*/
- public static function newFromId( $id, $flags = 0, Title $title = null ) {
- /**
- * MCR RevisionStore Compat
- *
- * If the title is not passed in as a param (already known) then select it here.
- *
- * Do the selection with MASTER if $flags includes READ_LATEST or recent changes
- * have happened on our load balancer.
- *
- * If we select the title here and pass it down it will results in fewer queries
- * further down the stack.
- */
- if ( !$title ) {
- if (
- $flags & self::READ_LATEST ||
- wfGetLB()->hasOrMadeRecentMasterChanges()
- ) {
- $dbr = wfGetDB( DB_MASTER );
- } else {
- $dbr = wfGetDB( DB_REPLICA );
- }
- $row = $dbr->selectRow(
- [ 'revision', 'page' ],
- [
- 'page_namespace',
- 'page_title',
- 'page_id',
- 'page_latest',
- 'page_is_redirect',
- 'page_len',
- ],
- [ 'rev_id' => $id ],
- __METHOD__,
- [],
- [ 'page' => [ 'JOIN', 'page_id=rev_page' ] ]
- );
- if ( $row ) {
- $title = Title::newFromRow( $row );
- }
- wfGetLB()->reuseConnection( $dbr );
- }
-
- $rec = self::getRevisionStore()->getRevisionById( $id, $flags, $title );
- return $rec === null ? null : new Revision( $rec, $flags, $title );
+ public static function newFromId( $id, $flags = 0 ) {
+ $rec = self::getRevisionStore()->getRevisionById( $id, $flags );
+ return $rec === null ? null : new Revision( $rec, $flags );
}
/**
*
* @param object $row
* @param array $overrides
- * @param Title $title (optional)
*
* @throws MWException
* @return Revision
*/
- public static function newFromArchiveRow( $row, $overrides = [], Title $title = null ) {
+ public static function newFromArchiveRow( $row, $overrides = [] ) {
/**
* MCR Migration: https://phabricator.wikimedia.org/T183564
* This method used to overwrite attributes, then passed to Revision::__construct
unset( $overrides['page'] );
}
- $rec = self::getRevisionStore()->newRevisionFromArchiveRow( $row, 0, $title, $overrides );
+ /**
+ * We require a Title for both the Revision object and the RevisionRecord.
+ * Below is duplicated logic from RevisionStore::newRevisionFromArchiveRow
+ * to fetch a title in order pass it into the Revision object.
+ */
+ $title = null;
+ if ( isset( $overrides['title'] ) ) {
+ if ( !( $overrides['title'] instanceof Title ) ) {
+ throw new MWException( 'title field override must contain a Title object.' );
+ }
+
+ $title = $overrides['title'];
+ }
+ if ( $title !== null ) {
+ if ( isset( $row->ar_namespace ) && isset( $row->ar_title ) ) {
+ $title = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+ } else {
+ throw new InvalidArgumentException(
+ 'A Title or ar_namespace and ar_title must be given'
+ );
+ }
+ }
+
+ $rec = self::getRevisionStore()->newRevisionFromArchiveRow( $row, 0, null, $overrides );
return new Revision( $rec, self::READ_NORMAL, $title );
}
* @return Revision|null
*/
public function getPrevious() {
- $rec = self::getRevisionStore()->getPreviousRevision( $this->mRecord, $this->getTitle() );
- return $rec === null
- ? null
- : new Revision( $rec, self::READ_NORMAL, $this->getTitle() );
+ $rec = self::getRevisionStore()->getPreviousRevision( $this->mRecord );
+ return $rec === null ? null : new Revision( $rec );
}
/**
* @return Revision|null
*/
public function getNext() {
- $rec = self::getRevisionStore()->getNextRevision( $this->mRecord, $this->getTitle() );
- return $rec === null
- ? null
- : new Revision( $rec, self::READ_NORMAL, $this->getTitle() );
+ $rec = self::getRevisionStore()->getNextRevision( $this->mRecord );
+ return $rec === null ? null : new Revision( $rec );
}
/**
*
* @param int $id
* @param int $flags (optional)
- * @param Title $title (optional)
* @return RevisionRecord|null
*/
- public function getRevisionById( $id, $flags = 0, Title $title = null ) {
- return $this->newRevisionFromConds( [ 'rev_id' => intval( $id ) ], $flags, $title );
+ public function getRevisionById( $id, $flags = 0 ) {
+ return $this->newRevisionFromConds( [ 'rev_id' => intval( $id ) ], $flags );
}
/**
* MCR migration note: this replaces Revision::getPrevious
*
* @param RevisionRecord $rev
- * @param Title $title if known (optional)
*
* @return RevisionRecord|null
*/
- public function getPreviousRevision( RevisionRecord $rev, Title $title = null ) {
- if ( $title === null ) {
- $title = $this->getTitle( $rev->getPageId(), $rev->getId() );
- }
+ public function getPreviousRevision( RevisionRecord $rev ) {
+ $title = $this->getTitle( $rev->getPageId(), $rev->getId() );
$prev = $title->getPreviousRevisionID( $rev->getId() );
if ( $prev ) {
return $this->getRevisionByTitle( $title, $prev );
* MCR migration note: this replaces Revision::getNext
*
* @param RevisionRecord $rev
- * @param Title $title if known (optional)
*
* @return RevisionRecord|null
*/
- public function getNextRevision( RevisionRecord $rev, Title $title = null ) {
- if ( $title === null ) {
- $title = $this->getTitle( $rev->getPageId(), $rev->getId() );
- }
+ public function getNextRevision( RevisionRecord $rev ) {
+ $title = $this->getTitle( $rev->getPageId(), $rev->getId() );
$next = $title->getNextRevisionID( $rev->getId() );
if ( $next ) {
return $this->getRevisionByTitle( $title, $next );
);
if ( $row ) {
- return Revision::newFromArchiveRow(
- $row,
- [ 'title' => $this->title ],
- $this->title
- );
+ return Revision::newFromArchiveRow( $row, [ 'title' => $this->title ] );
}
return null;
$oldPageId = (int)$latestRestorableRow->ar_page_id; // pass this to ArticleUndelete hook
// grab the content to check consistency with global state before restoring the page.
- $revision = Revision::newFromArchiveRow(
- $latestRestorableRow,
+ $revision = Revision::newFromArchiveRow( $latestRestorableRow,
[
'title' => $article->getTitle(), // used to derive default content model
- ],
- $article->getTitle()
+ ]
);
$user = User::newFromName( $revision->getUserText( Revision::RAW ), false );
$content = $revision->getContent( Revision::RAW );
}
// Insert one revision at a time...maintaining deletion status
// unless we are specifically removing all restrictions...
- $revision = Revision::newFromArchiveRow(
- $row,
+ $revision = Revision::newFromArchiveRow( $row,
[
'page' => $pageId,
'title' => $this->title,
'deleted' => $unsuppress ? 0 : $row->ar_deleted
- ],
- $this->title
- );
+ ] );
// This will also copy the revision to ip_changes if it was an IP edit.
$revision->insertOn( $dbw );