[MCR] Use RevisionStore::getArchiveQueryInfo in PageArchive
[lhc/web/wiklou.git] / includes / page / PageArchive.php
index c98d4f7..05247ca 100644 (file)
@@ -176,44 +176,32 @@ class PageArchive {
         * @return ResultWrapper
         */
        public function listRevisions() {
-               $dbr = wfGetDB( DB_REPLICA );
-               $commentQuery = CommentStore::newKey( 'ar_comment' )->getJoin();
-
-               $tables = [ 'archive' ] + $commentQuery['tables'];
-
-               $fields = [
-                       'ar_minor_edit', 'ar_timestamp', 'ar_user', 'ar_user_text',
-                       'ar_len', 'ar_deleted', 'ar_rev_id', 'ar_sha1',
-                       'ar_page_id'
-               ] + $commentQuery['fields'];
-
-               if ( $this->config->get( 'ContentHandlerUseDB' ) ) {
-                       $fields[] = 'ar_content_format';
-                       $fields[] = 'ar_content_model';
-               }
-
-               $conds = [ 'ar_namespace' => $this->title->getNamespace(),
-                       'ar_title' => $this->title->getDBkey() ];
+               $revisionStore = MediaWikiServices::getInstance()->getRevisionStore();
+               $queryInfo = $revisionStore->getArchiveQueryInfo();
 
+               $conds = [
+                       'ar_namespace' => $this->title->getNamespace(),
+                       'ar_title' => $this->title->getDBkey(),
+               ];
                $options = [ 'ORDER BY' => 'ar_timestamp DESC' ];
 
-               $join_conds = [] + $commentQuery['joins'];
-
                ChangeTags::modifyDisplayQuery(
-                       $tables,
-                       $fields,
+                       $queryInfo['tables'],
+                       $queryInfo['fields'],
                        $conds,
-                       $join_conds,
+                       $queryInfo['joins'],
                        $options,
                        ''
                );
 
-               return $dbr->select( $tables,
-                       $fields,
+               $dbr = wfGetDB( DB_REPLICA );
+               return $dbr->select(
+                       $queryInfo['tables'],
+                       $queryInfo['fields'],
                        $conds,
                        __METHOD__,
                        $options,
-                       $join_conds
+                       $queryInfo['joins']
                );
        }
 
@@ -231,12 +219,14 @@ class PageArchive {
                }
 
                $dbr = wfGetDB( DB_REPLICA );
+               $fileQuery = ArchivedFile::getQueryInfo();
                return $dbr->select(
-                       'filearchive',
-                       ArchivedFile::selectFields(),
+                       $fileQuery['tables'],
+                       $fileQuery['fields'],
                        [ 'fa_name' => $this->title->getDBkey() ],
                        __METHOD__,
-                       [ 'ORDER BY' => 'fa_timestamp DESC' ]
+                       [ 'ORDER BY' => 'fa_timestamp DESC' ],
+                       $fileQuery['joins']
                );
        }
 
@@ -249,34 +239,11 @@ class PageArchive {
         */
        public function getRevision( $timestamp ) {
                $dbr = wfGetDB( DB_REPLICA );
-               $commentQuery = CommentStore::newKey( 'ar_comment' )->getJoin();
-
-               $tables = [ 'archive' ] + $commentQuery['tables'];
-
-               $fields = [
-                       'ar_rev_id',
-                       'ar_text',
-                       'ar_user',
-                       'ar_user_text',
-                       'ar_timestamp',
-                       'ar_minor_edit',
-                       'ar_flags',
-                       'ar_text_id',
-                       'ar_deleted',
-                       'ar_len',
-                       'ar_sha1',
-               ] + $commentQuery['fields'];
-
-               if ( $this->config->get( 'ContentHandlerUseDB' ) ) {
-                       $fields[] = 'ar_content_format';
-                       $fields[] = 'ar_content_model';
-               }
-
-               $join_conds = [] + $commentQuery['joins'];
+               $arQuery = Revision::getArchiveQueryInfo();
 
                $row = $dbr->selectRow(
-                       $tables,
-                       $fields,
+                       $arQuery['tables'],
+                       $arQuery['fields'],
                        [
                                'ar_namespace' => $this->title->getNamespace(),
                                'ar_title' => $this->title->getDBkey(),
@@ -284,7 +251,7 @@ class PageArchive {
                        ],
                        __METHOD__,
                        [],
-                       $join_conds
+                       $arQuery['joins']
                );
 
                if ( $row ) {
@@ -563,47 +530,23 @@ class PageArchive {
                        $oldWhere['ar_timestamp'] = array_map( [ &$dbw, 'timestamp' ], $timestamps );
                }
 
-               $commentQuery = CommentStore::newKey( 'ar_comment' )->getJoin();
-
-               $tables = [ 'archive', 'revision' ] + $commentQuery['tables'];
-
-               $fields = [
-                       'ar_id',
-                       'ar_rev_id',
-                       'rev_id',
-                       'ar_text',
-                       'ar_user',
-                       'ar_user_text',
-                       'ar_timestamp',
-                       'ar_minor_edit',
-                       'ar_flags',
-                       'ar_text_id',
-                       'ar_deleted',
-                       'ar_page_id',
-                       'ar_len',
-                       'ar_sha1'
-               ] + $commentQuery['fields'];
-
-               if ( $this->config->get( 'ContentHandlerUseDB' ) ) {
-                       $fields[] = 'ar_content_format';
-                       $fields[] = 'ar_content_model';
-               }
-
-               $join_conds = [
-                       'revision' => [ 'LEFT JOIN', 'ar_rev_id=rev_id' ],
-               ] + $commentQuery['joins'];
+               $revisionStore = MediaWikiServices::getInstance()->getRevisionStore();
+               $queryInfo = $revisionStore->getArchiveQueryInfo();
+               $queryInfo['tables'][] = 'revision';
+               $queryInfo['fields'][] = 'rev_id';
+               $queryInfo['joins']['revision'] = [ 'LEFT JOIN', 'ar_rev_id=rev_id' ];
 
                /**
                 * Select each archived revision...
                 */
                $result = $dbw->select(
-                       $tables,
-                       $fields,
+                       $queryInfo['tables'],
+                       $queryInfo['fields'],
                        $oldWhere,
                        __METHOD__,
                        /* options */
                        [ 'ORDER BY' => 'ar_timestamp' ],
-                       $join_conds
+                       $queryInfo['joins']
                );
 
                $rev_count = $result->numRows();
@@ -734,18 +677,9 @@ class PageArchive {
                                                'deleted' => $unsuppress ? 0 : $row->ar_deleted
                                        ] );
 
+                               // This will also copy the revision to ip_changes if it was an IP edit.
                                $revision->insertOn( $dbw );
 
-                               // Also restore reference to the revision in ip_changes if it was an IP edit.
-                               if ( (int)$row->ar_rev_id === 0 && IP::isValid( $row->ar_user_text ) ) {
-                                       $ipcRow = [
-                                               'ipc_rev_id' => $row->ar_rev_id,
-                                               'ipc_rev_timestamp' => $row->ar_timestamp,
-                                               'ipc_hex' => IP::toHex( $row->ar_user_text ),
-                                       ];
-                                       $dbw->insert( 'ip_changes', $ipcRow, __METHOD__ );
-                               }
-
                                $restored++;
 
                                Hooks::run( 'ArticleRevisionUndeleted',
@@ -794,7 +728,9 @@ class PageArchive {
                        Hooks::run( 'ArticleUndelete',
                                [ &$this->title, $created, $comment, $oldPageId, $restoredPages ] );
                        if ( $this->title->getNamespace() == NS_FILE ) {
-                               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this->title, 'imagelinks' ) );
+                               DeferredUpdates::addUpdate(
+                                       new HTMLCacheUpdate( $this->title, 'imagelinks', 'file-restore' )
+                               );
                        }
                }