getTitle() : $target; } /** * @param DatabaseBase $db * @return mixed */ public function doQuery( $db ) { $ids = array_map( 'intval', $this->ids ); $live = $db->select( array( 'revision', 'page', 'user' ), array_merge( Revision::selectFields(), Revision::selectUserFields() ), array( 'rev_page' => $this->title->getArticleID(), 'rev_id' => $ids, ), __METHOD__, array( 'ORDER BY' => 'rev_id DESC' ), array( 'page' => Revision::pageJoinCond(), 'user' => Revision::userJoinCond() ) ); if ( $live->numRows() >= count( $ids ) ) { // All requested revisions are live, keeps things simple! return $live; } // Check if any requested revisions are available fully deleted. $archived = $db->select( array( 'archive' ), Revision::selectArchiveFields(), array( 'ar_rev_id' => $ids ), __METHOD__, array( 'ORDER BY' => 'ar_rev_id DESC' ) ); if ( $archived->numRows() == 0 ) { return $live; } elseif ( $live->numRows() == 0 ) { return $archived; } else { // Combine the two! Whee $rows = array(); foreach ( $live as $row ) { $rows[$row->rev_id] = $row; } foreach ( $archived as $row ) { $rows[$row->ar_rev_id] = $row; } krsort( $rows ); return new FakeResultWrapper( array_values( $rows ) ); } } public function newItem( $row ) { if ( isset( $row->rev_id ) ) { return new RevDelRevisionItem( $this, $row ); } elseif ( isset( $row->ar_rev_id ) ) { return new RevDelArchivedRevisionItem( $this, $row ); } else { // This shouldn't happen. :) throw new MWException( 'Invalid row type in RevDelRevisionList' ); } } public function getCurrent() { if ( is_null( $this->currentRevId ) ) { $dbw = wfGetDB( DB_MASTER ); $this->currentRevId = $dbw->selectField( 'page', 'page_latest', $this->title->pageCond(), __METHOD__ ); } return $this->currentRevId; } public function getSuppressBit() { return Revision::DELETED_RESTRICTED; } public function doPreCommitUpdates() { $this->title->invalidateCache(); return Status::newGood(); } public function doPostCommitUpdates() { $this->title->purgeSquid(); // Extensions that require referencing previous revisions may need this wfRunHooks( 'ArticleRevisionVisibilitySet', array( &$this->title ) ); return Status::newGood(); } }