Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 33
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
EditSummariesAid
0.00% covered (danger)
0.00%
0 / 33
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 1
 getData
0.00% covered (danger)
0.00%
0 / 33
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2declare( strict_types = 1 );
3
4namespace MediaWiki\Extension\Translate\TranslatorInterface\Aid;
5
6use MediaWiki\MediaWikiServices;
7use MWTimestamp;
8use 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 */
17class 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}