Merge "Show a warning in edit preview when a template loop is detected"
[lhc/web/wiklou.git] / includes / import / WikiRevision.php
index df71524..edb0c9a 100644 (file)
@@ -28,6 +28,8 @@
  * Represents a revision, log entry or upload during the import process.
  * This class sticks closely to the structure of the XML dump.
  *
+ * @since 1.2
+ *
  * @ingroup SpecialPage
  */
 class WikiRevision {
@@ -39,79 +41,143 @@ class WikiRevision {
         */
        public $importer = null;
 
-       /** @var Title */
+       /**
+        * @since 1.2
+        * @var Title
+        */
        public $title = null;
 
-       /** @var int */
+       /**
+        * @since 1.6.4
+        * @var int
+        */
        public $id = 0;
 
-       /** @var string */
+       /**
+        * @since 1.2
+        * @var string
+        */
        public $timestamp = "20010115000000";
 
        /**
+        * @since 1.2
         * @var int
         * @deprecated in 1.29. Unused.
         * @note Introduced in 436a028086fb3f01c4605c5ad2964d56f9306aca, unused there, unused now.
         */
        public $user = 0;
 
-       /** @var string */
+       /**
+        * @since 1.2
+        * @var string
+        */
        public $user_text = "";
 
-       /** @var User */
+       /**
+        * @since 1.27
+        * @var User
+        */
        public $userObj = null;
 
-       /** @var string */
+       /**
+        * @since 1.21
+        * @var string
+        */
        public $model = null;
 
-       /** @var string */
+       /**
+        * @since 1.21
+        * @var string
+        */
        public $format = null;
 
-       /** @var string */
+       /**
+        * @since 1.2
+        * @var string
+        */
        public $text = "";
 
-       /** @var int */
+       /**
+        * @since 1.12.2
+        * @var int
+        */
        protected $size;
 
-       /** @var Content */
+       /**
+        * @since 1.21
+        * @var Content
+        */
        public $content = null;
 
-       /** @var ContentHandler */
+       /**
+        * @since 1.24
+        * @var ContentHandler
+        */
        protected $contentHandler = null;
 
-       /** @var string */
+       /**
+        * @since 1.2.6
+        * @var string
+        */
        public $comment = "";
 
-       /** @var bool */
+       /**
+        * @since 1.5.7
+        * @var bool
+        */
        public $minor = false;
 
-       /** @var string */
+       /**
+        * @since 1.12.2
+        * @var string
+        */
        public $type = "";
 
-       /** @var string */
+       /**
+        * @since 1.12.2
+        * @var string
+        */
        public $action = "";
 
-       /** @var string */
+       /**
+        * @since 1.12.2
+        * @var string
+        */
        public $params = "";
 
-       /** @var string */
+       /**
+        * @since 1.17
+        * @var string
+        */
        public $fileSrc = '';
 
-       /** @var bool|string */
+       /**
+        * @since 1.17
+        * @var bool|string
+        */
        public $sha1base36 = false;
 
        /**
-       /** @var string */
+        * @since 1.17
+        * @var string
+        */
        public $archiveName = '';
 
+       /**
+        * @since 1.12.2
+        */
        protected $filename;
 
-       /** @var mixed */
+       /**
+        * @since 1.12.2
+        * @var mixed
+        */
        protected $src;
 
        /**
         * @since 1.18
         * @var bool
+        * @todo Unused?
         */
        public $isTemp = false;
 
@@ -134,6 +200,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.7 taking a Title object (string before)
         * @param Title $title
         * @throws MWException
         */
@@ -149,6 +216,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.6.4
         * @param int $id
         */
        public function setID( $id ) {
@@ -156,6 +224,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.2
         * @param string $ts
         */
        public function setTimestamp( $ts ) {
@@ -164,6 +233,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.2
         * @param string $user
         */
        public function setUsername( $user ) {
@@ -171,6 +241,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.27
         * @param User $user
         */
        public function setUserObj( $user ) {
@@ -178,6 +249,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.2
         * @param string $ip
         */
        public function setUserIP( $ip ) {
@@ -185,6 +257,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.21
         * @param string $model
         */
        public function setModel( $model ) {
@@ -192,6 +265,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.21
         * @param string $format
         */
        public function setFormat( $format ) {
@@ -199,6 +273,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.2
         * @param string $text
         */
        public function setText( $text ) {
@@ -206,6 +281,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.2.6
         * @param string $text
         */
        public function setComment( $text ) {
@@ -213,6 +289,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.5.7
         * @param bool $minor
         */
        public function setMinor( $minor ) {
@@ -220,6 +297,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.12.2
         * @param mixed $src
         */
        public function setSrc( $src ) {
@@ -227,6 +305,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.17
         * @param string $src
         * @param bool $isTemp
         */
@@ -237,6 +316,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.17
         * @param string $sha1base36
         */
        public function setSha1Base36( $sha1base36 ) {
@@ -244,6 +324,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.12.2
         * @param string $filename
         */
        public function setFilename( $filename ) {
@@ -251,6 +332,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.17
         * @param string $archiveName
         */
        public function setArchiveName( $archiveName ) {
@@ -258,6 +340,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.12.2
         * @param int $size
         */
        public function setSize( $size ) {
@@ -265,6 +348,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.12.2
         * @param string $type
         */
        public function setType( $type ) {
@@ -272,6 +356,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.12.2
         * @param string $action
         */
        public function setAction( $action ) {
@@ -279,6 +364,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.12.2
         * @param array $params
         */
        public function setParams( $params ) {
@@ -286,6 +372,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.18
         * @param bool $noupdates
         */
        public function setNoUpdates( $noupdates ) {
@@ -293,6 +380,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.2
         * @return Title
         */
        public function getTitle() {
@@ -300,6 +388,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.6.4
         * @return int
         */
        public function getID() {
@@ -307,6 +396,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.2
         * @return string
         */
        public function getTimestamp() {
@@ -314,6 +404,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.2
         * @return string
         */
        public function getUser() {
@@ -321,6 +412,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.27
         * @return User
         */
        public function getUserObj() {
@@ -328,6 +420,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.2
         * @return string
         */
        public function getText() {
@@ -335,6 +428,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.24
         * @return ContentHandler
         */
        public function getContentHandler() {
@@ -346,6 +440,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.21
         * @return Content
         */
        public function getContent() {
@@ -358,6 +453,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.21
         * @return string
         */
        public function getModel() {
@@ -369,6 +465,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.21
         * @return string
         */
        public function getFormat() {
@@ -380,6 +477,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.2.6
         * @return string
         */
        public function getComment() {
@@ -387,6 +485,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.5.7
         * @return bool
         */
        public function getMinor() {
@@ -394,6 +493,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.12.2
         * @return mixed
         */
        public function getSrc() {
@@ -401,6 +501,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.17
         * @return bool|string
         */
        public function getSha1() {
@@ -411,6 +512,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.17
         * @return string
         */
        public function getFileSrc() {
@@ -418,6 +520,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.17
         * @return bool
         */
        public function isTempSrc() {
@@ -425,6 +528,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.12.2
         * @return mixed
         */
        public function getFilename() {
@@ -432,6 +536,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.17
         * @return string
         */
        public function getArchiveName() {
@@ -439,6 +544,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.12.2
         * @return mixed
         */
        public function getSize() {
@@ -446,6 +552,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.12.2
         * @return string
         */
        public function getType() {
@@ -453,6 +560,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.12.2
         * @return string
         */
        public function getAction() {
@@ -460,6 +568,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.12.2
         * @return string
         */
        public function getParams() {
@@ -467,6 +576,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.4.1
         * @return bool
         */
        public function importOldRevision() {
@@ -497,11 +607,12 @@ class WikiRevision {
                        $pageId = $page->getId();
                        $created = false;
 
+                       // Note: sha1 has been in XML dumps since 2012. If you have an
+                       // older dump, the duplicate detection here won't work.
                        $prior = $dbw->selectField( 'revision', '1',
                                [ 'rev_page' => $pageId,
                                        'rev_timestamp' => $dbw->timestamp( $this->timestamp ),
-                                       'rev_user_text' => $userText,
-                                       'rev_comment' => $this->getComment() ],
+                                       'rev_sha1' => $this->sha1base36 ],
                                __METHOD__
                        );
                        if ( $prior ) {
@@ -568,6 +679,10 @@ class WikiRevision {
                return true;
        }
 
+       /**
+        * @since 1.12.2
+        * @return bool
+        */
        public function importLogItem() {
                $dbw = wfGetDB( DB_MASTER );
 
@@ -594,7 +709,6 @@ class WikiRevision {
                                'log_timestamp' => $dbw->timestamp( $this->timestamp ),
                                'log_namespace' => $this->getTitle()->getNamespace(),
                                'log_title' => $this->getTitle()->getDBkey(),
-                               'log_comment' => $this->getComment(),
                                # 'log_user_text' => $this->user_text,
                                'log_params' => $this->params ],
                        __METHOD__
@@ -606,9 +720,7 @@ class WikiRevision {
                                . $this->timestamp . "\n" );
                        return false;
                }
-               $log_id = $dbw->nextSequenceValue( 'logging_log_id_seq' );
                $data = [
-                       'log_id' => $log_id,
                        'log_type' => $this->type,
                        'log_action' => $this->action,
                        'log_timestamp' => $dbw->timestamp( $this->timestamp ),
@@ -616,15 +728,15 @@ class WikiRevision {
                        'log_user_text' => $userText,
                        'log_namespace' => $this->getTitle()->getNamespace(),
                        'log_title' => $this->getTitle()->getDBkey(),
-                       'log_comment' => $this->getComment(),
                        'log_params' => $this->params
-               ];
+               ] + CommentStore::newKey( 'log_comment' )->insert( $dbw, $this->getComment() );
                $dbw->insert( 'logging', $data, __METHOD__ );
 
                return true;
        }
 
        /**
+        * @since 1.12.2
         * @return bool
         */
        public function importUpload() {
@@ -696,6 +808,7 @@ class WikiRevision {
        }
 
        /**
+        * @since 1.12.2
         * @return bool|string
         */
        public function downloadSource() {