Add Revision::insertOn() method for saving new revisions into the database;
authorBrion Vibber <brion@users.mediawiki.org>
Fri, 11 Mar 2005 06:00:05 +0000 (06:00 +0000)
committerBrion Vibber <brion@users.mediawiki.org>
Fri, 11 Mar 2005 06:00:05 +0000 (06:00 +0000)
modify Article::updateArticle() to use it.

includes/Article.php
includes/Revision.php

index 78ff2ab..49bdb94 100644 (file)
@@ -953,35 +953,16 @@ class Article {
                          - $this->isCountable( $oldtext );
                        $now = wfTimestampNow();
 
-                       $mungedText = $text;
-                       $flags = Revision::compressRevisionText( $mungedText );
-                       
                        $lastRevision = $dbw->selectField(
                                'page', 'page_latest', array( 'page_id' => $this->getId() ) );
                        
-                       # Record the text to the text table
-                       $old_id = $dbw->nextSequenceValue( 'text_old_id_val' );
-                       $dbw->insert( 'text',
-                               array(
-                                       'old_id' => $old_id,
-                                       'old_text' => $mungedText,
-                                       'old_flags' => $flags,
-                               ), $fname
-                       );
-                       $revisionId = $dbw->insertId();
-                       
-                       # Record the edit in revisions
-                       $dbw->insert( 'revision',
-                               array(
-                                       'rev_id' => $revisionId,
-                                       'rev_page' => $this->getID(),
-                                       'rev_comment' => $summary,
-                                       'rev_minor_edit' => $me2,
-                                       'rev_user' => $wgUser->getID(),
-                                       'rev_user_text' => $wgUser->getName(),
-                                       'rev_timestamp' => $dbw->timestamp( $now ),
-                               ), $fname
-                       );
+                       $revision = new Revision( array(
+                               'page'       => $this->getId(),
+                               'comment'    => $summary,
+                               'minor_edit' => $me2,
+                               'text'       => $text
+                               ) );
+                       $revisionId = $revision->insertOn( $dbw );
                        
                        # Update page
                        $dbw->update( 'page',
index e7b6864..317a832 100644 (file)
@@ -144,18 +144,37 @@ class Revision {
         * @access private
         */
        function Revision( $row ) {
-               $this->mId        = IntVal( $row->rev_id );
-               $this->mPage      = IntVal( $row->rev_page );
-               $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;
+               if( is_object( $row ) ) {
+                       $this->mId        = IntVal( $row->rev_id );
+                       $this->mPage      = IntVal( $row->rev_page );
+                       $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->mCurrent   = ( $row->rev_id == $row->page_latest );
-               $this->mTitle     = Title::makeTitle( $row->page_namespace,
-                                                     $row->page_title );
-               $this->mText      = $this->getRevisionText( $row );
+                       $this->mCurrent   = ( $row->rev_id == $row->page_latest );
+                       $this->mTitle     = Title::makeTitle( $row->page_namespace,
+                                                             $row->page_title );
+                       $this->mText      = $this->getRevisionText( $row );
+               } elseif( is_array( $row ) ) {
+                       // Build a new revision to be saved...
+                       global $wgUser;
+                       
+                       $this->mId        = isset( $row['id']         ) ? IntVal( $row['id']         ) : null;
+                       $this->mPage      = isset( $row['page']       ) ? IntVal( $row['page']       ) : 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->mText      = isset( $row['text']       ) ? StrVal( $row['text']       ) : '';
+                       
+                       $this->mTitle     = null; # Load on demand if needed
+                       $this->mCurrent   = false;
+               } else {
+                       wfDebugDieBacktrace( 'Revision constructor passed invalid row format.' );
+               }
        }
        
        /**#@+
@@ -346,5 +365,49 @@ class Revision {
                }
                return implode( ',', $flags );
        }
+       
+       /**
+        * Insert a new revision into the database, returning the new revision ID
+        * number on success and dies horribly on failure.
+        *
+        * @param Database $dbw
+        * @return int
+        */
+       function insertOn( &$dbw ) {
+               $fname = 'Revision::insertOn';
+               wfProfileIn( $fname );
+               
+               $mungedText = $this->mText;
+               $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();
+               
+               # Record the edit in revisions
+               $dbw->insert( 'revision',
+                       array(
+                               'rev_id'         => $revisionId,
+                               'rev_page'       => $this->mPage,
+                               '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 ),
+                       ), $fname
+               );
+               
+               wfProfileOut( $fname );
+               return $revisionId;
+       }
 }
 ?>
\ No newline at end of file