'page_latest',
'rev_id',
'rev_page',
+ 'rev_text_id',
'rev_comment',
'rev_user_text',
'rev_user',
'rev_minor_edit',
- 'rev_timestamp' ),
+ 'rev_timestamp',
+ 'rev_deleted' ),
$conditions,
'Revision::fetchRow' );
return $db->resultObject( $res );
if( is_object( $row ) ) {
$this->mId = IntVal( $row->rev_id );
$this->mPage = IntVal( $row->rev_page );
+ $this->mTextId = IntVal( $row->rev_text_id );
$this->mComment = $row->rev_comment;
$this->mUserText = $row->rev_user_text;
$this->mUser = IntVal( $row->rev_user );
$this->mMinorEdit = IntVal( $row->rev_minor_edit );
$this->mTimestamp = $row->rev_timestamp;
+ $this->mDeleted = IntVal( $row->rev_deleted );
$this->mCurrent = ( $row->rev_id == $row->page_latest );
$this->mTitle = Title::makeTitle( $row->page_namespace,
$this->mId = isset( $row['id'] ) ? IntVal( $row['id'] ) : null;
$this->mPage = isset( $row['page'] ) ? IntVal( $row['page'] ) : null;
+ $this->mTextId = isset( $row['text_id'] ) ? IntVal( $row['text_id'] ) : null;
$this->mComment = isset( $row['comment'] ) ? StrVal( $row['comment'] ) : null;
$this->mUserText = isset( $row['user_text'] ) ? StrVal( $row['user_text'] ) : $wgUser->getName();
$this->mUser = isset( $row['user'] ) ? IntVal( $row['user'] ) : $wgUser->getId();
$this->mMinorEdit = isset( $row['minor_edit'] ) ? IntVal( $row['minor_edit'] ) : 0;
$this->mTimestamp = isset( $row['timestamp'] ) ? StrVal( $row['timestamp'] ) : wfTimestamp( TS_MW );
+ $this->mDeleted = isset( $row['deleted'] ) ? IntVal( $row['deleted'] ) : 0;
$this->mText = isset( $row['text'] ) ? StrVal( $row['text'] ) : null;
$this->mTitle = null; # Load on demand if needed
return $this->mId;
}
+ /**
+ * @return int
+ */
+ function getTextId() {
+ return $this->mTextId;
+ }
+
/**
* Returns the title of the page associated with this entry.
* @return Title
return (bool)$this->mMinorEdit;
}
+ /**
+ * @return bool
+ */
+ function isDeleted() {
+ return (bool)$this->mDeleted;
+ }
+
/**
* @return string
*/
return false;
}
+ # Use external methods for external objects, text in table is URL-only then
+ if ( in_array( 'external', $flags ) ) {
+ $url=$text;
+ @list($proto,$path)=explode('://',$url,2);
+ if ($path=="") {
+ wfProfileOut( $fname );
+ return false;
+ }
+ require_once('ExternalStore.php');
+ $text=ExternalStore::fetchFromURL($url);
+ }
+
if( in_array( 'gzip', $flags ) ) {
# Deal with optional compression of archived pages.
# This can be done periodically via maintenance/compressOld.php, and
* @return string
*/
function compressRevisionText( &$text ) {
- global $wgCompressRevisions, $wgUseLatin1;
+ global $wgCompressRevisions;
$flags = array();
- if( !$wgUseLatin1 ) {
- # Revisions not marked this way will be converted
- # on load if $wgLegacyCharset is set in the future.
- $flags[] = 'utf-8';
- }
+
+ # Revisions not marked this way will be converted
+ # on load if $wgLegacyCharset is set in the future.
+ $flags[] = 'utf-8';
+
if( $wgCompressRevisions ) {
if( function_exists( 'gzdeflate' ) ) {
$text = gzdeflate( $text );
$flags = Revision::compressRevisionText( $mungedText );
# Record the text to the text table
- $old_id = isset( $this->mId )
- ? $this->mId
- : $dbw->nextSequenceValue( 'text_old_id_val' );
- $dbw->insert( 'text',
- array(
- 'old_id' => $old_id,
- 'old_text' => $mungedText,
- 'old_flags' => $flags,
- ), $fname
- );
- $revisionId = $dbw->insertId();
+ if( !isset( $this->mTextId ) ) {
+ $old_id = $dbw->nextSequenceValue( 'text_old_id_val' );
+ $dbw->insert( 'text',
+ array(
+ 'old_id' => $old_id,
+ 'old_text' => $mungedText,
+ 'old_flags' => $flags,
+ ), $fname
+ );
+ $this->mTextId = $dbw->insertId();
+ }
# Record the edit in revisions
+ $rev_id = isset( $this->mId )
+ ? $this->mId
+ : $dbw->nextSequenceValue( 'rev_rev_id_val' );
$dbw->insert( 'revision',
array(
- 'rev_id' => $revisionId,
+ 'rev_id' => $rev_id,
'rev_page' => $this->mPage,
+ 'rev_text_id' => $this->mTextId,
'rev_comment' => $this->mComment,
'rev_minor_edit' => $this->mMinorEdit ? 1 : 0,
'rev_user' => $this->mUser,
'rev_user_text' => $this->mUserText,
'rev_timestamp' => $dbw->timestamp( $this->mTimestamp ),
+ 'rev_deleted' => $this->mDeleted,
), $fname
);
- $this->mId = $revisionId;
+ $this->mId = $dbw->insertId();
wfProfileOut( $fname );
- return $revisionId;
+ return $this->mId;
}
/**
$dbr =& wfGetDB( DB_SLAVE );
$row = $dbr->selectRow( 'text',
array( 'old_text', 'old_flags' ),
- array( 'old_id' => $this->getId() ),
+ array( 'old_id' => $this->getTextId() ),
$fname);
$text = Revision::getRevisionText( $row );
return $text;
}
+
+ /**
+ * Create a new null-revision for insertion into a page's
+ * history. This will not re-save the text, but simply refer
+ * to the text from the previous version.
+ *
+ * Such revisions can for instance identify page rename
+ * operations and other such meta-modifications.
+ *
+ * @param Database $dbw
+ * @param int $pageId ID number of the page to read from
+ * @param string $summary
+ * @param bool $minor
+ * @return Revision
+ */
+ function &newNullRevision( &$dbw, $pageId, $summary, $minor ) {
+ $fname = 'Revision::newNullRevision';
+ wfProfileIn( $fname );
+
+ $current = $dbw->selectRow(
+ array( 'page', 'revision' ),
+ array( 'page_latest', 'rev_text_id' ),
+ array(
+ 'page_id' => $pageId,
+ 'page_latest=rev_id',
+ ),
+ $fname );
+
+ if( $current ) {
+ $revision = new Revision( array(
+ 'page' => $pageId,
+ 'comment' => $summary,
+ 'minor_edit' => $minor,
+ 'text_id' => $current->rev_text_id,
+ ) );
+ } else {
+ $revision = null;
+ }
+
+ wfProfileOut( $fname );
+ return $revision;
+ }
+
}
-?>
\ No newline at end of file
+?>