* to that title, will return null.
*
* @param $title Title
- * @param $id Integer
+ * @param $id Integer (optional)
* @return Revision or null
*/
public static function newFromTitle( $title, $id = 0 ) {
$dbw = wfGetDB( DB_MASTER );
$latest = $dbw->selectField( 'page', 'page_latest', $conds, __METHOD__ );
if ( $latest === false ) {
- // Page does not exist
- return null;
+ return null; // page does not exist
}
$conds['rev_id'] = $latest;
} else {
return Revision::newFromConds( $conds );
}
+ /**
+ * Load either the current, or a specified, revision
+ * that's attached to a given page ID.
+ * Returns null if no such revision can be found.
+ *
+ * @param $revId Integer
+ * @param $pageId Integer (optional)
+ * @return Revision or null
+ */
+ public static function newFromPageId( $pageId, $revId = 0 ) {
+ $conds = array( 'page_id' => $pageId );
+ if ( $revId ) {
+ $conds['rev_id'] = $pageId;
+ } elseif ( wfGetLB()->getServerCount() > 1 ) {
+ // Get the latest revision ID from the master
+ $dbw = wfGetDB( DB_MASTER );
+ $latest = $dbw->selectField( 'page', 'page_latest', $conds, __METHOD__ );
+ if ( $latest === false ) {
+ return null; // page does not exist
+ }
+ $conds['rev_id'] = $latest;
+ } else {
+ $conds[] = 'rev_id = page_latest';
+ }
+ return Revision::newFromConds( $conds );
+ }
+
/**
* Make a fake revision object from an archive table row. This is queried
* for permissions or even inserted (as in Special:Undelete)