X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fpage%2FPageArchive.php;h=05247cafebb09e25090cb5f0e1fcc6a8a528ccd2;hp=c98d4f739d1fff40f1a2af847bedf1594c327a14;hb=7458232874986edf20fbd85f45f42295b1689524;hpb=2d545a6e6da6d8a075afcedadc27d3cc53692631 diff --git a/includes/page/PageArchive.php b/includes/page/PageArchive.php index c98d4f739d..05247cafeb 100644 --- a/includes/page/PageArchive.php +++ b/includes/page/PageArchive.php @@ -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' ) + ); } }