Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 33 |
|
0.00% |
0 / 1 |
CRAP | |
0.00% |
0 / 1 |
EditSummariesAid | |
0.00% |
0 / 33 |
|
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 1 |
getData | |
0.00% |
0 / 33 |
|
0.00% |
0 / 1 |
20 |
1 | <?php |
2 | declare( strict_types = 1 ); |
3 | |
4 | namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid; |
5 | |
6 | use MediaWiki\MediaWikiServices; |
7 | use MWTimestamp; |
8 | use Wikimedia\Rdbms\SelectQueryBuilder; |
9 | |
10 | /** |
11 | * Translation aid that provides last X edit summaries for a translation |
12 | * |
13 | * @author Eugene Wang'ombe |
14 | * @license GPL-2.0-or-later |
15 | * @since 2022.04 |
16 | */ |
17 | class EditSummariesAid extends TranslationAid { |
18 | private const COMMENT_COUNT = 3; |
19 | |
20 | public function getData(): array { |
21 | $pageTitle = $this->handle->getTitle(); |
22 | if ( !$pageTitle->exists() ) { |
23 | return []; |
24 | } |
25 | |
26 | $mwService = MediaWikiServices::getInstance(); |
27 | $revisionFactory = $mwService->getRevisionFactory(); |
28 | |
29 | // Build the query to fetch the last x revisions |
30 | $dbr = $mwService->getDBLoadBalancer()->getConnection( DB_REPLICA ); |
31 | $aid = $pageTitle->getArticleID(); |
32 | $revQuery = $revisionFactory->getQueryInfo(); |
33 | // TODO Migrate to RevisionStore::newSelectQueryBuilder once we support >= 1.41 |
34 | $result = $dbr->newSelectQueryBuilder() |
35 | ->tables( $revQuery[ 'tables' ] ) |
36 | ->fields( $revQuery[ 'fields' ] ) |
37 | ->where( [ 'rev_page' => $aid ] ) |
38 | ->orderBy( [ 'rev_timestamp', 'rev_id' ], SelectQueryBuilder::SORT_DESC ) |
39 | ->limit( self::COMMENT_COUNT ) |
40 | ->joinConds( $revQuery[ 'joins' ] ) |
41 | ->caller( __METHOD__ ) |
42 | ->fetchResultSet(); |
43 | |
44 | $editSummaries = []; |
45 | $commentFormatter = $mwService->getCommentFormatter(); |
46 | foreach ( $result as $row ) { |
47 | $revision = $revisionFactory->newRevisionFromRow( $row ); |
48 | $comment = $revision->getComment(); |
49 | |
50 | // The result of getComment() may return null. In that case |
51 | // skip processing of the summary. |
52 | if ( !$comment ) { |
53 | continue; |
54 | } |
55 | |
56 | $message = $commentFormatter->format( $comment->message->text() ); |
57 | |
58 | $editSummaries[] = [ |
59 | 'humanTimestamp' => $this->context->getLanguage() |
60 | ->getHumanTimestamp( new MWTimestamp( $revision->getTimestamp() ) ), |
61 | 'timestamp' => $revision->getTimestamp(), |
62 | 'summary' => $message, |
63 | 'revisionId' => $revision->getId() |
64 | ]; |
65 | } |
66 | |
67 | return $editSummaries; |
68 | } |
69 | } |